Debian 配置 AIDE 文件完整性检测:基线初始化、变更检查与数据库更新
1. 服务介绍
AIDE(Advanced Intrusion Detection Environment)是主机文件完整性检测工具。它会为指定文件和目录建立基线数据库,记录权限、属主、大小、时间戳、inode 和哈希值;后续扫描时把当前文件系统与基线比较,报告新增、删除和修改内容。
AIDE 适合监控 Web 目录、系统配置、程序文件和安全关键目录。它不能阻止文件被修改,也不能替代杀毒软件或实时入侵防御;主要用途是发现未经授权的变化,并为排查和审计提供证据。
2. 准备运行环境
• 操作系统:Debian 10/11 或同类 Debian 系统。
• 操作账号:root 或具备 sudo 权限的管理员。
• 软件源:APT 仓库可用。
• 演示目录:/webdata。
• AIDE 数据目录:/var/lib/aide。
开始前确认环境:
bash
cat /etc/os-release
id
df -hT /
apt-cache policy aide
生产环境应在系统确认可信、补丁和业务软件安装完成后建立首次基线。
3. 相关知识与注意事项
3.1 AIDE 工作流程
-
配置监控路径和属性规则。
-
扫描可信文件系统,生成初始数据库。
-
把新数据库启用为正式基线。
-
文件发生变化后执行检查。
-
管理员确认变化是否合法,再决定是否更新基线。
3.2 常用属性
| 属性 | 含义 |
|---|---|
| p | 权限模式 |
| i | inode |
| n | 硬链接数量 |
| u | UID |
| g | GID |
| s | 文件大小 |
| m | mtime,内容修改时间 |
| c | ctime,元数据修改时间 |
| md5、sha256 | 文件内容哈希 |
哈希适合普通文件;目录主要检查权限、属主、时间戳和条目变化。规则越多,扫描越慢,动态目录也越容易产生噪声。
3.3 安全注意事项
• AIDE 数据库代表可信基线,必须限制为 root 可读写。
• 首次基线若在系统已被入侵后生成,会把恶意文件当成正常状态。
• 更新基线前必须人工审查报告,不能发现变化后直接覆盖数据库。
• 建议把基线副本和检查报告保存到只读介质或其他主机,避免攻击者同时篡改文件和数据库。
• 缓存、日志、会话、临时文件等高频变化目录应按需求排除或降低检查属性。
4. 实验步骤
4.1 安装 AIDE 并准备目录
bash
apt update
apt install -y aide
mkdir -p /webdata
install -d -m 0700 -o root -g root /var/lib/aide
cp -a /etc/aide/aide.conf /etc/aide/aide.conf.bak
查看版本和实际配置位置:
bash
aide --version
dpkg -L aide | grep -E 'aide.conf|systemd|cron'
4.2 配置数据库和监控规则
编辑 /etc/aide/aide.conf。不同 Debian 版本可能通过 /etc/aide/aide.conf.d/ 生成最终配置;应以本机软件包结构为准。
bash
vi /etc/aide/aide.conf
最小实验配置示例:
text
database=file:/var/lib/aide/aide.db
database_out=file:/var/lib/aide/aide.db.new
database_new=file:/var/lib/aide/aide.db.new
gzip_dbout=yes
WebData = p+i+n+u+g+s+m+c+sha256
/webdata WebData

截图中的规则使用 Change 名称并组合权限、属主、大小、时间和哈希属性。配置文件中的规则名可以自定义,但引用名称必须一致。
检查配置能否解析:
bash
aide --config-check --config=/etc/aide/aide.conf
若当前版本不支持 --config-check,可用初始化命令验证配置,失败时根据报错行修正。
4.3 初始化基线数据库
bash
aide --config=/etc/aide/aide.conf --init

初始化完成后确认新数据库存在,再启用为正式基线:
bash
ls -lh /var/lib/aide/aide.db*
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
chown root:root /var/lib/aide/aide.db
chmod 0600 /var/lib/aide/aide.db

> 部分 Debian 软件包默认生成压缩数据库 aide.db.new.gz。遇到该文件时,应按配置中的 gzip_dbout 和软件包脚本使用对应 .gz 文件,不要盲目改名为未压缩数据库。
4.4 制造文件变化
先确认基线检查无异常,再创建文件并修改目录属性:
bash
aide --config=/etc/aide/aide.conf --check
touch /webdata/hhhhh
echo 'aide test' > /webdata/demo.txt
chmod 0750 /webdata

4.5 执行完整性检查
bash
aide --config=/etc/aide/aide.conf --check | tee /root/aide-check.txt

旧实验把输出重定向到 que 文件后再查看:
bash
less /root/aide-check.txt

报告应显示新增文件、目录属性变化和属性明细。


4.6 审核后更新基线
只有确认本次变化合法时才更新:
bash
aide --config=/etc/aide/aide.conf --update
ls -lh /var/lib/aide/aide.db*
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
chmod 0600 /var/lib/aide/aide.db
aide --config=/etc/aide/aide.conf --check
最后一次检查应不再报告已接受的变化。若生成的是 .gz 数据库,使用对应 .db.new.gz 和 .db.gz 文件名。
5. 验证结果
5.1 配置与数据库检查
bash
grep -Ev '^\s*(#|$)' /etc/aide/aide.conf
ls -l /var/lib/aide/aide.db*
stat /var/lib/aide/aide.db
aide --version
5.2 变更检测检查
bash
aide --config=/etc/aide/aide.conf --check
grep -E 'Added entries|Removed entries|Changed entries|/webdata' /root/aide-check.txt
配置成功应满足:数据库文件存在且仅 root 可写;未修改时检查无差异;创建、删除或修改 /webdata 内容后,报告能准确显示对应路径和变化属性。
5.3 定时任务检查
bash
systemctl list-timers --all | grep -i aide
systemctl status dailyaidecheck.timer --no-pager
grep -R "aide" /etc/cron.daily /etc/cron.d 2>/dev/null
Debian 版本不同,可能使用 systemd timer 或 cron。以软件包实际安装文件为准,不要重复配置两个每日任务。
6. 常见问题与排错
6.1 提示数据库不存在
bash
grep '^database' /etc/aide/aide.conf
ls -lah /var/lib/aide
确认初始化已完成,并检查配置期待 .db 还是 .db.gz。
6.2 检查结果噪声过多
动态目录不适合使用完整哈希规则。先确认业务特征,再在规则中排除缓存、临时文件或频繁变化的日志;不要为了消除告警直接排除整个关键目录。
6.3 初始化或检查速度慢
bash
du -sh /webdata
find /webdata -xdev -type f | wc -l
time aide --config=/etc/aide/aide.conf --check
减少不必要的监控路径,避免跨入大型挂载点;哈希计算量与文件数量和总容量直接相关。
6.4 回退实验
bash
rm -f /webdata/hhhhh /webdata/demo.txt
chmod 0755 /webdata
cp -a /etc/aide/aide.conf.bak /etc/aide/aide.conf
保留旧基线和报告用于审计。不要在未确认变化来源时删除数据库或覆盖基线。