Permissions strace-f strace/bin/ls与PTRACE_TRACEME EPERM一起失败(不允许操作)
当我跑的时候Permissions strace-f strace/bin/ls与PTRACE_TRACEME EPERM一起失败(不允许操作),permissions,strace,Permissions,Strace,当我跑的时候 strace -f strace /bin/ls 要知道strace是如何工作的,它失败了 ptrace(PTRACE_TRACEME, 0, 0, 0) = -1 EPERM (Operation not permitted) 即使是根帐户 有什么解决办法吗?我在最近的一篇文章中提到了这一点和更多有用的提示 您需要启用对gdb、strace和类似工具的支持,以连接到系统上的进程 您可以通过运行命令设置设置过程来临时执行此操作: sudobash-c'echo 0>/pro
strace -f strace /bin/ls
要知道strace是如何工作的,它失败了
ptrace(PTRACE_TRACEME, 0, 0, 0) = -1 EPERM (Operation not permitted)
即使是根帐户
有什么解决办法吗?我在最近的一篇文章中提到了这一点和更多有用的提示 您需要启用对gdb、strace和类似工具的支持,以连接到系统上的进程 您可以通过运行命令设置设置过程来临时执行此操作:
sudobash-c'echo 0>/proc/sys/kernel/yama/ptrace\u scope'
通过修改/etc/sysctl.d/10 ptrace.conf
和设置kernel.yama.ptrace\u scope=0,可以在系统重新启动之间保持该设置
如果您的系统没有/etc/sysctl.d/10 ptrace.conf
,您可以修改/etc/sysctl.conf
并设置kernel.yama.ptrace\u scope=0
Docker
在Docker容器内运行strace
时,要启用,请使用SYS_PTRACE
param运行:
docker run -it --cap-add SYS_PTRACE ubuntu
请参阅:。ptrace系统调用仅限于每个进程一个跟踪应用程序
男子比赛:
这意味着只有调试应用程序可以附加到同一进程。当您完成strace-f时,您告诉它附加由调试的程序启动的所有进程。在您的情况下,strace调用fork创建一个新进程,并使用ptrace系统调用设置新进程以进行调试。然后,它使用您提供给调用的参数调用exec。然后再次启动strace,尝试再次执行fork和ptrace。但是第二个ptrace在EPERM中失败,因为第一个strace已经连接到该进程
在不带-f参数的情况下运行first strace允许您从第二个strace跟踪第一个线程,而第二个strace正在跟踪ls
strace strace -f ls
当进行特定的系统调用时,可以从lwp中分离-b,但它只支持execve。如果有ptrace呼叫支持,那将是完美的。这意味着strace或者需要一个小补丁来支持ptrace调用
其他潜在的黑客包括预加载库,它通过一些技巧实现分离
更好的替代方法是使用跟踪工具systemtap或trace cmd,它可以使用内核提供的跟踪基础结构而不是ptrace。在cat/proc/sys/kernel/yama/ptrace\u scope
0之后,我遇到了相同的错误。pid 13953]ptrace(ptrace_-TRACEME,0,0,0)=-1 EPERM(不允许操作)尽管我使用root并且cat/proc/sys/kernel/yama/ptrace_scope
产生0,但我还是得到了错误。这个问题可能是由于进程在docker容器中运行。有这方面的经验吗?
strace strace -f ls