CentOS系统内置的审计子系统由auditd守护进程和内核中的审计模块共同组成,能够记录进程级系统调用、文件读写、权限变更以及用户会话等事件。它和rsyslog的区别在于,auditd直接挂钩内核,不容易被应用层绕过,因此在安全溯源和合规检查中非常关键。通过合理的规则定义,管理员可以精确追踪某个人、某条命令或某个目录发生过的所有活动。

一、auditd服务的基本架构
auditd并不是单独工作的,它分为内核态的审计钩子以及用户态的auditd服务。内核在进程执行系统调用、打开文件或切换用户时,会按预设规则生成一条审计事件,放入内核缓冲区。auditd进程负责从缓冲区取出事件,写入磁盘上的日志文件,默认路径为/var/log/audit/audit.log。
除了主服务,CentOS还提供了auditctl用于控制规则,ausearch用于检索日志,aureport用于生成统计报表。这些工具组合起来,既能实时调整监控策略,也能在事故后做离线分析。理解这套架构有助于我们判断为什么某些行为没有被记录,比如规则未加载或缓冲区溢出导致事件丢弃。
二、安装与启动auditd
多数CentOS minimal安装已包含audit包,若未安装可使用yum安装。启动后建议设为开机自启,避免重启后规则丢失。
# 安装审计组件 yum install -y audit # 启动并设置开机自启 systemctl start auditd systemctl enable auditd # 查看服务状态 systemctl status auditd
需要注意的是,auditd在部分旧版CentOS中不能用systemctl restart直接重启,因为守护进程自身受审计规则保护,应使用service auditd restart或kill信号。如果强行restart可能导致规则清空,这一点在自动化脚本里要特别处理。
安装完成后,可以通过auditctl -s查看内核状态,确认enabled值为1。若为0,说明审计被禁用,需要修改/etc/audit/auditd.conf或引导参数开启。
三、编写审计规则追踪系统活动
规则分为三类:控制规则、文件系统规则和系统调用规则。文件系统规则适合监控重要目录,例如/etc/passwd或业务数据目录;系统调用规则则可监控特定用户执行的命令。下面示例监控所有对/etc目录下文件的写操作。
# 监控/etc目录写与属性变更,防篡改 auditctl -w /etc/ -p wa -k etc_change # 监控某用户执行rm命令 auditctl -a always,exit -F arch=b64 -S unlink -S unlinkat -F auid=1000 -k user_rm
参数-w指定监控路径,-p定义权限类型,w表示写,a表示属性修改。-k是自定义关键字,后续检索时能用它快速过滤。系统调用规则中arch=b64表示64位架构,auid是登录用户ID,即使切换了普通用户也能溯源到最初登录者。
为了让规则重启后依然生效,应写入/etc/audit/rules.d/下的规则文件,例如audit.rules,再通过augenrules --load加载。临时用auditctl加的规则仅存在内存,重启即失效,因此生产环境务必落盘。
四、检索与分析审计日志
当怀疑某时段发生了异常,可用ausearch按时间、关键字或用户提取记录。例如查看etc_change相关事件:
# 按关键字检索 ausearch -k etc_change # 查看指定用户今日行为 ausearch -ua 1000 --start today
输出内容包含序列号、时间、调用类型、进程ID和文件路径等。初学者会觉得字段冗长,其实重点看type=SYSCALL行的exe和name即可定位命令与对象。若日志量巨大,可配合aureport生成摘要。
aureport能按用户、命令、文件生成报表,快速看出谁的活动最频繁。比如aureport -x可列出执行过的可执行文件统计,对发现非法脚本很有帮助。定期把报表发给安全负责人,是低成本合规手段。
五、日志轮转与磁盘保护
审计日志增长很快,尤其在高并发服务器上。/etc/audit/auditd.conf里可设置max_log_file和num_logs控制单文件大小和保留个数,space_left触发警告,admin_space_left则暂停记录或旋转。忽略这些参数可能导致/var/log填满,进而影响系统写操作。
# 示例配置片段 max_log_file = 50 num_logs = 10 space_left = 500 space_left_action = email admin_space_left = 200 admin_space_left_action = rotate
此外,审计日志本身也是敏感数据,建议权限设为600且仅root可读。如果走集中式收集,可用audisp插件转发到远程日志服务器,减少本地篡改风险。这样即使主机被攻破,原始轨迹仍保留在外部。
六、常见误区与建议
一个典型误区是认为开了auditd就绝对安全。实际上规则写得宽泛会拖慢系统,写得窄又漏掉关键行为。建议从核心资产目录和特权命令入手,逐步细化。另一个误区是用grep直接翻audit.log,效率远低于ausearch,且容易误读编码字段。
对于容器环境,由于共享内核,auditd仍可在宿主机捕获容器内进程系统调用,但需留意容器ID映射。总体来看,把CentOS审计功能纳入日常运维,不仅能追踪误操作和入侵,还能在故障复盘时提供不可替代的证据链。