推荐做法是保持auditd服务运行并重载规则:执行sudo augenrules --load,它会合并/etc/audit/rules.d/*.rules、生成/etc/audit/audit.rules,并用auditctl -r加载进内核;验证用sudo auditctl -l | grep -e "(command_exec|privilege_escalation)"。

直接重启 auditd 服务不是推荐做法,尤其在 CentOS 7 或 RHEL 7 等旧版本中,systemctl restart auditd 会清空所有已加载的规则,导致审计中断、新规则不生效,甚至日志丢失。
真正可靠、跨版本通用的方法是:保持服务运行,只重载规则。
✅ 正确步骤:用 augenrules --load 重载永久规则
-
确保规则已写入
/etc/audit/rules.d/目录下
文件名必须以.rules结尾(如99-admin.rules),内容为纯规则行,不能带auditctl命令前缀:-a always,exit -F arch=b64 -S execve -k command_exec -w /etc/sudoers -p wa -k privilege_escalation
-
执行重载命令
sudo augenrules --load
它会自动完成三件事:
- 合并
/etc/audit/rules.d/*.rules所有文件 - 生成
/etc/audit/audit.rules(供下次启动读取) - 调用
auditctl -R /etc/audit/audit.rules加载进内核
- 合并
-
验证规则是否生效
sudo auditctl -l | grep -E "(command_exec|privilege_escalation)"
若看到对应规则,说明已成功加载。
⚠️ 特别注意不同系统的差异
CentOS/RHEL 7:
systemctl restart auditd会清空规则 → 禁用。只能用augenrules --load或service auditd reload(等效于重载)。CentOS/RHEL 8+、Fedora、Ubuntu 20.04+:
systemctl restart auditd虽不会清空规则(因默认从/etc/audit/audit.rules重新加载),但仍存在短暂审计空白期 → 仍推荐用augenrules --load,更安全、无中断。-
Docker 容器或精简镜像:
先确认auditd已安装且内核模块可用:lsmod | grep audit rpm -q auditd # RHEL系 dpkg -l | grep auditd # Debian系
❌ 不推荐的做法(常见误区)
- 直接改完
.rules文件就以为生效了 → 必须手动augenrules --load - 用
auditctl -w加临时规则后重启服务 → 临时规则会被丢弃 - 监控
/proc、/sys下的路径 → auditd 拒绝加载,规则无效 - 忘记加
-F arch=b64就监控execve→ 64 位系统下几乎捕获不到命令参数
? 补充:如何快速确认新规则已起作用?
触发一次目标行为(例如 sudo ls 或修改 /etc/passwd),然后查日志:
sudo ausearch -k command_exec --start recent -i | head -5 sudo ausearch -k privilege_escalation --start recent -i
能看到 auid(原始用户)、uid(当前用户)、exe(执行路径)、comm(命令名)等字段,说明审计链路完整。











