gpt4 book ai didi

linux - Linux 将 'ruid' 和 'euid' 保存在哪里?

转载 作者:太空狗 更新时间:2023-10-29 12:26:05 27 4
gpt4 key购买 nike

我想知道 Linux 内核在哪里保存“ruid”和“euid”。

以下是我对他们的了解。

当用户运行一个文件并且该文件变成一个进程时,该进程会获得 ruid 和 euid。

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

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

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

我以为“某处”在 PCB 中,但 PCB block 没有用于 ruid 和 euid 的字段。

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

Linux 在哪里保存正在运行的进程的 ruid 和 euid?

最佳答案

这里解释了它在新内核中是如何工作的:

  • 从用户空间的角度来看,可以使用 setreuid() 系统调用更改真实有效的用户 ID。参见 man 2 setreuid了解使用详情

  • 内核正在使用 struct cred用于存储UID和EUID

  • 每个进程都有自己的struct cred;查看 struct task_struct 中的 .cred 字段

  • RUID保存在struct cred.uid字段中;见setreuid()系统调用代码:

      struct cred *new;
    kuid_t kruid, keuid;
    ...
    kruid = make_kuid(ns, ruid);
    keuid = make_kuid(ns, euid);
    ...
    new->uid = kruid;
    new->euid = keuid;
    ...
    return commit_creds(new);
  • commit_creds()函数实际上是设置当前进程的RUID和EUID

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

关于linux - Linux 将 'ruid' 和 'euid' 保存在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39873944/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com