我正在寻找一个适用于 Linux 内核的信号记录器,无需修补内核。
我发现很多关于修补的文章,但我对此不感兴趣。
我运行的是默认 Ubuntu 13.04。
# uname -a
Linux bt 3.8.0-26-lowlatency #18-Ubuntu SMP PREEMPT Tue Jun 25 22:36:04 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
我需要:pid,comm(发送者)->信号(数字0-31)->pid,comm(捕手)
也会很棒:
pidtree of sender ----- - - - - - receiver(cmd) ---- child1 of receiver, etc
/ \----child2---child1 of child2(cmd)
ppid(+cmd) ----child3(+cmd)
/ \__child4(+cmd)
ppid of ppid(cmd)
....
/
init
捕手也是如此。 + 时间戳。
我已经发现了什么:
superfrink.net:Chad Clark 的 Linux UserSpace Signal Logging 补丁(记录从用户空间程序发送的信号。)(2003 年 3 月 10 日版本)
grsecurity patch有类似的实现。
我需要轻松简单的方法来在 Ubuntu 上实现这一目标。
答案1
我可以给你一个部分解决方案。
使用审计Linux 内核中的子系统。审计子系统记录核心转储信号。核心转储信号是:
- ABRT
- FPE
- 患病的
- 辞职
- SEGV
- 陷阱
- 系统
- 急救人员
- 公共汽车
- XCPU
- 新福泽
审核日志可以在 /var/log/audit.log 中找到。对于核心转储信号审核日志如下
type=ANOM_ABEND msg=audit(1386433952.455:141): auid=1000 uid=1000 gid=1000 ses=2 pid=6664 comm="bash" reason="memory violation" sig=24
上面是一个在信号 SIGXCPU 上记录到 uid 1000 用户的进程 6664 上的示例。从该日志中您可以找出“catcher”的 comm 和 pid 的详细信息。请注意,日志中的原因字段已损坏。即使有了这个日志,我们仍然对发件人一无所知。
您可以找到配置详细信息这里