Linux在哪里保持' ruid'和' euid'?

时间:2016-10-05 12:26:47

标签: linux permissions linux-kernel uid

我想知道Linux内核在哪里保持' ruid'和' euid'。

以下是我对它们的了解。

当用户运行文件并且文件转向进程时,进程将变为ruid和euid。

如果文件已设置为使用setuid,则进程的euid将更改为该文件所有者的用户ID,如果不是,则euid将不会更改并与ruid相同。

然后,Linux内核允许进程根据ruid和euid运行另一个进程或使用系统中的其他资源。

所以,我认为这意味着内核必须在RAM中的每个进程中保持ruid和euid。

我以为在某个地方'在PCB中,但PCB块没有ruid和euid字段。

我试图在' / proc'的过程文件中找到它们。目录,但失败了。

Linux在哪里保持ruid和euid运行进程?

1 个答案:

答案 0 :(得分:1)

以下是对新内核如何工作的解释:

  • 从用户空间的角度来看,可以使用setreuid()系统调用来更改真实有效的用户ID。有关使用详情,请参阅man 2 setreuid
  • 内核正在使用struct cred来存储UID和EUID
  • 每个流程都有自己的struct cred;请查看struct task_struct
  • 中的.cred字段
  • RUID存储在.uid的{​​{1}}字段中;请参阅setreuid()系统调用代码:

      
    struct cred
  • commit_creds()函数实际上是将RUID和EUID设置为当前进程

另请参阅此答案以获得有关旧内核的线索:How to get current process's UID and EUID in Linux Kernel 4.2?