/proc/$PID 中的文件(例如 ssh-agent、Chrome)不归用户所有,而是归 root 所有

Hau*_*ing 4 linux security permissions proc linux-kernel

我只是在回答另一个问题在这里:-),因此一看-看看在/proc/$PID/fdssh-agent,以找出它使用套接字。但我不能。我很惊讶地注意到大多数文件和目录都属于 root。ssh-agent作为我的用户运行(它的父进程也是如此)并且没有安装 SUID root。我无法找出 KDE 的确切启动位置。我好奇; 有人可以告诉我这里发生了什么吗?

或者这根本与用户无关,进程是否可以使用一些内核魔法/proc来向公众(甚至同一用户的其他进程)隐藏(大部分)他们的信息?

我刚刚检查了/proc/$PID/fd我所有的进程,并注意到这ssh-agent不是唯一具有这个奇怪属性的进程。其他的是一堆 Chrome 进程和kdesud(也没有 SUID 根二进制文件)。

mtk*_*mtk 6

[以下内容改编自我刚刚添加到proc(5)手册页的文本,该手册页回答了这个问题。]

下面的文件/proc/PID通常由进程的有效用户和有效组 ID 拥有。但是,作为安全措施,root:root如果进程的“可转储”属性设置为 1 以外的值,则所有权将建立。 [此属性的默认值为 1。将此属性设置为 0 会导致进程不产生核心转储,因为它们可能包含敏感信息。同样,某些文件/proc/PID可以提供对敏感信息的访问。]

由于以下原因,此属性可能会更改:

  1. 该属性是通过prctl(2) PR_SET_DUMPABLE操作显式设置的。
  2. 该属性已重置为文件中的值/proc/sys/fs/suid_dumpable

in 中的默认值为/proc/sys/fs/suid_dumpable0。prctl(2)手册页suid_dumpable中描述了可能将 dumpable 属性重置为文件中的值的原因:

  • 进程的有效用户或组 ID 已更改。
  • 进程的文件系统用户或组 ID 已更改。
  • 该进程执行 set-user-ID 或 set-group-ID 程序,或具有功能的程序。