我想知道Linux中的进程如何确定它具有哪些特权?

假设有一个二进制程序Read_File从文件/home/myname/data.txt中读取并将其内容显示在STD输出中;现在,Read_File如何确定是否具有读取data.txt的权限,它会检查哪种类型的ID来确定特权?

最佳答案

首先,有一点背景知识:

该过程通常由特定用户运行。因此,例如,如果您自己登录并运行程序,它将以与您相同的特权运行。您可以使用statls -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 -lls -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被解析为名称(在这种情况下为malbertdomain users)。您可以使用ls -u将其视为数字值。

    如果您想以与自己不同的用户身份运行该应用程序,则可以使用susudo ,您的应用程序本身可以放弃特权并更改其运行用户。这通常是系统守护程序执行操作的方式。

    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/

    10-15 06:43