auditd默认不审计任何文件,必须启用服务、加载内核模块、配置并重载持久化规则;三者缺一,/var/log/audit/audit.log即为空。

auditd 默认不审计任何文件,服务不运行、规则为空、内核模块未加载——三者缺一,/var/log/audit/audit.log 就是空的。必须手动启用服务、写入持久化规则、显式重载,才能捕获真实系统文件操作。
确认 auditd 服务已真正运行且内核支持就绪
很多“没日志”问题其实卡在这一步:服务看似启动了,但 audit 模块没启用或根本没加载。
-
systemctl status auditd必须显示 active (running);若为 inactive 或 failed,先执行sudo systemctl start auditd && sudo systemctl enable auditd -
auditctl -s | grep enabled输出中enabled=1才算内核审计开关打开;若为 0,检查/proc/cmdline是否含audit=0,需修改 grub 配置并重启 -
lsmod | grep audit应有输出;无输出说明内核未编译 audit 支持(极少见,但精简内核或容器镜像可能如此) -
sudo ls -l /etc/audit/rules.d/确认目录存在且可写;sudo ls -l /var/log/audit/audit.log确认日志路径可写
只监控关键路径,用 -w + -p wa + -k 组合写最小有效规则
泛监控会刷爆日志,也掩盖真正风险。特权文件审计的核心是「谁在非预期时间、以非预期身份改了什么」。
- 敏感文件只设
-p wa:覆盖写入(w)和属性变更(a,含chmod/chown/chattr),不加r(读操作高频且无上下文) - 所有关键路径共用同一
-k标签便于关联检索,例如:-w /etc/passwd -p wa -k identity和-w /etc/shadow -p wa -k identity - 路径必须真实存在且不能是虚拟文件系统:
/proc、/sys下的路径 auditd 直接拒绝加载 - 典型最小规则集(存入
/etc/audit/rules.d/99-privilege.rules):-w /etc/passwd -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/sudoers -p wa -k privilege_escalation -w /etc/sudoers.d/ -p wa -k privilege_escalation -w /etc/ssh/sshd_config -p wa -k sshd_config
规则必须进 /etc/audit/rules.d/ 并用 augenrules --load 显式加载
临时规则(auditctl -w)重启即丢;直接改 /etc/audit/audit.rules 会被 augenrules 覆盖;不重载 = 规则没进内核。
- 文件名必须以
.rules结尾,如99-privilege.rules;audit.conf或myaudit这类名字会被完全忽略 - 规则行不能带
auditctl命令前缀,只写原始规则,例如:-w /etc/passwd -p wa -k identity - 写完后必须执行:
sudo augenrules --load(它合并所有.rules文件,生成/etc/audit/audit.rules,再调用auditctl -R加载) - 验证是否生效:
sudo auditctl -l | grep identity能看到对应规则,才算真正起作用
查不到 execve 日志?大概率缺 -F arch=b64
想捕获谁执行了 sudo、su 或任意 setuid 程序,仅写 -S execve 不够——x86_64 系统必须指定架构,否则参数被截断或事件不触发。
- 正确写法(64 位系统):
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k privilege_escalation - 若系统混用 32/64 位程序,需补一条
-F arch=b32规则,或直接用-F arch=b64,b32(部分老版本不支持) - 不加
-F arch的后果:ausearch 查不到完整命令行参数,comm字段可能为空,exe字段不可靠 - 要捕获失败的提权尝试,规则中加
-F exit=-1,后续可用ausearch -m execve -F key=privilege_escalation -F exit=-1单独筛选
最易被忽略的是规则加载后不验证 auditctl -l 输出,以及误以为 systemctl restart auditd 能重载规则——它只会清空临时规则,永久规则必须靠 augenrules --load。另外,/etc/audit/auditd.conf 中的 max_log_file_action = ROTATE 必须设对,否则磁盘满时 auditd 会静默停止记录,而不是轮转日志。


















