2015-10-04 50 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。 –