94·安全加固高级

auditd 审计系统

auditdcompliance

第94课 - auditd 审计系统

学习目标

完成本课后,你将能够:

  1. 理解 auditd 审计系统的基本概念及其在安全合规中的核心作用。
  2. 配置 auditd 审计规则,监控关键文件、目录、系统调用和命令执行。
  3. 分析 生成的审计日志,使用 ausearchaureport 工具进行事件调查和报告。
  4. 应用 审计策略以满足特定的安全合规性(如 PCI DSS, SOX)要求。

核心概念

想象一下,你的服务器是一栋重要的建筑。fail2ban(上一课)就像是门口的保安,阻止可疑人员暴力闯入。而 auditd 则是安装在大楼各处关键位置的监控摄像头系统。它不主动阻止事件发生,而是忠实地记录下“谁”(用户ID)、在“什么时间”(时间戳)、“哪里”(文件/进程)、做了“什么操作”(读、写、执行等)。这些日志是事后分析、合规审计和安全事件调查的金矿。

核心组件

  1. auditd:审计守护进程,负责收集内核产生的审计事件并写入日志。
  2. auditctl:命令行工具,用于实时管理审计规则(添加、删除、查看)。
  3. ausearch:命令行工具,用于搜索和过滤审计日志。
  4. aureport:命令行工具,用于生成审计活动的摘要报告。
  5. 规则文件 (/etc/audit/rules.d/audit.rules):存放持久化的审计规则。

规则语法基础

审计规则主要分为两类:

  • 文件监控:监控特定文件或目录的访问。 auditctl -w /path/to/file -p permissions -k key_name

    • -w:监控路径
    • -p:权限(r读,w写,x执行,a属性变更)
    • -k:为事件打上一个自定义标签(便于搜索)
  • 系统调用监控:监控特定的系统操作(如修改用户、访问网络)。 auditctl -a always,exit -F arch=b64 -S <syscall> -k key_name

    • -a:添加规则到列表末尾
    • -F:过滤条件(架构arch,系统调用号-S等)
    • -k:标签

代码示例

1. 安装并启动 auditd

# 在基于RHEL/CentOS的系统上
sudo yum install audit
sudo systemctl start auditd
sudo systemctl enable auditd # 设置为开机自启

# 在基于Debian/Ubuntu的系统上
sudo apt install auditd
sudo systemctl start auditd
sudo systemctl enable auditd

# 检查服务状态
sudo systemctl status auditd

2. 配置基本的文件监控规则

# 使用auditctl临时添加规则(重启后失效)
# 监控/etc/passwd文件的写操作和属性变更
sudo auditctl -w /etc/passwd -p wa -k passwd_changes

# 监控/home目录下所有文件的所有操作
sudo auditctl -w /home/ -p rwa -k home_access

# 查看当前活动规则
sudo auditctl -l

3. 使规则持久化

编辑 /etc/audit/rules.d/audit.rules 文件(或创建新文件如custom.rules),添加以下内容:

# /etc/audit/rules.d/custom.rules
# 监控关键用户和权限文件
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers

# 监控SSH配置变更
-w /etc/ssh/sshd_config -p wa -k sshd_config

# 监控所有sudo命令的执行
-a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -k sudo_usage

应用持久化规则:

sudo service auditd reload # 或 sudo augenrules --load

4. 搜索和分析日志

# 搜索与`passwd_changes`键相关的事件
sudo ausearch -k passwd_changes -i | less

# 搜索今天所有失败的系统调用
sudo ausearch --start today --failed -i

# 搜索特定用户(如UID 1000)的文件访问
sudo ausearch -ua 1000 -f /etc/passwd -i

# 生成一份可读的审计活动摘要报告
sudo aureport -i

# 生成登录/认证报告
sudo aureport -l -i

# 生成文件访问报告
sudo aureport -f -i

# 生成系统调用报告
sudo aureport -s -i

实践练习

练习 1: 基础监控与查询

目标:配置审计规则,监控/etc/ssh/目录下的配置文件访问,并查询相关事件。 步骤

  1. 添加一条规则,监控 /etc/ssh/ 目录下文件的读取、写入和属性变更,使用标签 ssh_config
  2. 使用 sudo cat /etc/ssh/sshd_config 模拟一次访问。
  3. 使用 ausearch 查找你刚刚触发的事件,并解释输出中的关键字段(如 syscall, key, exe)。 预期输出:应能成功搜索到 cat 命令访问 sshd_config 的事件记录。

练习 2: 用户行为审计

目标:审计所有以 root 身份执行的命令。 步骤

  1. 添加一条规则,监控 execve 系统调用,但只记录有效用户ID(euid)为 0(即 root)的事件,并使用标签 root_cmds
  2. 以 root 身份执行几个命令,如 ls /rootmkdir /tmp/testdir
  3. 使用 ausearch -k root_cmds -i 查看记录。能否区分出哪些命令是通过 sudo 执行的?(提示:查看 uideuid 字段) 预期输出:能看到完整的 root 命令列表,并理解 uideuid 的区别。

练习 3: 生成合规报告

目标:模拟安全审计员,生成一份关于系统身份文件(passwd, shadow)和sudo配置访问的报告。 步骤

  1. 确保规则(可参考示例中的 identitysudoers 键)已配置。
  2. 模拟一些活动:sudo useradd testusersudo visudocat /etc/shadow
  3. 使用 aureport 生成一份包含所有文件访问的报告,并尝试过滤出只与 identitysudoers 键相关的报告。你更倾向于用 ausearch 还是 aureport 来做这份报告?为什么? 预期输出:一份清晰的报告,展示了对关键安全文件的访问历史。

常见错误

  1. 忘记启动/启用服务:安装后未执行 systemctl start/enable auditd,导致审计根本没有运行。
  2. 规则语法错误:使用 -w 监控目录时,末尾忘记加 /(如 /home 应写为 /home/),或者 -p 参数拼写错误(如 war 而非 rwa)。
  3. 临时规则丢失:使用 auditctl 添加的规则重启后会失效。重要规则必须写入 /etc/audit/rules.d/ 下的文件并重载服务。
  4. 日志洪泛:监控过于广泛的路径(如 /)或系统调用(如所有 write),会产生海量日志,迅速填满 /var/log/audit/,甚至导致系统卡顿。始终使用 -k 标签进行精准定位
  5. 忽略日志轮转:审计日志增长很快。确保 logrotate 配置正确(通常 /etc/logrotate.d/auditd),并定期归档或删除旧日志。

小结

  • auditd 是系统的“黑匣子”和“监控摄像头”,提供不可抵赖的操作记录,是满足合规性要求(如 GDPR, PCI DSS)和进行安全事件事后调查(Forensics)的基石。
  • 关键工作流配置规则(文件/系统调用监控)-> 生成日志 -> 分析日志ausearch 精确搜索)-> 生成报告aureport 概览)。
  • 最佳实践使用清晰的 -k 键名对事件分类;将规则持久化到配置文件;监控最关键、最敏感的资产(用户数据库、配置文件、特权命令执行);配合日志轮转管理存储空间。
  • 通过本课的学习,你已经掌握了一个强大的工具,能够让你对系统上发生的重要活动了如指掌,为构建纵深防御体系中的“检测”环节提供了坚实基础。

下一课预告:我们将把这些独立的安全工具(如 fail2ban, auditd)和配置整合起来,形成一个系统性的《系统安全加固清单》,全面提升服务器的防御等级。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「系统安全加固清单」 以巩固所学知识。