前置知识: 网络安全

AIDE 文件完整性检查

2 min入门

AIDE 文件完整性监控:基线库初始化、规则语法与排除配置、周期检查任务、入侵后取证比对

AIDE 安装与初始化

基本写法:安装 AIDE apt-get install aide

# 安装 AIDE 文件完整性检查工具
sudo apt-get install aide

基本写法:初始化 AIDE 数据库 aideinit

# 初始化 AIDE 数据库(生成基础快照)
sudo aideinit

基本写法:查看初始化输出 aideinit --output

# 指定输出文件路径初始化
sudo aideinit --output /var/lib/aide/aide.db.new

基本写法:手动生成数据库 aide --init

# 手动初始化 AIDE 数据库
sudo aide --init

基本写法:安装初始化数据库 cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 将新数据库设为当前基准数据库
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

AIDE 检查与比对

基本写法:执行完整性检查 aide --check

# 比对当前文件与基准数据库
sudo aide --check

基本写法:更新数据库(检查并更新) aide --update

# 检查文件变化并更新数据库
sudo aide --update

基本写法:检查并输出到文件 aide --check --report=file:<文件>

# 检查结果输出到文件
sudo aide --check --report=file:/tmp/aide-report.txt

基本写法:检查并输出为 HTML aide --check --report=html > <文件>

# 生成 HTML 格式检查报告
sudo aide --check > /tmp/aide-report.html

基本写法:详细检查输出 aide --check --verbose 5

# 显示详细检查信息
sudo aide --check --verbose 5

AIDE 配置文件

基本写法:查看配置文件 cat /etc/aide/aide.conf

# 查看 AIDE 配置文件
cat /etc/aide/aide.conf

基本写法:定义规则 <规则名> = <属性>

# 在配置文件中定义规则
# PERMS = p+i+n+u+g+acl
# LOG = p+i+n+u+g+S
# CONTENT = p+i+n+u+g+s+m+c+acl+selinux+sha512

基本写法:应用规则到路径 <路径> <规则>

# 为指定路径应用规则
# /etc PERMS
# /var/log LOG
# /bin CONTENT

基本写法:排除路径 !<路径>

# 排除不需要检查的目录
# !/var/log/.*
# !/tmp/.*
# !/proc/.*

基本写法:测试配置文件 aide --config-check

# 检查配置文件语法
sudo aide --config-check

AIDE 数据库管理

基本写法:查看数据库版本 aide --version

# 查看 AIDE 工具版本
aide --version

基本写法:备份数据库 cp /var/lib/aide/aide.db /var/lib/aide/aide.db.bak.$(date +%F)

# 备份基准数据库
sudo cp /var/lib/aide/aide.db /var/lib/aide/aide.db.bak.$(date +%F)

基本写法:压缩存储数据库 gzip /var/lib/aide/aide.db.new

# 压缩新数据库节省空间
sudo gzip /var/lib/aide/aide.db.new

基本写法:验证数据库完整性 sha256sum /var/lib/aide/aide.db

# 计算数据库哈希验证完整性
sha256sum /var/lib/aide/aide.db

基本写法:数据库归档 tar -czf aide-archive-$(date +%F).tar.gz /var/lib/aide/

# 归档数据库到安全位置
sudo tar -czf /backup/aide-archive-$(date +%F).tar.gz /var/lib/aide/

AIDE 报告分析

基本写法:查看变更摘要 grep -E "added|removed|changed" <报告文件>

# 提取变更摘要统计
grep -E "added|removed|changed" /tmp/aide-report.txt

基本写法:统计变更文件数 grep -c "changed:" <报告文件>

# 统计变更文件数量
grep -c "changed:" /tmp/aide-report.txt

基本写法:提取新增文件 grep "added:" <报告文件>

# 提取所有新增文件
grep "added:" /tmp/aide-report.txt

基本写法:提取删除文件 grep "removed:" <报告文件>

# 提取所有被删除文件
grep "removed:" /tmp/aide-report.txt

基本写法:提取权限变更 grep -E "perm|user|group" <报告文件>

# 查找权限与属主变更
grep -E "perm|user|group|acl" /tmp/aide-report.txt

AIDE 定时任务

基本写法:每日定时检查 crontab -e

# 添加每天凌晨 3 点执行检查的定时任务
# 0 3 * * * /usr/bin/aide --check --report=file:/var/log/aide/aide-$(date +\%F).log

基本写法:周报生成 crontab -e

# 每周一 4 点生成周报告
# 0 4 * * 1 /usr/bin/aide --check > /var/log/aide/weekly-$(date +\%F).html

基本写法:检查后邮件通知 crontab -e

# 检查完成后发送邮件
# 0 3 * * * /usr/bin/aide --check | mail -s "AIDE 报告 $(date)" admin@example.com

基本写法:检查异常退出处理 crontab -e

# 检查异常时发送告警邮件
# 0 3 * * * /usr/bin/aide --check --report=file:/tmp/aide.log || mail -s "AIDE 告警" admin@example.com < /tmp/aide.log

基本写法:定期更新数据库 crontab -e

# 每月 1 号更新数据库
# 0 3 1 * * /usr/bin/aide --update && cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

AIDE 规则定制

基本写法:自定义哈希算法 <规则名> = p+i+n+sha256+sha512

# 配置使用 SHA256 与 SHA512 哈希
# CONTENT_HASH = p+i+n+sha256+sha512

基本写法:启用 SELinux 属性检查 <规则名> = p+selinux

# 检查 SELinux 上下文变化
# SELINUX_RULE = p+i+n+selinux

基本写法:启用 ACL 检查 <规则名> = p+acl+xattrs

# 检查 ACL 与扩展属性
# ACL_RULE = p+i+n+acl+xattrs

基本写法:排除特定文件类型 !<路径>/*.tmp

# 排除临时文件
# !/var/log/.*.log
# !/tmp/.*
# !/var/tmp/.*

基本写法:针对不同目录设置不同规则 <路径> <规则>

# 关键目录严格检查,日志目录宽松检查
# /etc p+i+n+u+g+s+m+c+acl+selinux+sha512
# /bin p+i+n+u+g+s+m+c+sha512
# /var/log p+i+n+u+g

AIDE 与监控集成

基本写法:集成到 Nagios 监控 check_aide.sh

# Nagios 检查脚本
# #!/bin/bash
# RESULT=$(sudo aide --check 2>&1 | tail -1)
# if echo "$RESULT" | grep -q "All files match"; then
#     echo "OK - AIDE check passed"
#     exit 0
# else
#     echo "CRITICAL - AIDE detected changes"
#     exit 2
# fi

基本写法:集成到 Zabbix zabbix-agentd.conf

# Zabbix 自定义监控项
# UserParameter=aide.check,sudo /usr/bin/aide --check 2>&1 | grep -c "changed:"

基本写法:集成到 Prometheus aide_exporter.py

# 通过脚本暴露 AIDE 指标
# #!/usr/bin/env python3
# import subprocess
# result = subprocess.run(['sudo', 'aide', '--check'], capture_output=True, text=True)
# changed = result.stdout.count('changed:')
# print(f'aide_files_changed {changed}')

基本写法:与 SIEM 联动 rsyslog.conf

# 将 AIDE 日志转发到 SIEM
# if $programname == 'aide' then @@siem.example.com:514

AIDE 安全最佳实践

基本写法:数据库离线存储 scp /var/lib/aide/aide.db <安全主机>:<路径>

# 将数据库复制到离线主机存储
scp /var/lib/aide/aide.db admin@secure-host:/backup/aide.db

基本写法:只读介质存储 cp /var/lib/aide/aide.db /media/cdrom/

# 将数据库写入只读介质防止篡改
cp /var/lib/aide/aide.db /mnt/readonly/

基本写法:数字签名数据库 gpg --sign /var/lib/aide/aide.db

# 使用 GPG 对数据库签名
gpg --sign /var/lib/aide/aide.db

基本写法:验证数据库签名 gpg --verify /var/lib/aide/aide.db.gpg

# 验证数据库签名是否被篡改
gpg --verify /var/lib/aide/aide.db.gpg

基本写法:关键系统文件检查清单 cat /etc/aide/aide.conf | grep -E "^/" | head -20

# 查看当前监控的关键路径
grep -E "^/" /etc/aide/aide.conf | head -20