应使用auditd实时监控/usr/bin写入与元数据变更,并结合离线MD5基线比对,实现“实时触发+事后确认”双保险;规则为-w /usr/bin/ -p wa -k usr_bin_write,基线推荐仅覆盖ls、cp、mv等高危命令。

要监控Linux系统关键二进制命令(如/usr/bin/下的ls、cp、ssh等)是否被篡改,不能依赖定期轮询MD5——攻击者可在两次检查间隙替换文件并抹除日志。必须用auditd捕获底层写入事件,再结合基线MD5做离线比对,形成“实时触发+事后确认”的双保险机制。
配置auditd实时捕获/usr/bin下所有写入与元数据变更
编辑规则文件:sudo nano /etc/audit/rules.d/usr-bin.rules
写入以下单行规则(注意末尾无空格):-w /usr/bin/ -p wa -k usr_bin_write
这条规则让auditd递归监控整个/usr/bin目录:-w表示路径监控,-p wa表示只记录write(覆盖写入)、attribute change(如chmod/chown,常被用于隐藏恶意行为),-k usr_bin_write是唯一键名,后续所有日志都带这个标签,方便过滤。
重载规则:sudo augenrules --load 或 sudo systemctl restart auditd。若提示“no rules found”,说明规则文件未被正确识别,请确认文件名以.rules结尾且权限为644。
生成当前/usr/bin关键命令的MD5基线清单
方法一:只针对明确列出的高危命令(推荐)
执行:md5sum /usr/bin/{ls,cp,mv,rm,cat,ps,netstat,ss,ssh,sudo} > /root/usr-bin-baseline.md5
方法二:批量抓取所有可执行文件(慎用,含大量低风险工具)
执行:find /usr/bin -type f -executable -exec md5sum {} \; > /root/usr-bin-all.md5
⚠️ 注意:此命令会包含大量系统更新频繁的工具(如gcc、python3),导致基线极易失效;仅在做全量快照审计时临时使用。
保存后立即校验清单完整性:md5sum /root/usr-bin-baseline.md5,把输出值手抄或存到离线设备——防止攻击者连基线文件一起篡改。
当auditd触发告警时,快速验证MD5是否真已变动
第一步:提取最近10分钟内所有匹配的写入事件
ausearch -k usr_bin_write -ts recent | aureport -f -i --key usr_bin_write
第二步:从日志中定位被操作的文件名(看aureport输出中的“name”字段),例如发现/usr/bin/ls被openat(write)调用
第三步:立即比对当前文件与基线MD5
md5sum /usr/bin/ls → 得到当前哈希值
grep "/usr/bin/ls" /root/usr-bin-baseline.md5 → 提取原始哈希值
两值不一致即确认内容已被篡改,无需等待定时任务扫描。
第四步:若需批量验证多个可疑文件,用脚本一次过:while read line; do file=$(echo "$line" | awk '{print $2}'); echo "$line"; md5sum "$file" 2>/dev/null || echo "$file: MISSING"; done


















