结论:禁用md5sum做系统完整性检查,优先用aide;单文件或传输校验选sha256sum。因md5存在碰撞漏洞、仅防意外损坏不防篡改,且128位哈希抗碰撞性远低于sha256的256位。

直接说结论:不要用 md5sum 做系统级完整性检查,优先选 aide;若只查单个文件或做传输校验,sha256sum 比 md5sum 更可靠。
为什么 md5sum 不适合监控系统文件
MD5 已被证实存在碰撞漏洞,攻击者可构造不同内容但相同 MD5 值的文件。系统关键文件(如 /bin/ls、/usr/bin/sudo)一旦被恶意替换,仅靠 md5sum 很难发现——它不防篡改,只防意外损坏。
-
md5sum输出是 128 位哈希,sha256sum是 256 位,抗碰撞能力高两个数量级 -
rpm -Va只覆盖 RPM 包管理的文件,漏掉手动安装、配置文件、用户脚本等 - 纯 shell 脚本 +
md5sum方案无法处理文件增删、权限变更、硬链接数变化等元数据异常
aide 初始化和规则配置的关键点
aide 是专为 Linux 文件完整性设计的工具,能同时监控内容、权限、所有者、ACL、xattrs、甚至 SELinux 上下文。但默认配置太宽泛,必须手动精简。
- 首次运行前务必执行
aide -i,生成的/var/lib/aide/aide.db.new.gz必须手动重命名为/var/lib/aide/aide.db.gz,否则后续--check会报 “database not found” -
/etc/aide.conf中不要无脑写/etc p+i+n+u+g+s+sha512:像/etc/resolv.conf、/etc/mtab这类动态文件会频繁变更,应显式排除,否则每次检查都报“changed” - 规则末尾的
!表示排除,但路径需完整匹配,例如!/etc/.*\.log不会匹配/etc/nginx/access.log,得写成!/etc/**.log(需启用 glob 支持)或逐条列明 - 数据库路径必须与配置中
database=file:/var/lib/aide/aide.db.gz严格一致,大小写、.gz 后缀、路径斜杠都不能错
日常检查命令和日志处理陷阱
定期执行 aide --check 是基础,但输出直接刷屏容易忽略关键变更。实际运维中必须绑定日志和退出码逻辑。
- 命令要重定向全部输出:
aide --check > /var/log/aide/$(date +\%Y\%m\%d).log 2>&1,否则 stderr(如权限拒绝、文件不存在)不会进日志 -
aide --check成功时返回 0,有变更时返回 1,出错(如数据库损坏)返回 2——写 cron 任务时必须判断$?,不能只看日志有没有“OK” - 日志里出现
added或removed行,比changed更危险:说明有人新增了后门二进制或删掉了审计日志,需立即响应 - 别把
aide.db.gz和日志放在同一分区:若根分区满,aide -i会失败,且检查日志也写不进去
什么时候该用 cksum 或 sha256sum
这些是轻量级校验工具,适用场景明确:传输校验、单次比对、嵌入脚本。它们不维护状态,也不管文件是否被删。
-
cksum用 CRC32,速度快但不可信,只适合内网大文件快速过筛(比如确认 ISO 是否下载完整),绝不能用于安全敏感场景 - 生成校验文件时,用
sha256sum /bin/* /sbin/* > system-bin.sha256,再校验时用sha256sum -c system-bin.sha256,注意-c模式下若某文件缺失,会输出 “No such file” 并返回非零退出码 - 如果校验文件本身可能被篡改,必须把它存到只读介质或远程服务器——本地硬盘上的
.sha256文件和原始文件放一起,等于没校验
真正难的不是选哪个命令,而是决定监控哪些文件、如何应对告警、以及数据库更新的时机。比如内核升级后,/boot/vmlinuz* 必然变更,这时要先 aide -i 更新基准库,再跑检查,顺序错了就会误报。










