应使用 aide 而非 md5sum 进行系统级完整性扫描,因 md5 易碰撞、不记录元数据、忽略文件增删;aide 需确保系统干净后初始化数据库,严格配置路径排除与权限,并通过返回值判断检查结果。

为什么不用 md5sum 做系统级完整性扫描
因为 md5sum 无法防篡改:MD5 碰撞漏洞已被实操利用,攻击者能构造内容不同但哈希值相同的文件;它只校验内容,不记录权限、属主、大小、inode、SELinux 上下文等元数据;且默认不处理文件增删——aide 才是专为入侵检测设计的工具。
初始化 AIDE 数据库前必须确认三件事
数据库干净才有意义,否则比对全是噪音:
- 确保系统刚重装或已人工确认无异常进程、无可疑文件、无未授权服务
-
aide --init后生成的是/var/lib/aide/aide.db.new.gz,必须手动重命名为/var/lib/aide/aide.db.gz,否则aide --check直接报 “database not found” - 设严格权限:
sudo chmod 600 /var/lib/aide/aide.db.gz,防止被覆盖或读取
配置 /etc/aide.conf 容易踩的坑
默认规则太宽泛,一跑就满屏误报:
- 别无脑写
/etc p+i+n+u+g+s+sha256——/etc/resolv.conf、/etc/mtab这类动态文件会频繁变更,得显式排除:!/etc/resolv.conf、!/etc/mtab - 路径排除要精确:
!/var/log/.*不生效,得写成!/var/log/**(需开启 glob 支持)或逐条列明!/var/log/syslog、!/var/log/auth.log - 数据库路径必须一字不差:
database=file:/var/lib/aide/aide.db.gz,大小写、.gz后缀、斜杠方向都不能错 - 测试配置语法:
aide --config-check,无输出才是通过
定时任务里必须判断退出码,不能只看日志有没有 “OK”
aide --check 的返回值才是真实信号:
- 返回
0:无变更,正常 - 返回
1:发现变更(Added/Removed/Changed),需人工核查是否合理 - 返回
2:执行失败(如权限不足、数据库损坏、路径不存在) - crontab 示例(每天 2:30 执行):
30 2 * * * /usr/bin/aide --check --config=/etc/aide.conf > /var/log/aide/$(date +\%Y\%m\%d).log 2>&1 || echo "AIDE failed with exit code $?" | mail -s "AIDE CRON ERROR $(hostname)" admin@example.com
真正危险的不是 Changed,而是 Added 或 Removed —— 它们往往意味着后门植入或关键命令被删,响应优先级高于内容修改。











