必须用 auditctl -w 绑定真实 inode 路径并配 -p wa 和 -k 标签,写入 /etc/audit/rules.d/ 后执行 augenrules --load;auditd 必须 active (running),内核 audit 模块已加载且 enabled 1,路径须存在、无空格、非软链接,-p 仅限 wa,-k 标签必设以便 ausearch 查日志。

必须用 auditctl -w 绑定真实 inode 路径,配 -p wa 和 -k 标签,再写进 /etc/audit/rules.d/ 并执行 augenrules --load——漏掉任一环节,监控就形同虚设。
确认 auditd 服务已真正运行且内核审计启用
没跑起来的 auditd 加再多规则也捕获不到事件:
- 运行
systemctl status auditd,输出必须含 active (running) - 执行
auditctl -s | grep enabled,必须看到enabled 1,否则内核审计开关是关的 -
lsmod | grep audit应有输出,说明audit内核模块已加载 - 若未安装:RHEL/CentOS 用
yum install audit,Ubuntu/Debian 用apt install auditd,装完立即systemctl enable --now auditd
用 ls -i 确认绝密文件的真实 inode 路径
auditd 基于 inode 监控,不解析软链接。写错路径等于没监控:
- 执行
ls -i /path/to/secret.conf,拿到实际 inode 对应的路径(比如输出是123456 /etc/myapp/secret.conf) - 规则里必须写这个真实路径,不能写软链接名(如
/etc/secret.conf指向/opt/secrets/real.conf,就得监控后者) - 路径必须存在且可读,
stat /path/to/secret.conf可二次验证 - 路径中不能含空格或换行;若真有,
auditctl -w会静默失败,必须改用永久规则文件 +augenrules
加 -p wa 而不是 -p rwa 或只加 -p w
绝密文件的关键风险是内容被篡改或权限被隐藏,不是被读:
-
-p w捕获write、openat(O_WRONLY)、truncate等真实写入动作 -
-p a必须加:攻击者常先chmod 600或chown root:root隐藏文件再写入,漏掉a就错过前置行为 -
-p r绝对禁用:像getpwent()这类库调用会高频读取配置,加r会导致日志爆炸,真正篡改被淹没 - 完整规则示例:
sudo auditctl -w /etc/myapp/secret.conf -p wa -k secret_conf_mod
永久生效必须走 /etc/audit/rules.d/ + augenrules --load
临时规则在 systemctl restart auditd 或重启后全丢,生产环境绝不允许:
- 新建文件:
sudo tee /etc/audit/rules.d/20-secret.rules <br><code>-w /etc/myapp/secret.conf -p wa -k secret_conf_modEOF - 文件名必须以
.rules结尾,每行一条规则,开头不能有空格 - 切勿直接编辑
/etc/audit/audit.rules——该文件由augenrules自动生成,手动改会被覆盖 - 执行
sudo augenrules --load(RHEL/CentOS)或sudo systemctl restart auditd(Debian/Ubuntu) - 验证:
sudo auditctl -l | grep secret_conf_mod能看到即生效
最易忽略的是 -k 标签命名和日志查法:不用 ausearch -k secret_conf_mod -i 查,就等于没开监控——原始日志全是数字 ID,comm="(unknown)" 时得靠 exe 和 ppid 往上追,没 -k 连这一步都找不到入口。











