auditd服务未启动则规则无效,需手动启用并设为开机自启;规则文件须以.rules结尾,修改后执行augenrules --load加载;监控execve需指定架构并加-k标签;日志轮转需确保目录及文件权限正确。

auditd服务没启动,加再多规则也没用
auditd默认不启用,装完包只是放了个二进制文件在磁盘上。执行systemctl status auditd看到inactive (dead),说明审计根本没跑——/var/log/audit/audit.log会一直为空或只有启动失败记录。
必须手动启用并设为开机自启:
sudo systemctl start auditdsudo systemctl enable auditd
怎么确认它到底有没有真正跑起来?先看sudo auditctl -s | grep enabled,正常情况下输出应该是enabled 1;再执行lsmod | grep audit,能看到对应的内核模块已经加载。还有个很容易忽略的点:CentOS 7并不支持systemctl restart auditd,一旦重启,所有临时规则都会被清空,这地方特别容易踩坑。
/etc/audit/rules.d/里的规则为什么没生效
规则文件放对位置只是第一步,auditd启动时只读取/etc/audit/rules.d/*.rules,但不会自动重载。改完文件后不执行加载命令,新规则就“躺在磁盘上吃灰”。
正确流程是:
- 确保文件名以
.rules结尾(如10-identity.rules,不能叫audit.conf) - 写入规则时去掉
auditctl前缀,例如直接写-w /etc/shadow -p wa -k identity - 执行
sudo augenrules --load(它会合并所有.rules文件,生成/etc/audit/audit.rules,再调用auditctl -R加载) - 用
sudo auditctl -l确认规则已出现在内存中
注意:augenrules不覆盖你手动写的/etc/audit/audit.rules,但它生成的版本才是实际生效的。
监控命令执行却只看到execve,看不到具体参数
audit默认只记录系统调用入口,不解析参数。比如rm -rf /tmp/*在日志里只会显示execve和内存地址,无法判断删了什么。
要看到完整命令行,必须:
- 显式指定架构:
-F arch=b64(64位系统)或-F arch=b32(兼容32位库) - 搭配
-S execve使用,不能只写-F path=/usr/bin/rm - 加上
-k标签,后续才能用ausearch -k command过滤
示例规则:
-a always,exit -F arch=b64 -S execve -k command -a always,exit -F arch=b32 -S execve -k command
性能代价明显:高频命令(如shell循环中的ls)会导致日志量爆炸,生产环境慎用全局execve监控。
日志轮转后audit.log消失或权限异常
auditd自带轮转(靠auditd.conf里的max_log_file和num_logs),但轮转后新日志可能权限不对,或被logrotate误删。
关键动作:
- 检查
/var/log/audit/目录权限:chmod 0700 /var/log/audit/(仅root可进入) - 检查
audit.log文件权限:chmod 0600 /var/log/audit/audit.log(仅root可读写) - 确认
/etc/logrotate.d/auditd存在且配置合理,包含compress、rotate 6、maxsize 50M - 测试轮转:
sudo logrotate -f /etc/logrotate.d/auditd,观察是否生成audit.log.1且权限正确
真正难处理的是日志存储路径变更或远程转发配置——一旦auditd.conf里log_file指向NFS或挂载点,而该路径不可写或延迟高,auditd会静默失败,连错误日志都不记。