bash中进程的最后一次系统调用



只有在我有读取权限的情况下,我才需要从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 +++

最新更新