是什么原因导致/proc//* 尽管进程以普通用户身份启动,但资源仍归 root 所有?

是什么原因导致/proc//* 尽管进程以普通用户身份启动,但资源仍归 root 所有?

我注意到某些过程(例如 bash)的整个/proc/<pid>/资源可供创建该过程的用户读取。然而,其他进程(例如 chrome 或 gnome-keyring-daemon)的大部分/proc/<pid>/资源只能由 root 访问,尽管进程本身由普通用户拥有并且没有调用 suid。

我深入研究了内核,发现如果任务缺少“可转储”标志,/proc/ 内容就会受到限制,但是我很难理解在什么情况下任务变得不可转储(除了 setuid 情况,这不适用于 chrome 或 gnome-keyring):

https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/fs/proc/base.c#L1532

有人愿意帮助我了解其基本机制及其原因吗?

谢谢!

编辑:

找到了一个很好的文档,说明了为什么您不希望gnome-keyring-daemon用户可以转储 SSH 代理(例如 )。仍不确定如何 gnome-keyring-daemon使自己变得不可倾倒。

https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/Documentation/security/Yama.txt#L30

答案1

Linux有一个系统调用,它会改变dumpable标志。这是一些示例代码,其中我写几年前:

#include <sys/prctl.h>
...
/* The last three arguments are just padding, because the
 * system call requires five arguments.
 */
prctl(PR_SET_DUMPABLE,1,42,42,42);

出于安全原因,可能gnome-keyring-daemon故意将标志设置dumpable为零。

相关内容