适用场景
Linux 文件完整性监控适用于以下场景:网站被植入 WebShell 或篡改页面后无法快速定位;服务器遭入侵后需要确认攻击者改动了哪些系统文件;安全基线合规要求对关键目录做定期校验(如等保 2.0 的审计与入侵防范要求)。本文从文件哈希比对原理出发,给出 AIDE 初始化基线、周期扫描与告警配置的完整方案。
前置条件
- 一台 Linux 服务器(本文以 CentOS 7+ / Ubuntu 22.04 为例)
- 具备 root 权限,能安装系统包
- 准备一个独立目录存放 AIDE 数据库(建议放到只读挂载或备份盘,防止与系统文件同时被篡改)
原理说明
AIDE(Advanced Intrusion Detection Environment)的核心原理是基线比对:首次运行时对配置指定目录中的文件计算哈希值(如 SHA256)、权限、属主、大小、mtime 等属性,生成一份数据库;之后每次扫描重新计算并与基线比对,任何新增、删除、修改都会被标记输出。攻击者植入 WebShell、替换二进制、改 /etc/passwd 等行为都会导致文件哈希或属性变化,从而被快速发现。由于数据库文件本身可能成为篡改目标,应将其存放到独立备份或写保护介质,并定期重新校准基线。
操作步骤
1. 安装 AIDE
# CentOS
sudo yum install -y aide
# Ubuntu
sudo apt update && sudo apt install -y aide
# 查看版本
sudo aide --version
2. 配置监控范围
# 编辑 /etc/aide.conf(CentOS)或 /etc/aide/aide.conf(Ubuntu)
# 在规则区定义监控属性
DATABASE_OUT=file:/var/lib/aide/aide.db.gz
DATABASE_IN=file:/var/lib/aide/aide.db.gz
# 自定义规则:SHA256 哈希 + 权限 + 属主 + 大小 + 链接
MYCHECK = p+i+n+u+g+s+m+c+SHA256
# 监控系统关键路径
/etc MYCHECK
/bin MYCHECK
/sbin MYCHECK
/usr/bin MYCHECK
/usr/sbin MYCHECK
/var/www MYCHECK # Web 站点目录,检测 WebShell 篡改
/boot MYCHECK
# 排除易变文件
!/var/www/html/cache
!/var/log/.*
关键参数:MYCHECK 中的 SHA256 表示用 SHA256 哈希比对内容,p+i+n+u+g+s+m+c 依次代表权限、inode、链接数、属主、属组、大小、mtime 与 ctime;! 前缀用于排除频繁变更的目录。
3. 初始化基线数据库
# 初始化(务必在系统处于"干净"状态时执行)
sudo aide --init
# 将生成的数据库重命名为标准名
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# 验证数据库已生成
ls -lh /var/lib/aide/aide.db.gz
4. 定期扫描并输出报告
# 手动扫描比对
sudo aide --check
# 输出新增/修改/删除文件清单,报告保存到文件
sudo aide --check > /tmp/aide_report_$(date +%F).txt 2>&1
# 扫描无异常时输出类似:
# AIDE found NO differences between database and filesystem. Looks okay!!
5. 配置定时任务与告警
# 每日 02:30 扫描,发现异常即发送邮件(需先安装 mailx)
30 2 * * * /usr/sbin/aide --check 2>&1 | grep -q "differences" && echo "AIDE: files changed!" | mail -s "AIDE Alert" admin@example.com
# 或输出到日志文件由监控系统采集
30 2 * * * /usr/sbin/aide --check >> /var/log/aide_check.log 2>&1
6. 确认变更后更新基线
# 升级软件或合法修改文件后,需重新生成基线避免误报
sudo aide --update
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
配置验证
# 1. 模拟篡改测试:修改一个受监控文件后扫描
echo "# test" >> /etc/motd
sudo aide --check | grep -i "changed" | head -3
# 应输出类似: /etc/motd ............ Changed
# 2. 恢复文件后再次扫描,应无差异
sudo mv /etc/motd.bak /etc/motd
sudo aide --check | tail -1
常见问题
Q1:为什么更新系统软件包后大量误报?
yum/apt 升级会重写二进制文件与配置文件,导致哈希变化,这是正常现象。正确流程是:升级前先记录变更、升级后用 aide --check 核对变更项均为本次更新涉及的包,确认无误后执行 aide --update 重建基线。
Q2:AIDE 数据库本身被篡改怎么办?
数据库文件是攻击者的重点目标。建议:将 aide.db.gz 保存到独立的备份盘或对象存储,并做只读挂载(如 mount -o ro);扫描前用 GPG 对数据库签名校验;与另一台服务器交叉保存校验和。若发现数据库被替换,立即进入应急响应流程并重新初始化基线。
总结
AIDE 通过哈希基线比对为 Linux 系统提供轻量、高效的文件完整性监控,能在 WebShell 植入、二进制替换等入侵行为发生后第一时间告警。部署要点:干净状态下初始化基线、合理配置排除规则减少误报、数据库异地存储防篡改、变更后及时更新基线。结合日志审计与入侵检测脚本,即可构建完整的服务器纵深防御体系。