Linux 将 'ruid' 和 'euid' 放在哪里?
Where does Linux keep 'ruid' and 'euid'?
我想知道 Linux 内核在哪里保存 'ruid' 和 'euid'。
以下是我对他们的了解。
当一个用户运行s 一个文件并且该文件变成一个进程时,该进程将拥有 ruid 和 euid。
如果文件已经设置为使用setuid,则进程的euid会变为该文件所有者的用户id,否则euid不会改变,与ruid相同。
然后,Linux内核允许进程根据ruid和euid运行另一个进程或使用系统中的其他资源。
所以,我认为这意味着内核必须将每个进程的 ruid 和 euid 保存在 RAM 中的某个位置。
我以为 'somewhere' 在 PCB 中,但是 PCB 块没有 ruid 和 euid 字段。
我试图在 '/proc' 目录的进程文件中找到它们,但失败了。
Linux在哪里保存运行ning进程的ruid和euid?
这里解释了它在新内核中是如何工作的:
从 user-space 的角度来看,可以使用 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
另请参阅此答案以获取有关旧内核的线索:
我想知道 Linux 内核在哪里保存 'ruid' 和 'euid'。
以下是我对他们的了解。
当一个用户运行s 一个文件并且该文件变成一个进程时,该进程将拥有 ruid 和 euid。
如果文件已经设置为使用setuid,则进程的euid会变为该文件所有者的用户id,否则euid不会改变,与ruid相同。
然后,Linux内核允许进程根据ruid和euid运行另一个进程或使用系统中的其他资源。
所以,我认为这意味着内核必须将每个进程的 ruid 和 euid 保存在 RAM 中的某个位置。
我以为 'somewhere' 在 PCB 中,但是 PCB 块没有 ruid 和 euid 字段。
我试图在 '/proc' 目录的进程文件中找到它们,但失败了。
Linux在哪里保存运行ning进程的ruid和euid?
这里解释了它在新内核中是如何工作的:
从 user-space 的角度来看,可以使用
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
另请参阅此答案以获取有关旧内核的线索: