在CentOS服务器安全体系中,AIDE(Advanced Intrusion Detection Environment)是一款基于文件完整性检查的开源入侵检测工具。它通过建立文件系统的初始快照,定期对比当前状态与基准快照的差异,从而发现文件被篡改、新增或删除的异常行为。配合cron定时任务实现每日增量检查,是Linux服务器安全加固的基本操作之一。下面直接给出完整的安装、初始化、配置和定时任务设置方法。

首先通过yum或dnf直接安装AIDE包,CentOS 7使用yum,CentOS 8/Stream使用dnf。安装完成后生成初始数据库,然后编写一个每日执行的shell脚本,最后通过crontab设置每天凌晨自动运行。整个流程大约十分钟就能完成,但配置细节决定了检测效果和系统性能。

一、安装AIDE工具

CentOS 7系统执行以下命令:

yum install -y aide aide-devel

CentOS 8或CentOS Stream系统执行:

dnf install -y aide aide-devel

安装完成后验证版本:

aide --version

一般会显示类似"AIDE 0.16"或更高版本。如果系统中没有aide-devel包,直接安装aide也可以正常使用,devel包主要提供开发头文件,对日常使用影响不大。

二、生成初始数据库快照

AIDE的核心工作原理是对比。第一次运行时需要生成一个"基准快照",记录当前系统所有被监控文件的属性(大小、权限、时间戳、哈希值等)。执行以下命令:

aide --init

这个命令会在/var/lib/aide/目录下生成一个名为aide.db.new.gz的初始数据库文件。注意,这个文件包含了系统中大量文件的信息,生成过程可能需要几分钟到十几分钟,取决于文件数量和磁盘速度。

生成完成后,必须将新数据库重命名为正式数据库,否则AIDE每次运行都会重新初始化:

mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

这一步非常关键。很多人装完AIDE直接跑检测,发现每次都报大量"新增文件",原因就是没有把new.gz转成正式的db.gz。同时建议把这个数据库文件做一次备份,比如复制到/root/目录下:

cp /var/lib/aide/aide.db.gz /root/aide.db.gz.bak

以后如果系统做了重大变更(比如升级内核、安装大量新软件),需要重新生成基准数据库,否则会产生大量误报。

三、配置AIDE检测规则

AIDE的主配置文件位于/etc/aide.conf。这个文件定义了哪些文件需要监控、使用什么检测算法、忽略哪些路径等。默认配置已经比较完善,但通常需要根据实际情况做调整。

打开配置文件:

vi /etc/aide.conf

配置文件中有几个关键段落需要理解。首先是检测规则定义部分,通常在文件开头:

# Rule definition
R = p+i+n+u+g+s+m+S+sha512
L = p+i+n+u+g+acl+xattrs+selinux
> = p+i+n+u+g+s+m+S+sha512

# Filesystems to check
/ R
/boot L
/var L

这里的R、L、>是规则名称,后面跟着的字母代表检测属性:p是权限、i是inode、n是链接数、u是用户、g是组、s是大小、m是修改时间、S是增长大小、sha512是哈希算法。L规则多了acl、xattrs和selinux检测,适合/boot和/var目录。

接下来是要排除的路径,默认已经排除了一些动态目录:

!/proc
!/sys
!/dev
!/tmp
!/run
!/var/tmp
!/var/run
!/var/lock
!/var/cache
!/var/log

这里需要特别注意/var/log目录。如果你希望监控日志文件的完整性(比如防止攻击者删除操作日志),可以把这一行注释掉或者改成具体的日志文件路径。但通常建议排除/var/log,因为日志文件本身会频繁变化,不排除会导致每天大量误报。

另外,如果你有自定义的应用目录需要监控,比如/opt/app或者/home下的某些目录,可以在配置文件末尾添加:

/opt/app R
/home/deploy R

配置修改完成后保存退出。建议在正式使用前先手动运行一次检测看看结果:

aide --check

这个命令会对比当前状态和/var/lib/aide/aide.db.gz中的基准数据,输出差异报告。如果是第一次运行且数据库刚生成,应该只有很少的变化(主要是数据库文件本身)。如果输出大量新增文件,说明基准数据库有问题,需要重新初始化。

四、编写每日增量检查脚本

直接用aide --check命令虽然能跑,但在生产环境中建议封装成脚本,加入日志记录、邮件通知和结果归档功能。创建脚本文件:

vi /usr/local/bin/aide_daily_check.sh

写入以下内容:

#!/bin/bash
# AIDE Daily Integrity Check Script
# Created for CentOS security hardening

DATE=$(date +%Y%m%d_%H%M%S)
LOG_DIR="/var/log/aide"
REPORT_FILE="${LOG_DIR}/aide_report_${DATE}.txt"
DB_FILE="/var/lib/aide/aide.db.gz"
MAIL_TO="admin@example.com"

# Create log directory if not exists
mkdir -p ${LOG_DIR}

# Run AIDE check
aide --check 2>&1 | tee ${REPORT_FILE}

# Check if there are any changes
if grep -q "changed" ${REPORT_FILE} || grep -q "added" ${REPORT_FILE} || grep -q "removed" ${REPORT_FILE}; then
    echo "WARNING: AIDE detected file changes on $(hostname) at ${DATE}" | mail -s "AIDE Alert: File Changes Detected" ${MAIL_TO}
fi

# Keep only last 30 days of reports
find ${LOG_DIR} -name "aide_report_*.txt" -mtime +30 -delete

exit 0

这个脚本做了几件事:记录每次检查的时间戳、将输出同时写入日志文件和屏幕、检测到变化时发送邮件告警、自动清理30天前的旧报告。根据实际情况修改MAIL_TO为你的管理员邮箱。如果系统没有配置邮件发送功能,需要先安装postfix或mailx:

yum install -y mailx postfix

然后给脚本添加执行权限:

chmod +x /usr/local/bin/aide_daily_check.sh
五、配置cron定时任务实现每日自动执行

使用crontab设置每天凌晨2点自动执行AIDE检查。先编辑root用户的crontab:

crontab -e

在文件末尾添加一行:

0 2 * * * /usr/local/bin/aide_daily_check.sh

这表示每天凌晨2:00执行脚本。如果你希望每天检查两次(比如早晚各一次),可以改成:

0 2 * * * /usr/local/bin/aide_daily_check.sh
0 22 * * * /usr/local/bin/aide_daily_check.sh

保存退出后,验证crontab是否生效:

crontab -l

确认任务已添加。同时确保cron服务正在运行:

systemctl enable crond
systemctl start crond

CentOS 8/Stream上服务名可能是crond而不是crond,用以下命令确认:

systemctl status crond
六、日常运维注意事项和进阶技巧

AIDE部署完成后不是一劳永逸的事情。有几个关键运维点必须记住。第一,每次系统做了合法变更(比如yum update安装了新软件包、修改了配置文件、新增了用户目录),都需要重新生成基准数据库。操作顺序是:先更新系统,然后重新初始化,最后把新数据库转正:

aide --init
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

第二,建议把/var/lib/aide/aide.db.gz这个数据库文件做离线备份。这个文件是检测的基准,如果被攻击者篡改,AIDE就失去了意义。可以定期把它拷贝到只读介质或者另一台独立的监控服务器上。

第三,对于高安全要求的场景,可以考虑使用AIDE的增量更新模式而不是全量重新初始化。AIDE支持通过--update参数只更新变化的部分,但这个功能在某些版本中不太稳定,生产环境建议还是全量重建更可靠。

第四,检测结果的解读需要经验。AIDE报告中会列出每一个变化的文件,包括新增、删除、权限变更、大小变化、哈希不匹配等。其中哈希不匹配是最严重的信号,说明文件内容被修改了。权限变更和大小变化可能是正常的系统更新,需要结合实际情况判断。

第五,如果服务器上运行着数据库(MySQL、PostgreSQL等),数据库文件频繁变化,建议把数据库数据目录排除在AIDE监控之外,或者只监控数据库配置文件和二进制程序,避免每天产生海量误报。

七、与其他安全工具的配合使用

AIDE属于主机入侵检测层面的工具,它和其他安全措施形成纵深防御体系。建议同时部署以下措施:配置SELinux为enforcing模式、开启auditd审计服务监控系统调用、使用fail2ban防止暴力破解、定期更新系统补丁。AIDE负责"事后发现",auditd负责"事中记录",SELinux和fail2ban负责"事前预防",四者结合才能构建比较完整的服务器安全防线。

总结一下,在CentOS上部署AIDE并配置每日增量检查,核心就是四步:安装、初始化数据库、写好检测脚本、设好cron定时任务。看似简单,但配置文件的规则定义、排除路径的选择、基准数据库的维护才是真正决定效果的地方。把这些细节做扎实,你的服务器文件完整性监控就能真正发挥作用。