aide数据库初始化需先清空旧配置并校验root权限,生成aide.db.new.gz后必须重命名为aide.db.gz并校验完整性,日常比对须依赖退出码判断结果,排除规则需按顺序正确书写且修改配置后必须重新--init。

初始化 AIDE 数据库前必须清空旧配置并校验权限
AIDE 第一次运行 aide --init 生成数据库时,若系统已存在 /var/lib/aide/aide.db.new.gz 或残留的 aide.conf 自定义规则,会导致后续比对完全失效。更关键的是,AIDE 要求数据库文件必须由 root 创建且不可被普通用户写入——否则 aide --check 会静默跳过校验或报 Unable to open database。
实操建议:
- 先执行
sudo rm -f /var/lib/aide/aide.db* /etc/aide.conf彻底清理 - 用
sudo cp /usr/share/doc/aide/examples/aide.conf.sample /etc/aide.conf获取干净模板 - 编辑
/etc/aide.conf时,确保所有监控路径(如/bin、/etc)前缀不带多余空格,且每行末尾无不可见字符 - 运行
sudo aide --init --force-init,成功后手动确认/var/lib/aide/aide.db.new.gz存在且大小 >1KB
把新数据库部署为生产基准必须重命名且校验完整性
aide --init 生成的不是最终数据库,而是 aide.db.new.gz ——AIDE 默认只读取 aide.db.gz。直接运行 aide --check 会提示 Database not found,而非报错告诉你该用哪个文件。
实操建议:
- 执行
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz - 立即校验:运行
sudo gzip -t /var/lib/aide/aide.db.gz,失败说明压缩损坏,需重新--init - 可选但推荐:用
sha256sum /var/lib/aide/aide.db.gz > /root/aide.db.sha256留存指纹,防止数据库本身被篡改
日常比对必须用 --check 且关注退出码而非仅看输出
AIDE 的输出里混着“有变更”和“无变更”两种情况,但都以文本形式打印,容易误判。真正可靠的信号是命令退出状态码:0 表示无变化,1 表示检测到变更,255 才是内部错误(如数据库损坏、权限不足)。
实操建议:
- 别只跑
aide --check然后扫屏幕,加&& echo "OK" || echo "ALERT"判断逻辑 - 若输出中出现
Added: xxx或Removed: xxx,说明文件增删——这比内容修改更可疑,优先排查是否被植入后门或清理日志 - 注意时间戳差异:AIDE 默认校验 mtime/ctime,若系统时间被恶意调乱,可能引发大量误报,比对前先用
timedatectl status确认时钟同步正常
忽略临时文件或日志需在 aide.conf 中用 ! 规则且位置敏感
很多人想排除 /var/log/ 下的滚动日志,但在 aide.conf 里写成 /var/log/.* p+i+n+u+g+s+b+acl+selinux+xattrs+sha256 是无效的——AIDE 不支持正则,只认 glob 和显式排除语法。更麻烦的是,排除规则必须放在对应监控规则之后,否则会被覆盖。
实操建议:
- 正确写法是先定义监控:
/var/log/ NORMAL,再写排除:!/var/log/*.log.*和!/var/log/messages - 排除目录要用
!xxx/结尾,排除文件用!xxx,漏掉斜杠会导致整个目录仍被扫描 - 修改
aide.conf后必须重新--init,旧数据库不会自动适配新规则
AIDE 的可靠性高度依赖初始数据库的纯净性与后续比对流程的机械性——任何手动编辑数据库、跳过校验步骤、或混淆 .new.gz 与正式库的行为,都会让整套机制失去意义。最常被忽略的是:没有定期重建基准库来适应合法的系统更新(比如内核升级后 /boot/vmlinuz* 必然变化),这时需要重新 --init 并人工确认变更合理性。











