规则要写对地方、用对工具装载
RHEL 系的惯例是把审计规则拆成多个文件放在 /etc/audit/rules.d/ 下(按文件名顺序合并),再用 augenrules 合并生成 /etc/audit/audit.rules。直接编辑 audit.rules 会在下次执行 augenrules 时被覆盖,这是规则“改了却不见了”的最常见原因。两种装载方式(augenrules 与 auditd 直读 audit.rules)不要混用,否则规则来源不清、互相覆盖,排障时无法判断哪一份在生效。
基本信息
| 加固项 | 审计规则持久化与装载 |
|---|---|
| 适用平台 | Linux(RHEL 系为主,Debian 系机制略有不同) |
| 权限要求 | root |
| 达标判据 | 规则文件有来源管理,装载后 auditctl -l 条数与预期一致 |
| 关键命令 | augenrules --check、augenrules --load、auditctl -l |
典型使用场景
- 新建审计规则并按规范落地到 rules.d 目录
- 排查“重启后规则消失”的问题
- 版本升级或配置管理下发后确认规则仍完整
- 多个团队维护规则时按文件拆分避免互相覆盖
- 规则条数与预期不符时的核对与排障
目录与装载
目录与装载
ls -l /etc/audit/rules.d/ # 查看规则文件与命名顺序
augenrules --check # 是否有未合并的规则变化
augenrules --load # 合并并装载,失败时看输出auditctl -l | wc -l # 生效规则条数
grep -v '^#' /etc/audit/audit.rules | head -20 # 查看合并结果的前若干条
systemctl restart auditd 2>/dev/null || service auditd restart # 部分场景需重启服务规则文件写法示例
规则文件写法示例
# /etc/audit/rules.d/99-hardening.rules
-w /etc/sudoers -p wa -k sudoers_change
-w /etc/sudoers.d/ -p wa -k sudoers_change
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_cmd
-a always,exit -F arch=b64 -S init_module,finit_module -k modules
# 改完:augenrules --check && augenrules --load两种装载方式对比
| 方式 | 命令 | 适用与注意 |
|---|---|---|
| augenrules | augenrules --load | RHEL 系推荐,先合并 rules.d 再装载 |
| auditctl -R | auditctl -R 规则文件 | Debian 系常见;重启后需要重新装载或由启动脚本处理 |
| auditctl 临时加规则 | auditctl -w ... | 仅当前运行有效,重启丢失,不适合持久化 |
| 直改 audit.rules | 编辑后重启服务 | 会被 augenrules 覆盖,不推荐 |
| 规则条数核对 | auditctl -l | wc -l | 装载后必须复核的实际结果 |
规则文件如果以固化参数结尾(如 -e 2),之后 auditctl 无法再修改规则,调试期不要过早固化。上线前应先在测试机确认规则文件能被正确合并与装载,再在生产执行,否则一次失败的装载可能让整台机器处于“规则缺失”状态而不自知。
Debian 系通常没有 augenrules,常见做法是用 auditctl -R 装载规则文件,并在文档里写明该环境的装载方式与持久化处理。跨发行版统一管理时,应把“用什么方式装载规则”作为环境属性记录在案,避免照抄命令导致规则根本没生效。