跳转到内容
搜索 RHEL 文档

    浏览当前文档目录

    RHEL 10 文件完整性:AIDE 基线与检查

    AIDE 不阻止变更,它只回答一个问题:和基线相比,哪些文件变了。在 RHEL 10 上,初始化、移动数据库、跑检查这三步都有坑,尤其是“.new.gz 不移动就等于没基线”。

    在 PVE 390 rhel10-lab(RHEL 10.2 x86_64)上实际执行:

    Terminal window
    sudo dnf -y install aide
    aide --version
    sudo aide --init --config /etc/aide.conf
    sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
    sudo aide --check --config /etc/aide.conf

    E3 记录:plans/content-expansion/evidence/rhel/rhel-aide-baseline/run.json(7 步,含 init/check 的输出 sha256 与退出码)。

    • aide --init 扫描文件系统,把哈希/权限/时间戳写进数据库;
    • 新数据库默认叫 aide.db.new.gz,必须移动成 aide.db.gz,--check 才认;
    • --check 只报告差异,不自动修复;
    • 基线库本身要防篡改(只读介质/离线保存),否则攻击者改库即可“消警”。

    实测初始化输出:

    AIDE successfully initialized database.
    New AIDE database written to /var/lib/aide/aide.db.new.gz
    Number of entries: 49557
    Terminal window
    sudo aide --check --config /etc/aide.conf
    echo $?

    退出码是位掩码,不是普通成功/失败:

    位含义
    1新增文件
    2删除文件
    4内容/属性变更

    所以 4 表示“有变更”,不是“命令坏了”。自动化里要按位判断,并把报告留存;不要把任何非 0 都当脚本失败。

    Terminal window
    # 基线检查
    sudo aide --check --config /etc/aide.conf # rc=0
    # 制造一次变更
    echo '# aide-test' | sudo tee -a /etc/hosts
    # 再检查
    sudo aide --check --config /etc/aide.conf # rc=4

    输出节选:

    AIDE found differences between database and filesystem!!
    f > ... ..H.... : /etc/hosts
    File: /etc/hosts
    Size : 690 | 702
    SHA512 : k8DzTLkA… | 1ILEmMi2…

    f 表示文件,> 表示发生变化;SHA512 前后值可直接用于取证。测试后已把追加行删除,但文件 mtime/大小已变,下一次 check 仍可能报差异——这正是“变更后要重建基线”的原因。

    • 初次基线:安装完、加固完、业务上线前各做一次,记录时间与变更单;
    • 日常检查:aide --check 的输出进日志/工单,不要只发“有告警”;
    • 有意变更后:更新 aide.conf 的排除项或重建数据库,并在变更单里写明;
    • 基线库:复制到只读介质/离线位置,权限 600,禁止普通用户读;
    • 排除项:/proc、/sys、/var/log、容器层、数据库数据文件按需排除,否则噪声会淹没真实告警。
    • aide.db.new.gz 是否已移动为 aide.db.gz;
    • 基线库是否离线/只读保存;
    • --check 退出码是否按位解释;
    • 报告是否留存(含时间、主机、差异文件);
    • 有意变更后是否重建基线并记录原因;
    • 排除项是否覆盖高噪声目录。
    • 未测试大规模文件系统(百万级 inode)的扫描时长与内存;
    • 未测试 aide.conf 自定义规则(NORMAL/CONTENT/PERMS)的组合;
    • 未测试与 auditd/falco 的联动;
    • 未测试基线库签名/加密存储。