linux中的进程如何决定分配给它的权限

时间:2011-06-10 11:00:49

标签: linux process privileges

我想知道Linux中的进程如何决定它拥有哪些权限? 假设有一个二进制程序Read_File从文件/home/myname/data.txt读取并显示它的内容到STD输出,现在Read_File如何决定它是否有权读取{{ 1}},它检查什么类型的ID来决定权限?

2 个答案:

答案 0 :(得分:6)

首先,有点背景知识:

该过程通常由特定用户运行。因此,例如,如果您自己登录并运行程序,它将以与您自己相同的权限运行。您可以使用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-- )和其他所有人的权限( {{ 1}} )。它还会显示当前所有者ID(r--)和当前组ID(Uid)。

缩写代表:

  • 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] 相同的信息,但作为摘要。此外,uid和gid被解析为名称(在本例中为statmalbert)。您可以使用domain users将这些视为数字值。

如果您希望以自己的不同用户身份运行应用程序,可以使用ls -usu 您的应用程序本身可以删除特权并更改其运行的用户。这通常是系统守护进程执行操作的方式。

ACL /扩展属性

注意扩展属性。使用sudo列出文件时,这些文件会带有附加的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 中的+符号指向扩展属性。这些可能是ACL。 SuSE文档中有an excellent document on ACLs。如果需要,去看看吧。解释ACL肯定会爆炸这篇文章,所以我不会讨论这些。

扩展属性也可能与文件系统有关。有关详细信息,请参阅the man page of chattr

现在,作为旁注:这是StackOverflow。问题应该与发展有关。对于像这样的问题,有http://www.serverfault.com。但是你不知道,这不是一个开发问题,而是与操作系统有关,我觉得我应该回答;)

祝你好运,玩得开心!

答案 1 :(得分:2)

这个过程没有做出任何决定;每当它尝试操作时,操作系统都会检查它的EUID并决定是否具有所需的权限。

例如,当它尝试访问文件时,会检查文件的所有者和权限。如果进程的EUID没有足够的操作权限,则该操作将失败(通常使用EPERM)。