Linux文件完整性检查-AIDE
在 Linux 系统中,最常用的文件完整性检查工具是 AIDE(Advanced Intrusion Detection Environment)。此外,你之前使用的 auditd 也可以实现对文件变更的实时监控,但两者侧重点不同:
AIDE:周期性(如每天)检查文件是否被修改,并生成报告。
auditd:实时记录对指定文件的操作(谁、何时、做了什么),但需要配置审计规则并定期分析日志。
以下分别介绍两种方式的配置方法。
文件完整性检查(File Integrity Monitoring, FIM)是安全监控的重要组成部分,它通过定期比对文件的当前状态与已知基准状态,来发现系统关键文件是否被意外或恶意修改。这对于检测入侵、配置错误以及合规性要求(如等保、PCI-DSS)至关重要。
在 Linux 系统中,最常用的文件完整性检查工具是 AIDE(Advanced Intrusion Detection Environment)。此外,你之前使用的 auditd 也可以实现对文件变更的实时监控,但两者侧重点不同:
- AIDE:周期性(如每天)检查文件是否被修改,并生成报告。
- auditd:实时记录对指定文件的操作(谁、何时、做了什么),但需要配置审计规则并定期分析日志。
以下分别介绍两种方式的配置方法。
一、使用 AIDE 进行周期性完整性检查
1. 安装 AIDE
# CentOS/RHEL
yum install aide -y
# Ubuntu/Debian
apt install aide -y
2. 初始化数据库
首次运行前,需要生成一个基准数据库,记录所有被监控文件的原始状态。
aide -i
该命令会在 /var/lib/aide/aide.db.new.gz 生成初始数据库。然后将其重命名为正式数据库:
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
3. 配置监控规则
AIDE 的配置文件为 /etc/aide.conf。你可以自定义需要监控哪些文件以及监控哪些属性(如权限、所有者、大小、哈希值等)。
常用规则示例:
# 监控 /etc 下的所有文件,但排除临时文件和日志
/etc p+i+n+u+g+s+sha512
!/etc/.*~
!/etc/.*\.log
!/etc/.*\.pid
# 监控关键二进制文件
/bin p+i+n+u+g+s+sha512
/sbin p+i+n+u+g+s+sha512
# 监控用户家目录(可选)
/root p+i+n+u+g+s+sha512
/home p+i+n+u+g+s+sha512
# 监控系统库文件
/usr/lib p+i+n+u+g+s+sha512
# 数据库位置
database=file:/var/lib/aide/aide.db.gz
database_out=file:/var/lib/aide/aide.db.new.gz
p:权限i:inoden:链接数u:用户g:组s:大小sha512:使用 SHA512 哈希校验内容
4. 执行检查
aide --check > /var/log/aide/check_$(date +%Y%m%d).log 2>&1
这样可以将标准输出和错误输出都保存到以日期命名的日志文件中。
也可以同时输出到终端和文件:
aide --check | tee /var/log/aide/last_check.log
对/etc/passwd做一点修改后,输出结果如下:
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2026-03-29 17:54:05
Summary:
Total number of files: 22577
Added files: 0
Removed files: 0
Changed files: 1
---------------------------------------------------
Changed files:
---------------------------------------------------
changed: /etc/passwd
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------
File: /etc/passwd
Size : 1378 , 1383
Inode : 16781641 , 16780667
SHA512 : roHzkJz8Ia1D3dP7EBPL42gv6lpY5t+v , cB1UH7FxobGHoNudHqups/240jCJ+jpK
You have new mail in /var/spool/mail/root
5. 定期自动执行
可以通过 crontab 每天运行检查,并将结果通过邮件发送给管理员。
# 编辑 root 的 crontab
crontab -e
# 添加以下行(每天凌晨 2 点执行)
0 2 * * * /usr/bin/aide --check > /var/log/aide/check_$(date +%Y%m%d).log 2>&1
6. 更新数据库
当系统进行了合法的变更(如软件更新、配置修改)后,需要更新基准数据库,避免误报。
aide --update
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
二、使用 auditd 实时监控关键文件变更
如果你需要实时记录是谁在何时修改了哪些关键文件,可以使用 auditd。你之前的 ausearch 查询已经展示了这一点。
1. 添加监控规则
例如,监控 /etc/passwd 和 /etc/shadow 的写入和属性变更:
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/shadow -p wa -k shadow_changes
-w:监控文件或目录-p:监控的权限(r=读,w=写,x=执行,a=属性变更)-k:自定义标签,便于搜索
2. 使规则永久生效
将规则写入 /etc/audit/rules.d/ 目录下的文件(如 key_files.rules):
echo "-w /etc/passwd -p wa -k passwd_changes" >> /etc/audit/rules.d/key_files.rules
echo "-w /etc/shadow -p wa -k shadow_changes" >> /etc/audit/rules.d/key_files.rules
然后重新加载规则:
augenrules --load
service auditd restart
3. 查看实时变更
使用 ausearch 查询特定标签的事件:
ausearch -k passwd_changes -i
或使用 aureport 生成摘要。
4. 注意事项
- auditd 会产生大量日志,需配置好日志轮转(在
/etc/audit/auditd.conf中设置max_log_file和max_log_file_action)。 - 仅监控关键文件,避免监控整个
/etc目录导致日志爆炸。
三、两种方式的对比与选择
| 特性 | AIDE | auditd |
|---|---|---|
| 检测方式 | 周期性比对(如每天) | 实时监控 |
| 记录内容 | 文件属性、哈希值变化 | 操作详情(谁、何时、什么操作) |
| 资源消耗 | 扫描时较高,平时无 | 持续占用少量资源,日志量可能大 |
| 适用场景 | 合规性检查、事后取证 | 实时入侵检测、操作审计 |
| 配置复杂度 | 较低 | 中等 |
建议:
- 对于合规性要求(如等保2.0),建议部署 AIDE 并每天执行检查。
- 对于关键系统文件(如
/etc/passwd、/etc/shadow、/etc/sudoers),可同时使用 auditd 实时监控,以便快速定位责任人。 - 结合两者可以达到更全面的文件完整性保护。
四、检查结果的解读与响应
AIDE 报告示例
Changed files:
/etc/passwd
/etc/shadow
一旦发现非预期的变更,应立即:
- 确认变更是否由合法管理员操作(可结合 auditd 日志查找谁修改了文件)。
- 如为恶意修改,立即启动应急响应,恢复文件并排查入侵途径。
- 如果变更是合法的,请更新 AIDE 数据库以避免下次误报。
auditd 日志分析
通过 ausearch -k passwd_changes -i 可以查看到谁、使用什么工具、何时修改了文件。这在应急响应中至关重要。
五、总结
配置文件完整性检查是保障系统安全的基础工作。你可以根据实际需求选择 AIDE 或 auditd,或者两者组合使用。记得将检查结果纳入日常监控,并定期更新基准库,确保检测的有效性。
如果你有特定的合规要求(如等保、PCI),还需要根据标准调整检查范围和频率。

浙公网安备 33010602011771号