“其他”无法读取 /proc/PID/ 下具有 -r--r--r-- 权限的“smaps_rollup”文件。为什么?

“其他”无法读取 /proc/PID/ 下具有 -r--r--r-- 权限的“smaps_rollup”文件。为什么?

我正在尝试读取两个特定文件,即statussmaps_rollup下的所有进程/proc。所有进程目录都有dr-xr-xr-x权限,我可以进入这些目录中的每一个。

对于所有进程,这两个文件的权限都是-r--r--r--.

这是奇怪的行为。假设我尝试读取 PID 1 的两个文件。我可以读取statusfile,但不能读取smaps_rollup.见下文:

$ cd /proc/1

$ ls -l status smaps_rollup
-r--r--r-- 1 root root 0 Apr  5 18:34 smaps_rollup
-r--r--r-- 1 root root 0 Mar 21 12:18 status

$ grep "Swap:" status
VmSwap:     1072 kB

$ grep "Swap:" smaps_rollup
grep: smaps_rollup: Permission denied

$ cat smaps_rollup
cat: smaps_rollup: Permission denied

我查找了相关问题并遇到了其中的一些问题[1][2][3][4]。他们都没有同样的问题。这些其他问题的解决方案必须修复目录上缺少的可执行权限。这里的情况并非如此。

这是 proc 的挂载信息:

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

我正在使用 Arch Linux 提供的内核 6.2.7-arch1-1 运行 Arch Linux。

我正在寻找对这种奇怪行为的正确解释。除了使用 sudo 作为解决方法之外,我还能做些什么来解决这个问题吗?


  1. 即使权限正确也无法读取文件

  2. 为什么我无法读取文件?

  3. “其他”的文件读取权限不起作用

  4. 如何检查/proc/的读取权限/文件?

答案1

这似乎没有明确记录;它被传递地记录在man 5 proc,通过文档/proc/[pid]/maps

ptrace 访问此文件的权限由访问模式检查控制PTRACE_MODE_READ_FSCREDS;看ptrace(2)

文档smaps

这些行中的第一行显示的信息与 中的映射显示的信息相同/proc/[pid]/maps

由于后者是敏感的,它以类似的方式受到保护。smaps_rollup不太敏感并且可以打开但据我所知,后一个补丁还没有取得任何进展。

应该可以使用功能来解决这个问题,但我还没有尝试过。

许多文件、目录和链接/proc不一定如其权限所指示的那样可访问;特别是,许多文件需要与mapssmaps,相同的权限PTRACE_MODE_READ_FSCREDS。这些要求详述于man 5 proc。这意味着可见权限只能被视为权限的上限;特别是,它们对于确定/proc条目是否用于更新内核设置(可写)而不是仅查看它们非常有用。

相关内容