使用PTRACE_TRACEME EPERM失败-f strace/bin/ls(不允许操作)

use*_*497 12 permissions strace

我跑的时候

strace -f strace /bin/ls 
Run Code Online (Sandbox Code Playgroud)

知道它失败的strace工作

ptrace(PTRACE_TRACEME, 0, 0, 0) = -1 EPERM (Operation not permitted) 
Run Code Online (Sandbox Code Playgroud)

即使是root帐号.

它有什么解决方案吗?

ken*_*orb 11

搬运工人

strace在Docker容器中运行时,要启用ptrace,请使用SYS_PTRACEparam 运行:

docker run -it --cap-add SYS_PTRACE ubuntu
Run Code Online (Sandbox Code Playgroud)

请参阅:在Docker中运行Strace.


Joe*_*ato 2

我在最近一篇有关 strace 的博客文章中提到了这一点以及更多有用的提示。

您需要启用对 gdb、strace 和类似工具的支持才能附加到系统上的进程。

您可以通过运行命令来设置设置过程来临时执行此操作:

sudo bash -c 'echo 0 > /proc/sys/kernel/yama/ptrace_scope'

您可以通过修改/etc/sysctl.d/10-ptrace.conf和设置在系统重新引导之间保留该设置kernel.yama.ptrace_scope = 0

如果您的系统没有/etc/sysctl.d/10-ptrace.conf,可以修改/etc/sysctl.conf和设置kernel.yama.ptrace_scope = 0