应基于auditd构建轻量可靠的配置文件变更监控体系:精准监控关键路径,用auditctl配置持久化规则,结合ausearch/aureport结构化日志,脚本自动告警+备份,并可选osquery实现跨主机统一审计。
要自动化监控关键系统配置文件的变更,核心不是装一堆工具,而是让审计机制“主动感知、精准记录、即时反馈”。重点落在 Linux 内置的 auditd 框架上——它轻量、可靠、内核级,且无需额外授权或商业许可。
明确监控目标,避免日志泛滥
先锁定真正关键的文件,例如:
/etc/passwd、/etc/shadow(身份认证命脉) /etc/sudoers、/etc/ssh/sshd_config(权限与远程访问控制) /etc/sysctl.conf、/etc/crontab(系统策略与定时任务)/etc/,否则日志量会迅速填满磁盘,也掩盖真实风险。用 auditctl 配置持久化监控规则
每条规则需指定路径、操作类型(读/写/属性变更)、唯一关键字(便于后续检索):
auditctl -w /etc/passwd -p wa -k cfg_passwd auditctl -w /etc/sudoers -p wa -k cfg_sudo auditctl -w /etc/ssh/sshd_config -p wa -k cfg_ssh
⚠️ 注意:-p wa 表示监控“写入”和“属性修改”,不包含读操作(避免冗余);-k 后的标签必须语义清晰,方便 ausearch 快速过滤。
规则生效后,务必写入持久配置文件:
echo '-w /etc/passwd -p wa -k cfg_passwd' >> /etc/audit/rules.d/cfg-monitor.rules
重启 auditd 或执行 augenrules --load 使其永久生效。
自动捕获变更详情并结构化输出
auditd 默认日志在 /var/log/audit/audit.log,但直接读取原始日志效率低。推荐组合使用:
ausearch -k cfg_passwd --start recent --raw | aureport -f -i:快速提取最近关于 /etc/passwd 的所有操作 auid(登录用户ID)、exe(执行程序路径)、path(被操作文件)、comm(命令名)和 success 字段 联动告警与基础溯源
仅记录不够,要让变更“发声”:
ausearch 扫描新增的 -k cfg_* 事件 success=yes 的写操作,立即触发告警,并附带:谁(auid 对应用户名)、何时(时间戳)、用什么改的(comm 和 exe)、改了哪行(可配合 diff 对比备份快照) rsync 将当前 /etc/ 下被监控文件备份到 /backup/etc/$(hostname)-$(date +%s),确保每次变更都有可回滚副本补充 osquery 做跨主机统一视图(可选但推荐)
若管理多台服务器,可在每台部署 osquery,配置 file_events 表监听相同路径:
{ "file_paths": { "critical_cfg": ["/etc/passwd", "/etc/sudoers", "/etc/ssh/sshd_config"] }}
所有节点的日志统一接入 osquery fleet 管理后台,一条 SQL 即可查全网变更:
SELECT host_identifier, path, action, time FROM file_events WHERE path IN ('/etc/passwd','/etc/sudoers') ORDER BY time DESC LIMIT 20;
不复杂但容易忽略