只有在我有权阅读时,才需要从bash脚本中的进程获取最后一次系统调用。我这样做:
# $pid is the pid from the process
cat /proc/$pid/syscall
但是当我这样做时,我收到了这样的信息:
cat: /proc/21/syscall: Permission denied
或者这个:
cat: /proc/2101/syscall: Operation not permitted
这是对的吗?显然权限被拒绝意味着我无法阅读它。但“不允许行动”是什么意思?
从一个过程中,我得到了这一行:
0 0x3 0x717000 0x10000 0x7ffca5422b00 0x0 0x79 0x7ffca5422c50 0x7f840be43810
哪一个是最后一次系统调用?
答案 0 :(得分:3)
关于Operation not permitted
,这是因为您具有对该文件的读取权限(该进程由您拥有),但内核禁止您这样做。
如果在出现该错误后运行dmesg
,您将看到以下行:
ptrace of pid 12304 was attempted by: cat (pid 12342)
这是因为内核避免跟踪不是当前进程的子进程。这是通过kernel.yama.ptrace_scope
配置选项控制的。如果你这样做
cat /proc/sys/kernel/yama/ptrace_scope
它的值为1.
更多信息:https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#ptrace
答案 1 :(得分:0)
如何使用strace
:
$ strace -o /tmp/out command args; tail -n 2 /tmp/out
exit_group(0) = ?
+++ exited with 0 +++