我正在使用auditd 来监控我的系统是否有杀戮。通常我会看到以下几行。作为 bash shell 的示例,我在 pid 16207 的 sleep 命令上执行了kill -9。据我了解,SYSCALL 中的 a0=3f4f 是要杀死的 pid 的十六进制表示,即 opid=16207 OBJ_PID。
type=SYSCALL msg=audit(1484657892.027:5580849): arch=c000003e syscall=62 success=yes exit=0 a0=3f4f a1=9 a2=0 a3=7ffe782998e0 items=0 ppid=16209 pid=16212 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=2282 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="log_kill"
type=OBJ_PID msg=audit(1484657892.027:5580849): opid=16207 oauid=0 ouid=0 oses=2275 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep"
这一切都很好,我想我明白正在记录的内容。在我们运行许多进程的实时系统中,偶尔会有一个进程被终止。当我检查审核日志中的终止信号时,我得到以下信息:
type=SYSCALL msg=audit(1484742595.249:7657673): arch=c000003e syscall=62 success=yes exit=0 a0=9640 a1=f a2=0 a3=7ffec4d845f0 items=0 ppid=1 pid=38430 auid=1158 uid=1158 gid=1173 euid=1158 suid=1158 fsuid=1158 egid=1173 sgid=1173 fsgid=1173 tty=(none) ses=1730 comm="startkde" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="log_kill"
type=OBJ_PID msg=audit(1484742595.249:7657673): opid=38373 oauid=1158 ouid=1158 oses=1730 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="java"
这里a0=9640给出了十进制pid 38464,这不是opid=38373。谁能解释为什么会这样?
或者,换句话来说,为什么发送到 pid 0x9640(即 38464)的进程的 SYSCALL Kill 应该被 OBJ_PID 38373 接收?