即使具有适当的权限也无法读取 /proc/pid/stack 文件

即使具有适当的权限也无法读取 /proc/pid/stack 文件

据我所知,如果我有权限的话,我应该能够读取常规文件内容。

以下是输出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

这里的不寻常之处在于openof/proc/pid/stack成功了,但是尝试readfrom 它却返回了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

相关内容