我正在尝试读取两个特定文件,即status
和smaps_rollup
下的所有进程/proc
。所有进程目录都有dr-xr-xr-x
权限,我可以进入这些目录中的每一个。
对于所有进程,这两个文件的权限都是-r--r--r--
.
这是奇怪的行为。假设我尝试读取 PID 1 的两个文件。我可以读取status
file,但不能读取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
Run Code Online (Sandbox Code Playgroud)
我查找了相关问题并遇到了其中的一些问题[1][2][3][4]。他们都没有同样的问题。这些其他问题的解决方案必须修复目录上缺少的可执行权限。这里的情况并非如此。
这是 proc 的挂载信息:
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
Run Code Online (Sandbox Code Playgroud)
我正在使用 Arch Linux 提供的内核 6.2.7-arch1-1 运行 Arch Linux。
我正在寻找对这种奇怪行为的正确解释。除了使用 sudo 作为解决方法之外,我还能做些什么来解决这个问题吗?
Ste*_*itt 10
\xe2\x80\x99t 似乎没有明确记录;it\xe2\x80\x99sman 5 proc
通过以下文档传递地记录在 中/proc/[pid]/maps
:
\n\n访问此文件的权限由
\nptrace
\n访问模式PTRACE_MODE_READ_FSCREDS
检查控制;看ptrace(2)
。
文档smaps
说
\n\n这些行中的第一行显示的信息与\n中为映射显示的信息相同
\n/proc/[pid]/maps
。
由于后者很敏感,因此以类似的方式对其进行保护。smaps_rollup
不太敏感,可以打开,但据我所知,后一个补丁还没有 \xe2\x80\x99 到任何地方。
应该可以使用功能来解决这个问题,但我还没有尝试过\xe2\x80\x99t。
\n\xe2\x80\x99中的许多文件、目录和链接/proc
不一定可以按照其权限指示进行访问;maps
特别是,许多文件需要与和smaps
,相同的权限PTRACE_MODE_READ_FSCREDS
。这些要求详见man 5 proc
。这意味着可见权限只能被视为权限的上限;特别是,它们可用于确定/proc
条目是否用于更新内核设置(it\xe2\x80\x99s 可写),而不仅仅是查看它们。
归档时间: |
|
查看次数: |
435 次 |
最近记录: |