据我所知,如果我有权限的话,我应该能够读取常规文件内容。
以下是输出ls -l 堆栈为了堆我的 Linux 系统中运行的进程之一的文件(/proc/pid/stack):
-r--r--r-- 1 Usr1 Usr1 0 九月 20 日 18:08 堆栈
查看权限,我应该能够读取该文件。
尽管每当我尝试读取文件时(vi堆栈) 作为用户1,它只显示一个空文件。同时,当我尝试将文件打开为根用户。
[] ptrace_stop+0x154/0x270 [] get_signal_to_deliver+0x3dc/0x610 [] do_signal+0x3f/0x8d0 .. .. ..
我无法弄清楚究竟发生了什么?
答案1
这里的不寻常之处在于open
of/proc/pid/stack
成功了,但是尝试read
from 它却返回了EPERM
。
/proc/pid/stack
用于显示, fs/proc/base.c:proc_pid_stack()
, 调用内容的内核源代码lock_trace()
,如果调用者无权访问,将返回权限错误跟踪目标进程。
在许多 Linux 发行版上,有一些 Linux 安全模块可能会限制ptrace
.其中之一是阎王,如果您使用 Ubuntu,您将会遇到这种情况。使用权限ptrace
仅限于目标的根进程或祖先(通常是父)进程。你可以检查一下
root@ubuntu:~# cat /proc/sys/kernel/yama/ptrace_scope
1
并且可以通过执行以下操作来禁用它
root@ubuntu:~# echo 0 > /proc/sys/kernel/yama/ptrace_scope
此后,您将能够cat /proc/pid/stack
。