- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道 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/
我正在尝试解决这个问题: 2014-04-07 14:00:58,628 srv proftpd[10143] srv (pfsense.localdomain[192.168.0.1]): FTP
我有以下代码片段。 char *const parmList[] = {"sh", "-c", "whoami", NULL}; if(geteuid() == 0) { seteuid(ato
我有以下 bash 脚本: echo "$(id -u)" mkdir test 我自己的用户id是1000。现在,当我在没有root权限的情况下运行python3.5并通过subprocess.ch
EUID 与 UID 不同。脚本中在什么上下文中使用了这两个? 我试图通过 echo "UID is $UID and EUID is $EUID" 获取值,但只有空格作为输出。我的机器运行 Ubun
我查看了我的一些系统日志及其关于适用于随机有效用户 ID 和组 ID 的错误的声明。例如: Jan 31 13:20:48 server exim[24551]: 2016-01-31 13:20:4
fork() 操作子进程从父进程继承属性真实有效的用户 Id,当执行 exec() 时它的行为如何? 最佳答案 Exec 不会改变它们中的任何一个。来自 linux 手册: The exec() fa
这个示例 suid 程序 #include #include #include #include void main() { int ret; printf("uid=%d, euid=%d\
如果我知道进程的 pid,如何找到进程的 euid我试过我使用以下方法获取进程 ID: ps -f -u user1 然后我用 grep pid 尝试了 ps aux , ps -ef 但看不到 eu
我想知道 Linux 内核在哪里保存“ruid”和“euid”。 以下是我对他们的了解。 当用户运行一个文件并且该文件变成一个进程时,该进程会获得 ruid 和 euid。 如果文件已经设置为使用se
如果我在脚本中将我的 shell 指定为/bin/bash,则 root 的 EUID 为 0。如果我不这样做,并且脚本在我的默认 shell(也是/bin/bash)中运行,则 root 的 EUI
我被分配到 Write a C program that prints the following identifiers PID, PPID, SID, PGID, UID, EUID. 作业接着问
上下文:我正在获取当前的 Ruby 进程 ID。 Process.pid #=> 95291 Process.ppid #=> 95201 Process.uid #=> 501 Process.
如LDD3第6章p175所示,我们可以通过current->uid获取当前进程的UID和EUID和 current->euid . 但是struct task_struct的定义Linux Kerne
我正在尝试使用 TestCafe 在 CircleCi 上运行浏览器测试。我已经关注了这个documentation 。主要问题是chrome浏览器打不开。 CircleCi 能够成功下载镜像,因为
我是一名优秀的程序员,十分优秀!