据我所知,如果我有权这样做,我应该能够读取常规文件内容.
以下是运行Linux系统的其中一个进程的堆栈文件(/ proc / pid / stack)的ls -l堆栈输出:
-r – r – r– 1 Usr1 Usr1 0 Sep 20 18:08 stack
查看权限,我应该能够读取该文件.
虽然每当我尝试将文件(vi堆栈)读取为Usr1时,它只显示一个空文件.同时当我尝试以root用户身份打开文件时,我得到以下输出.
[] ptrace_stop 0x154 / 0x270
[] get_signal_to_deliver 0x3dc / 0x610
[] do_signal 0x3f / 0x8d0
..
..
..
我无法弄清楚到底发生了什么?
解决方法:
这里不寻常的是/ proc / pid / stack的打开成功,但是尝试从中读取它会返回EPERM.
用于显示/ proc / pid / stack,fs / proc / base.c:proc_pid_stack()内容的内核源代码调用lock_trace(),如果调用者无权访问ptrace,则会返回权限错误目标过程.
在许多Linux发行版中,有一些Linux安全模块可能会限制ptrace的使用.其中一个是Yama,如果你使用Ubuntu你会遇到.使用ptrace的权限仅限于root或目标的祖先(通常是父级)进程.你可以用它来检查
root@ubuntu:~# cat /proc/sys/kernel/yama/ptrace_scope
1
并且可以通过执行来禁用它
root@ubuntu:~# echo 0 > /proc/sys/kernel/yama/ptrace_scope
此后,您将能够cat / proc / pid / stack.
标签:linux,proc,files
来源: https://codeday.me/bug/20190816/1669223.html