auditctl -w规则未记录日志,先确认三件事:auditd服务必须active(running),内核模块audit已加载,规则已用augenrules --load加载且路径真实存在、权限位-p wa正确、带-k标签。

auditctl -w 规则加了但日志没记录?先确认三件事
auditd 默认不工作,规则写了也不生效——这是新手最常卡住的地方。不是配置错了,是根本没跑起来。
- 运行
systemctl status auditd,必须看到active (running);如果显示inactive (dead),立刻执行sudo systemctl enable --now auditd - 检查内核模块是否加载:
lsmod | grep audit,无输出说明 audit 模块未启用(某些精简系统需手动modprobe audit) - 确认规则已真正加载:
sudo auditctl -l | grep your-key,如果没结果,说明augenrules --load没执行,或规则文件没放在/etc/audit/rules.d/下、后缀不是.rules
监控 /etc/passwd 这类关键文件,-p wa 是底线
只写 -w /etc/passwd 不够,它什么都不会捕获。权限位(-p)决定你能看到什么动作,而 wa 是敏感配置文件的最小安全组合。
-
-p w:捕获写入(如usermod、vi /etc/passwd保存) -
-p a:捕获属性变更(如chmod 600 /etc/passwd、chown root:root) -
-p r禁止滥用:读操作高频且无上下文,grep或cat一次就触发几十条,极易刷爆日志 -
-k passwd_change必须带:后续用ausearch -k passwd_change -i才能快速过滤,不加-k就等于没设标签
路径必须真实存在,/proc 和 /sys 下的规则会静默失败
auditd 在加载规则时,对虚拟文件系统路径直接拒绝,但不会报错——你只会发现日志空空如也。
- 运行
sudo auditctl -w /proc/sys/net/ipv4/ip_forward -p wa -k netctl,看似成功,实则规则压根没进内核 - 验证方法:
sudo auditctl -l输出里找不到该路径,或ausearch -k netctl永远无结果 - 真要审计网络参数变更,得换思路:监控修改它的命令(如
sysctl -w)、或监听配置文件(如/etc/sysctl.conf) - 所有监控路径请先
ls -l确认存在,且非tmpfs、devtmpfs类型
查不到 execve 日志?缺 -F arch=b64 是最大盲区
想看“谁执行了哪个命令”,只写 -S execve 会漏掉 90% 的调用——因为 64 位系统默认只捕获 32 位 syscall。
- 正确写法:
-a always,exit -F arch=b64 -S execve -F auid>=1000 -k cmd_exec -
-F arch=b64强制捕获 64 位系统调用;-F arch=b32用于兼容 32 位程序(如部分旧工具) -
-F auid>=1000排除系统服务(auid=4294967295 是 kernel thread),聚焦真实用户行为 - 验证:
sudo -u testuser bash -c 'echo hi',再ausearch -k cmd_exec -i | grep echo应能命中
ausearch 查到的字段(比如 auid、exe、cwd)才是定位真实操作者的依据;忽略这些字段,日志就只剩一堆时间戳和路径,起不到审计作用。


















