我有一个关于linux中的getuid()
和geteuid()
的问题。我知道getuid将返回当前进程的真实用户id。此外,geteuid()
将返回当前进程的有效用户id。
我的问题是,关于id的信息存储在哪里。除了/etc/passwd之外,我认为每个进程都应该在某个地方存储自己的id信息。
如果我是对的,请告诉我信息存储在哪里(比如堆叠一样的区域)。如果我错了,这个过程如何得到它的id?
发布于 2017-09-03 07:29:48
这是内核在其内部内存结构中维护的东西。
Linux内核使用名为struct task_struct
的东西。
Linux下的每个进程都被动态分配一个
struct task_struct
结构。
在Linux内核4.12.10中,定义如下:
struct.h
struct task_struct {
...
/* Objective and real subjective task credentials (COW): */
const struct cred __rcu *real_cred;
/* Effective (overridable) subjective task credentials (COW): */
const struct cred __rcu *cred;
cred.h
struct cred {
...
kuid_t uid; /* real UID of the task */
kgid_t gid; /* real GID of the task */
kuid_t suid; /* saved UID of the task */
kgid_t sgid; /* saved GID of the task */
kuid_t euid; /* effective UID of the task */
kgid_t egid; /* effective GID of the task */
kuid_t fsuid; /* UID for VFS ops */
kgid_t fsgid; /* GID for VFS ops */
用户空间进程不能直接访问这些结构。要获取此信息,此类进程必须使用系统调用(如getuid()
和geteuid()
)或/proc
文件系统。
https://stackoverflow.com/questions/46021135
复制相似问题