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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中的进程如何决定分配给它的权限相关的知识,希望对你有一定的参考价值。

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

答案

首先,一点背景:

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

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

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进程管理

1.5 常用UNIX/Linux命令 -进程控制类命令

JS JavaScript事件循环机制

线程和进程

建立一个linux操作系统用户,只给它看日志得权限,如何操作

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段