linux中的进程如何决定分配给它的权限
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中的进程如何决定分配给它的权限相关的知识,希望对你有一定的参考价值。
我想知道Linux中的进程如何决定它具有哪些特权?假设有一个二进制程序Read_File
从文件/home/myname/data.txt
读取并显示它的内容到STD输出,现在Read_File
如何决定它是否有权读取data.txt
,它检查什么类型的ID来决定权限?
首先,一点背景:
该过程通常由特定用户运行。因此,例如,如果您自己登录并运行程序,它将以与您自己相同的权限运行。您可以使用stat
或ls -l
检查文件的权限。
Using stat
malbert@dredg:/tmp$ stat foo
File: `foo'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fb00h/64256d Inode: 618 Links: 1
Access: (0644/-rw-r--r--) Uid: (11204/ malbert) Gid: (10513/domain users)
Access: 2011-06-10 13:03:27.181227226 +0200
Modify: 2011-06-10 13:03:27.181227226 +0200
Change: 2011-06-10 13:03:27.181227226 +0200
这里重要的信息是:
Access: (0644/-rw-r--r--) Uid: (11204/ malbert) Gid: (10513/domain users)
这会告诉您所有者(rw-
),组(r--
)和其他所有人(r--
)的权限。它还会显示当前所有者ID(Uid
)和当前组ID(Gid
)。
缩写代表:
r
=读取权限w
=写访问权限x
=执行/遍历目录访问
Using ls -l
ls -l
为您提供快速摘要:
malbert@dredg:/tmp$ ls -l /tmp
total 48
drwx------ 2 malbert domain users 4096 2011-06-10 08:51 akonadi-malbert.zOSngu
-rw-r--r-- 1 malbert domain users 0 2011-06-10 13:03 foo
drwx------ 2 kdm nogroup 4096 2011-06-10 08:51 kde-kdm
drwx------ 3 malbert domain users 4096 2011-06-10 08:51 kde-malbert
[snip]
在这里,您可以看到与stat
相同的信息,但作为摘要。此外,uid和gid被分解为名称(在本例中为malbert
和domain users
)。您可以使用ls -u
将这些视为数值。
如果您想以与自己不同的用户身份运行应用程序,您可以使用su
,sudo
或您的应用程序本身可以删除特权并更改其运行的用户。这通常是系统守护进程执行操作的方式。
ACLs / extended attributes
扩展属性要小心。使用ls -l
列出文件时,可以看到附加的+
符号。例如:
malbert@dredg:/tmp$ ls -l
total 48
drwx------ 2 malbert domain users 4096 2011-06-10 08:51 akonadi-malbert.zOSngu
-rw-rwxr--+ 1 malbert domain users 0 2011-06-10 13:03 foo
drwx------ 2 kdm nogroup 4096 2011-06-10 08:51 kde-kdm
drwx------ 3 malbert domain users 4096 2011-06-10 08:51 kde-malbert
[snip]
请注意以下行:
-rwxr--+ 1 malbert domain users 0 2011-06-10 13:03 foo
+
登录-rwxr--+
指向扩展属性。这些可能是ACL。 SuSE文档中有an excellent document on ACLs。如果需要,去看看吧。解释ACL肯定会爆炸这篇文章,所以我不讨论这些。
扩展属性也可以与文件系统相关。有关详细信息,请参阅the man page of chattr。
现在,作为旁注:这是StackOverflow。问题应该与发展有关。对于像这样的问题,有http://www.serverfault.com。但是你不知道,这不是一个开发问题,而是与操作系统有关,我觉得我应该回答;)
祝好运并玩得开心点!
这个过程没有做出任何决定;每当它尝试操作时,操作系统都会检查它的EUID并决定是否具有所需的权限。
例如,当它尝试访问文件时,将检查文件的所有者和权限。如果进程的EUID没有足够的操作权限,则该操作将失败(通常使用EPERM
)。
以上是关于linux中的进程如何决定分配给它的权限的主要内容,如果未能解决你的问题,请参考以下文章
建立一个linux操作系统用户,只给它看日志得权限,如何操作
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段