要监控进程启动与关闭,核心是捕获execve(启动)和exit/exit_group(退出)系统调用;必须先确保auditd服务active且内核审计启用,再通过-a always,exit -F arch=b64 -S execve和-S exit,exit_group等规则精准审计,并用ausearch/aureport解析日志。

要监控进程启动与关闭,核心不是盯住某个可执行文件,而是捕获系统调用层面的进程创建和终止行为。auditd 本身不记录“进程生命周期”这个抽象概念,它记录的是 execve(启动)和 exit/exit_group(退出)这两个关键系统调用。
必须启用并确认 auditd 正在运行
规则再准,服务没跑也毫无作用:
- 运行
systemctl status auditd,确保状态是 active (running) - 执行
auditctl -s | grep enabled,输出应为 enabled 1 - 检查内核模块:
lsmod | grep audit应有audit和audit_watch输出
用系统调用规则捕获进程启动
仅用 -w /usr/bin/xxx -p x 只能知道谁执行了哪个文件,但看不到命令行参数、执行用户、实际调用路径。真正抓启动动作,必须用 -a always,exit -S execve:
- 对 x86_64 系统,必须指定架构:
-F arch=b64 - 加
-F euid=0可单独过滤 root 启动的进程 - 加
-F auid!=4294967295排除内核线程(auid 为全 1 表示无登录上下文) - 示例规则(写入
/etc/audit/rules.d/99-process.rules):-a always,exit -F arch=b64 -S execve -k process_start
捕获进程退出需区分场景
进程退出不像启动那样集中在一个系统调用上,常见方式有两种:
-
常规退出:监听
exit和exit_group系统调用(后者用于多线程进程)-a always,exit -F arch=b64 -S exit,exit_group -k process_exit -
被强制终止:监听
kill系统调用(注意:普通 kill 命令走的是信号机制,不触发此调用;只有直接调用sys_kill才会记录,如某些调试工具或恶意代码)
查日志时别只翻 audit.log
原始日志可读性差,推荐组合使用 ausearch 和 aureport:
- 查所有进程启动:
ausearch -m execve -i - 查某用户启动的进程:
ausearch -m execve -ui 1000 -i - 查带关键词的命令:
ausearch -m execve -c "bash" -i - 生成启动汇总报告:
aureport -m execve --summary


















