只有在我有读取权限的情况下,我才需要从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
最后一个系统调用是哪个?
关于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
使用strace
:
$ strace -o /tmp/out command args; tail -n 2 /tmp/out
exit_group(0) = ?
+++ exited with 0 +++