2015-10-04 51 views
0

只有当我有权限读取时,我才需要从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 

哪一个是最后的系统调用?

+0

对于“权限被拒绝”:尝试以root身份运行或使用'sudo'? – ace

+0

不允许的操作是问题。权限被拒绝意味着我无法阅读,所以没关系,但是什么意思是不允许的操作? – exsnake

回答

0

怎么样使用strace

$ strace -o /tmp/out command args; tail -n 2 /tmp/out 
exit_group(0)       = ? 
+++ exited with 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

+0

有什么方法可以避免并阅读它? – exsnake

+0

使用'sudo',或使用'echo 0>/proc/sys/kernel/yama/ptrace_scope'来禁用保护。为了在重新启动时保持永久性,请查看您是否拥有文件'/ etc/sysctl.d/10-ptrace.conf'并将其设置为0。 –