我看到,通常的用户进程获得了用户可读的权限:
-r-------- 1 1000 1000 0 Nov 19 13:51 /proc/9083/environ
但例如 SCREEN 守护进程获得root
所有权:
-r-------- 1 root root 0 Nov 19 13:47 /proc/9167/environ
不过,9167 也是用户 UID:
# ps axnu|grep 9167
1000 9167 0.0 0.0 23488 2008 ? Ss 13:47 0:00 SCREEN
答案1
在大多数系统上,/usr/bin/screen
安装时设置用户标识位代表 root,这意味着它将首先以有效 UID 0 启动,然后才放弃权限(返回到您的正常 UID)。
(这用于实现“会话共享”功能,因为否则您的屏幕将不被允许连接到其他用户的屏幕插座。)
但是,由于特权进程可能会将敏感信息保存在内存中,因此内核为它们提供了特殊保护 - 即使它们放弃所有特权并切换到您的 UID,您仍然无法向它们发送信号、附加调试器或创建核心转储。
“无核心转储”选项(也称为fs.suid_dumpable
sysctl 设置)会导致 Screen 的/proc
文件永久归 root 所有,无论其有效 UID 如何。