根据glibc 手册的进程角色部分:
A process also has a real user ID which identifies the user who created the process ...
因此,为了验证这一点,我运行了以下命令:
ps -eo cmd,ruid,euid | grep 'bash\|login'
然后显示(lgd账号的uid为1000):
login --lgd 0 0
-bash 1000 1000
为什么 ruidbash
的值不是 0 ,因为它的创建者login
属于 root 用户?我误解了它还是login
调用函数喜欢setuid()
改变 bash 的 ruid ?
login
确实在运行之前更改了用户 IDbash
。在影子实现中,您可以在此处看到这一点,在 shell 启动之前进行了很多进一步的设置。您引用的链接中描述的角色差异与 setuid 程序确实相关。如果您制作 的副本
id
,则将其设为 setuid,id -u
并将id -ru
显示不同的值,后者是启动该过程的用户 ID。