Selinux
如何剖析 SELinux SYSCALL 消息?
所以,我有這三個審核日誌條目
type=AVC msg=audit(1488396169.095:2624951): avc: denied { setrlimit } for pid=16804 comm="bash" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=process type=SYSCALL msg=audit(1488396169.095:2624951): arch=c000003e syscall=160 success=no exit=-13 a0=1 a1=7ffe06c17350 a2=2 a3=7fea949f3eb0 items=0 ppid=15216 pid=16804 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="bash" exe="/usr/bin/bash" subj=system_u:system_r:httpd_t:s0 key=(null) type=EOE msg=audit(1488396169.095:2624951):
在 AVC 行上,很容易立即看到
bash
具有上下文的程序system_u:system_r:httpd_t:s0
被拒絕設置資源限制的權限。在 SYSCALL 行上,對 syscall=160 的快速Google表明這是一個
setrlimit()
呼叫,這很糟糕。我不知道的是要求修改什麼資源。它試圖修改哪些資源?
因此,在這種情況下,我們已經知道有問題的系統呼叫是
setrlimit
. 搜尋setrlimit
顯示有一個包裝系統呼叫的同名 C 庫函式。該函式的文件表明第一個參數(審計日誌中 SYSCALL 行中的“a0”)表示有問題的資源,但手冊只告訴我們符號名稱,而不是數值。但是,它確實告訴我們符號是在
sys/resource.h
標頭檔中定義的。但是,該文件不包含實際值。為了獲得數值,我們查看了sysdeps/unix/sysv/linux/bits/resource.h。在那裡,我們找到了定義的各種 RLIMIT_ 宏。
查看這些,我們可以找到嘗試修改的資源。在這種情況下,a0=1,對應於 1 的宏變成了 RLIMIT_FSIZE。