适用场景
服务器被植入后门后,攻击者通常会修改系统二进制、替换 sshd 配置或往 cron 目录塞持久化脚本。仅靠日志很难发现这类「静默篡改」,因为合法命令可能继续正常工作。AIDE(Advanced Intrusion Detection Environment)通过对关键目录生成加密哈希基线,在后续扫描中比对出新增、删除、修改的文件,是 Linux 主机上成本最低、最直接的文件完整性监控方案。本文适用于需要满足等保合规、或希望在无商业 HIDS 预算前提下建立篡改检测能力的运维团队。
前置条件
- Debian/Ubuntu 或 RHEL/CentOS 系列主机,具备 root 权限
- 磁盘剩余空间足够存放基线数据库(视监控范围,通常在 20MB 至数百 MB)
- 服务器已完成初始安全加固,基线必须在确认系统干净的状态下生成,否则会把后门一起写进基线
- 已配置可用的邮件发送能力(如 postfix 或已装 mailx),用于告警投递
原理说明
AIDE 的工作模型分三步:读取配置文件中的规则集 → 遍历目标文件计算属性摘要 → 与基线数据库比对并输出差异报告。
- 数据库:默认基线为
/var/lib/aide/aide.db.gz,新生成的库为aide.db.new.gz,需手动替换后才生效 - 规则集:配置文件由「选择行」与「宏定义」组成。选择行形如
/etc Full,后者决定记录哪些属性 - 属性宏:常用为 p(权限)、i(inode)、n(链接数)、u/g(属主/属组)、s(大小)、m(mtime)、a(atime)、c(ctime)、S(SHA512 摘要)、md5、sha256。生产环境推荐使用 R(只读文件的完整校验)与 L(日志增长类文件的宽松校验)两个内置宏
操作步骤
1. 安装 AIDE
# Debian / Ubuntu
sudo apt update && sudo apt install -y aide aide-common
# RHEL / CentOS / Rocky
sudo yum install -y aide
2. 配置监控范围
编辑 /etc/aide/aide.conf(RHEL 系列为 /etc/aide.conf),在文件末尾追加自定义规则。核心思路是「关键配置用严格校验,变动频繁的目录排除或放宽」。
# 自定义规则集 —— /etc/aide/aide.conf
# 严格校验:任一属性变化都告警
StrictChecks = p+i+n+u+g+s+m+c+sha256+sha512
# 宽松校验:用于日志、缓存类文件
LooseChecks = p+u+g+n+sha256
# —— 严格监控:系统与安全配置 ——
/etc StrictChecks
/boot StrictChecks
/bin StrictChecks
/sbin StrictChecks
/usr/bin StrictChecks
/usr/sbin StrictChecks
/usr/lib/systemd StrictChecks
/root StrictChecks
/etc/ssh StrictChecks
# —— 宽松监控:变动频繁但需感知 ——
/var/spool/cron LooseChecks
/etc/cron.d LooseChecks
# —— 明确排除:避免误报与性能损耗 ——
!/var/log
!/var/cache
!/var/tmp
!/tmp
!/proc
!/sys
!/dev
!/run
!/var/lib/aide
!/var/lib/docker
注意:行首 ! 表示排除,排除规则必须写在包含规则之后。若监控 Docker 宿主机的 /var/lib/docker,扫描耗时会显著增加,建议单独排除后对其上层配置目录单独监控。
3. 生成初始基线数据库
# 初始化(耗时取决于文件数量,可能数分钟)
sudo aide --init
# 检查生成结果
sudo ls -lh /var/lib/aide/
# 确认无误后替换为正式基线
sudo cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
Debian 系列可用封装命令一次完成:sudo aideinit,随后 sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db。
基线文件本身必须保护,建议设置不可变属性并单独备份到离线位置:
sudo chattr +i /var/lib/aide/aide.db.gz
sudo cp /var/lib/aide/aide.db.gz /backup/aide/
4. 执行完整性检查
sudo aide --check
无异常时输出类似:
AIDE found no differences between database and filesystem. Looks okay!!
存在变更时输出详尽的差异段,例如:
File: /etc/ssh/sshd_config
Size : 3042 , 3080
Mtime : 2026-09-01 08:12:03 , 2026-09-11 03:40:11
SHA256 : 3f2a...c91d , 8b7e...04af
Added files:
f++++++++++++++++: /usr/local/bin/kworker
解读方式:Size / Mtime / SHA256 不一致表示文件被修改;Added files 段中带 +++ 的是新增文件,需重点核查,尤其出现在 /bin、/usr/bin、/etc/cron* 或隐藏在 /usr/local/bin 下的可执行文件。
5. 误报确认后更新基线
对于确认合法的变更(如正常的系统更新、配置调整),需重建基线,否则每次检查都会重复告警。
# 生成新库
sudo aide --update
# 替换旧基线
sudo chattr -i /var/lib/aide/aide.db.gz
sudo cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
sudo chattr +i /var/lib/aide/aide.db.gz
6. 配置定时扫描与告警
# /etc/cron.d/aide-check —— 每日 03:20 扫描并发邮件
20 3 * * * root /usr/bin/aide --check 2>&1 | mail -s "[AIDE] $(hostname) integrity report" ops@example.com
若未安装 mail 命令,可写入本地文件由日志采集系统(如 rsyslog、Wazuh)统一收走:
20 3 * * * root /usr/bin/aide --check >> /var/log/aide/report.log 2>&1
# 追加规则避免自监控循环
# !/var/log/aide
配置验证
确认配置语法与数据库可读:
sudo aide --config-check
sudo ls -lh /var/lib/aide/aide.db.gz
做一次主动篡改测试,验证告警确实触发:
# 制造变更
sudo touch /etc/aide_test_marker
# 执行检查
sudo aide --check | grep -A2 "aide_test_marker"
# 预期输出 Added files 段中包含该文件
# 清理
sudo rm -f /etc/aide_test_marker
检查扫描耗时,评估是否影响业务:
sudo time aide --check
若单次扫描超过数分钟且消耗大量 IO,应缩小监控范围或改用 –limit 参数分批检查(AIDE 0.17 以上支持)。
常见问题
FAQ 1:每次检查都告警一大片,是不是基线坏了?
大概率是「合法变更未同步基线」或「未排除高频变动目录」。排查步骤:
- 先看告警集中在哪个目录。若集中在
/var/log、/var/cache、/var/lib/docker,说明排除规则未生效,检查 ! 前缀规则是否写在包含规则之后 - 若集中在
/etc下的若干配置文件,说明近期做过系统更新或手工调整,确认内容无异常后执行aide --update重建基线 - 若出现大量
Added files且文件名随机(如.tmp_XXXX),需按入侵事件处置,优先检查 cron、systemd service 与 SSH 授权文件
建议把「基线更新」纳入变更流程:任何配置变更完成后,由变更执行人同步更新基线并记录原因。
FAQ 2:AIDE 与 Tripwire、Wazuh 这类方案怎么选?
三者定位不同,可按规模与预算取舍:
- AIDE:单机、纯本地、无守护进程,部署成本最低,适合中小规模服务器与合规基线检查。不提供集中管理,需自行解决日志汇聚
- Tripwire:商用版本提供集中策略管理与合规报表,开源版能力与 AIDE 接近但配置更复杂
- Wazuh / OSSEC:属于 HIDS,除文件完整性外还提供日志分析、rootcheck、实时监控与集中控制台,适合主机数量多、需要统一告警的场景,但部署与调优成本明显更高
实践建议:主机数量在 20 台以内可先用 AIDE + 日志汇聚,出现「需要实时检测而非每日扫描」的需求时,再逐步引入 HIDS。
FAQ 3:基线数据库能放在被监控的机器上吗?会不会被攻击者一起改掉?
可以存储,但不能只存一处。攻击者取得 root 后完全有能力重算哈希并覆盖本地基线。正确做法是三点结合:
- 基线文件设置 chattr +i 不可变属性,提高直接篡改门槛
- 每日把基线副本与检查报告推送到远端日志服务器或对象存储,形成外部可信副本
- 关键服务器可把基线放在只读介质或单独的管理网共享目录,扫描时从远端读取
总结
AIDE 的价值在于把「凭经验猜有没有被改」变成「有哈希证据可比对」。落地要点有四:基线必须在系统干净时生成,否则后门会被一并纳入;规则要分级,系统二进制与安全配置用严格校验,日志缓存类目录排除或放宽;基线要保护,chattr 加不可变属性并保存外部副本;变更要同步,把基线更新纳入配置变更流程,避免告警疲劳掩盖真实入侵。完成部署后,AIDE 可与日志审计、WebShell 查杀形成互补,覆盖「文件被改」这一日志难以察觉的盲区。