aide命令

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 报告,了解系统变化模式