我想知道Linux中的进程如何确定它具有哪些特权?
假设有一个二进制程序Read_File
从文件/home/myname/data.txt
中读取并将其内容显示在STD输出中;现在,Read_File
如何确定是否具有读取data.txt
的权限,它会检查哪种类型的ID来确定特权?
最佳答案
首先,有一点背景知识:
该过程通常由特定用户运行。因此,例如,如果您自己登录并运行程序,它将以与您相同的特权运行。您可以使用stat
或ls -l
检查文件的权限。
使用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
=执行/遍历目录访问使用
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
或,您的应用程序本身可以放弃特权并更改其运行用户。这通常是系统守护程序执行操作的方式。ACL/扩展属性
注意扩展属性。使用
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。但是,正如您不知道的那样,这不是开发问题,而是与操作系统有关,我还是应该回答;)
祝好运并玩得开心点!
关于linux - Linux中的进程如何确定其拥有的特权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6305416/