aide 命令 #
aide
(Advanced Intrusion Detection Environment,高级入侵检测环境)是一个文件和目录完整性检查器,用于监控系统文件的变化。它通过创建文件系统的数据库快照,然后定期比较当前文件系统状态与数据库中的基准,来检测未授权的更改。
语法 #
aide [选项]
常用选项 #
选项 | 描述 |
---|---|
--config=配置文件 |
指定配置文件(默认为/etc/aide/aide.conf) |
--before=数据库 |
指定比较的旧数据库 |
--after=数据库 |
指定比较的新数据库 |
-i, --init |
初始化数据库 |
-C, --check |
检查数据库与文件系统的差异 |
-u, --update |
检查并更新数据库 |
-E, --compare |
比较两个数据库 |
-D, --config-check |
检查配置文件语法 |
-v, --verbose |
详细输出 |
-V, --version |
显示版本信息 |
-h, --help |
显示帮助信息 |
常见用法 #
1. 初始化数据库 #
aide --init
这将创建一个新的数据库,通常位于/var/lib/aide/aide.db.new
。
2. 检查文件系统变化 #
aide --check
这将比较当前文件系统与数据库,并报告任何差异。
3. 更新数据库 #
aide --update
这将检查变化并创建一个新的数据库。
4. 使用自定义配置文件 #
aide --config=/path/to/aide.conf --check
5. 比较两个数据库 #
aide --compare --before=/var/lib/aide/aide.db.old --after=/var/lib/aide/aide.db.new
6. 检查配置文件语法 #
aide --config-check
配置文件 #
AIDE 的配置文件(通常是/etc/aide/aide.conf
或/etc/aide.conf
)定义了要监控的文件和目录,以及要检查的属性。
基本配置示例 #
# 定义要检查的属性组
# p: 权限
# i: inode
# n: 文件数量
# u: 用户
# g: 组
# s: 大小
# m: mtime
# c: ctime
# a: atime
# S: 检查大小变化
# md5: MD5校验和
# sha1: SHA1校验和
# sha256: SHA256校验和
# sha512: SHA512校验和
# R: p+i+n+u+g+s+m+c+md5
# L: p+i+n+u+g
# E: 扩展属性
# B: ACL
# 定义规则组
NORMAL = R+sha256
PERMS = p+i+u+g
LOGS = p+i+n+u+g+S
# 监控规则
/etc NORMAL
/bin NORMAL
/sbin NORMAL
/usr NORMAL
/boot NORMAL
/root NORMAL
/var/log LOGS
/var/spool/cron NORMAL
# 排除规则
!/var/log/wtmp
!/var/log/lastlog
高级配置示例 #
# 数据库路径
database=file:/var/lib/aide/aide.db
database_out=file:/var/lib/aide/aide.db.new
# 日志设置
report_url=file:/var/log/aide/aide.log
report_url=stdout
verbose=5
# 定义规则组
ALLXTRAHASHES = sha1+sha256+sha512
EVERYTHING = R+ALLXTRAHASHES
NORMAL = PERMS+ALLXTRAHASHES
LOGS = PERMS+n+S
# 监控规则
/etc EVERYTHING
/bin EVERYTHING
/sbin EVERYTHING
/usr EVERYTHING
/boot EVERYTHING
/root EVERYTHING
/var/log LOGS
/var/spool/cron EVERYTHING
# 排除规则
!/var/log/wtmp
!/var/log/lastlog
!/var/log/aide.log
!/var/lib/aide/aide.db
!/var/lib/aide/aide.db.new
!/proc
!/sys
!/dev
!/tmp
!/run
!/var/tmp
!/var/run
!/var/cache
!/home/*/tmp
高级用法 #
1. 自动化 AIDE 检查 #
创建一个脚本aide-check.sh
:
#!/bin/bash
# AIDE自动检查脚本
# 设置变量
DATE=$(date +%Y%m%d-%H%M%S)
LOG_DIR="/var/log/aide"
LOG_FILE="$LOG_DIR/aide-check-$DATE.log"
# 确保日志目录存在
mkdir -p $LOG_DIR
# 运行AIDE检查
echo "开始AIDE检查: $DATE" > $LOG_FILE
/usr/bin/aide --check >> $LOG_FILE 2>&1
EXIT_CODE=$?
# 检查结果
if [ $EXIT_CODE -eq 0 ]; then
echo "AIDE检查完成,未发现变化。" >> $LOG_FILE
SUBJECT="[AIDE] 系统完整性检查通过 - $DATE"
else
echo "AIDE检查完成,发现变化!" >> $LOG_FILE
SUBJECT="[AIDE] 系统完整性检查失败 - $DATE"
fi
# 发送邮件通知
mail -s "$SUBJECT" root@localhost < $LOG_FILE
exit $EXIT_CODE
设置为每日运行:
# 编辑crontab
crontab -e
# 添加以下行,每天凌晨3点运行
0 3 * * * /path/to/aide-check.sh
2. 定期更新数据库 #
创建一个脚本aide-update.sh
:
#!/bin/bash
# AIDE数据库更新脚本
# 设置变量
DATE=$(date +%Y%m%d-%H%M%S)
DB_DIR="/var/lib/aide"
LOG_DIR="/var/log/aide"
LOG_FILE="$LOG_DIR/aide-update-$DATE.log"
# 确保目录存在
mkdir -p $DB_DIR $LOG_DIR
# 备份当前数据库
if [ -f "$DB_DIR/aide.db" ]; then
cp "$DB_DIR/aide.db" "$DB_DIR/aide.db.backup-$DATE"
fi
# 运行AIDE更新
echo "开始AIDE数据库更新: $DATE" > $LOG_FILE
/usr/bin/aide --update >> $LOG_FILE 2>&1
EXIT_CODE=$?
# 检查结果
if [ $EXIT_CODE -eq 0 ]; then
echo "AIDE数据库更新成功。" >> $LOG_FILE
# 应用新数据库
if [ -f "$DB_DIR/aide.db.new" ]; then
mv "$DB_DIR/aide.db.new" "$DB_DIR/aide.db"
echo "新数据库已应用。" >> $LOG_FILE
else
echo "警告:未找到新数据库文件。" >> $LOG_FILE
EXIT_CODE=1
fi
else
echo "AIDE数据库更新失败!" >> $LOG_FILE
fi
# 发送邮件通知
mail -s "[AIDE] 数据库更新 - $DATE" root@localhost < $LOG_FILE
exit $EXIT_CODE
设置为每周运行:
# 编辑crontab
crontab -e
# 添加以下行,每周日凌晨4点运行
0 4 * * 0 /path/to/aide-update.sh
3. 系统更新后更新 AIDE 数据库 #
创建一个脚本update-aide-after-system-update.sh
:
#!/bin/bash
# 系统更新后更新AIDE数据库
# 设置变量
LOG_FILE="/var/log/aide/system-update-$(date +%Y%m%d-%H%M%S).log"
# 记录开始时间
echo "开始系统更新后的AIDE数据库更新: $(date)" > $LOG_FILE
# 运行系统更新
echo "正在更新系统..." >> $LOG_FILE
apt-get update >> $LOG_FILE 2>&1
apt-get upgrade -y >> $LOG_FILE 2>&1
# 更新AIDE数据库
echo "正在更新AIDE数据库..." >> $LOG_FILE
aide --update >> $LOG_FILE 2>&1
# 应用新数据库
if [ -f "/var/lib/aide/aide.db.new" ]; then
mv "/var/lib/aide/aide.db.new" "/var/lib/aide/aide.db"
echo "新的AIDE数据库已应用。" >> $LOG_FILE
else
echo "错误:未找到新的AIDE数据库文件。" >> $LOG_FILE
exit 1
fi
echo "完成: $(date)" >> $LOG_FILE
4. 监控特定文件类型 #
创建一个自定义配置文件/etc/aide/aide.conf.d/custom.conf
:
# 监控所有配置文件
/etc/.*\.conf$ NORMAL
# 监控所有Shell脚本
/usr/local/bin/.*\.sh$ NORMAL
/usr/local/sbin/.*\.sh$ NORMAL
/home/.*\.sh$ NORMAL
# 监控所有Web文件
/var/www/.* NORMAL
5. 与系统日志集成 #
配置 AIDE 将结果发送到 syslog:
# 在aide.conf中添加
report_url=syslog:LOG_AUTH
6. 使用不同的哈希算法 #
# 在aide.conf中定义新的规则组
SAFEHASH = sha256+sha512
NORMAL = R+SAFEHASH
# 应用到目录
/etc NORMAL
最佳实践 #
1. 安全存储数据库 #
AIDE 数据库应该存储在只读媒体或受保护的位置,以防止攻击者修改:
# 将数据库复制到只读媒体
cp /var/lib/aide/aide.db /mnt/readonly/aide.db
# 使用只读媒体上的数据库进行检查
aide --check --config=/etc/aide/aide.conf --before=/mnt/readonly/aide.db
2. 分层监控策略 #
根据文件的重要性和变化频率,使用不同的监控级别:
# 关键系统文件 - 全面监控
/etc/passwd EVERYTHING
/etc/shadow EVERYTHING
/etc/sudoers EVERYTHING
# 配置文件 - 标准监控
/etc NORMAL
# 日志文件 - 只监控权限
/var/log PERMS
3. 排除临时文件和经常变化的文件 #
# 排除临时文件和目录
!/tmp
!/var/tmp
!/var/cache
# 排除经常变化的日志文件
!/var/log/auth.log
!/var/log/syslog
!/var/log/lastlog
4. 定期验证配置 #
# 检查配置文件语法
aide --config-check
# 测试配置是否按预期工作
aide --init --config=/path/to/test.conf
5. 增量更新 #
对于大型系统,考虑使用增量更新以减少资源使用:
# 创建增量更新脚本
aide --update --limit=/etc
常见问题排查 #
1. 数据库初始化失败 #
Error: Unable to open/create database
可能的原因:
- 权限问题
- 磁盘空间不足
- 配置文件错误
解决方法:
# 检查权限
sudo chown root:root /var/lib/aide
sudo chmod 700 /var/lib/aide
# 检查磁盘空间
df -h
# 验证配置文件
aide --config-check
2. 误报过多 #
可能的原因:
- 监控了经常变化的文件
- 规则过于严格
解决方法:
# 排除经常变化的文件
echo "!/var/log/auth.log" >> /etc/aide/aide.conf
# 调整规则,只监控关键属性
echo "/var/www PERMS" >> /etc/aide/aide.conf
3. 性能问题 #
可能的原因:
- 监控了过多文件
- 使用了计算密集型哈希算法
解决方法:
# 减少监控范围
# 使用更轻量级的哈希算法
echo "LIGHTNORMAL = p+i+n+u+g+s+m+c+sha256" >> /etc/aide/aide.conf
echo "/var LIGHTNORMAL" >> /etc/aide/aide.conf
4. 数据库损坏 #
Error: Database is corrupted
解决方法:
# 使用备份数据库
cp /var/lib/aide/aide.db.backup /var/lib/aide/aide.db
# 如果没有备份,重新初始化
aide --init
与其他文件完整性工具的比较 #
工具 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
AIDE | 功能全面、灵活的配置 | 资源消耗较高、需要手动更新数据库 | 全面的文件完整性监控 |
Tripwire | 商业支持、策略驱动 | 商业版本收费、配置复杂 | 企业环境 |
Samhain | 集中管理、实时监控 | 配置复杂、学习曲线陡峭 | 分布式环境 |
osquery | SQL 接口、跨平台 | 功能相对有限 | 集成到现有监控系统 |
OSSEC | 实时监控、入侵检测 | 资源消耗高 | 全面的安全监控 |
提示 #
- 在系统安装后立即初始化 AIDE 数据库,以建立干净的基准
- 在计划的系统更新后更新数据库,避免大量误报
- 将 AIDE 数据库存储在只读媒体或受保护的位置
- 定期备份 AIDE 数据库
- 使用版本控制系统管理 AIDE 配置文件
- 结合其他安全工具(如日志监控、入侵检测系统)使用 AIDE
- 为不同类型的系统创建标准化的 AIDE 配置模板
- 在生产环境中部署前,在测试环境中验证 AIDE 配置
- 使用自动化脚本简化 AIDE 的日常操作
- 定期审查 AIDE 报告,了解系统变化模式