我想知道 Linux 内核在哪里保存“ruid”和“euid”。
以下是我对他们的了解。
当用户运行一个文件并且该文件变成一个进程时,该进程将拥有 ruid 和 euid。
如果文件已经设置为使用setuid,进程的euid 将更改为该文件所有者的用户id,否则euid 不会更改并与ruid 相同。
然后,Linux 内核允许进程根据 ruid 和 euid 运行另一个进程或使用系统中的其他资源。
所以,我认为这意味着内核必须将每个进程的 ruid 和 euid 保存在 RAM 中的某个地方。
我认为“某处”在 PCB 中,但 PCB 块没有 ruid 和 euid 字段。
我试图在'/proc'目录的进程文件中找到它们,但失败了。
Linux 在哪里保存正在运行的进程的 ruid 和 euid?
最佳答案
以下是它在新内核中如何工作的解释:
setreuid()
系统调用更改真实有效的用户 ID。使用细节见 man 2 setreuidstruct cred
;查看 struct task_struct 中的 .cred
字段.uid
的 struct cred
字段中;参见 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);
另请参阅此答案以获取有关旧内核的线索: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/