第94课 - auditd 审计系统
学习目标
完成本课后,你将能够:
- 理解 auditd 审计系统的基本概念及其在安全合规中的核心作用。
- 配置 auditd 审计规则,监控关键文件、目录、系统调用和命令执行。
- 分析 生成的审计日志,使用
ausearch和aureport工具进行事件调查和报告。 - 应用 审计策略以满足特定的安全合规性(如 PCI DSS, SOX)要求。
核心概念
想象一下,你的服务器是一栋重要的建筑。fail2ban(上一课)就像是门口的保安,阻止可疑人员暴力闯入。而 auditd 则是安装在大楼各处关键位置的监控摄像头系统。它不主动阻止事件发生,而是忠实地记录下“谁”(用户ID)、在“什么时间”(时间戳)、“哪里”(文件/进程)、做了“什么操作”(读、写、执行等)。这些日志是事后分析、合规审计和安全事件调查的金矿。
核心组件
auditd:审计守护进程,负责收集内核产生的审计事件并写入日志。auditctl:命令行工具,用于实时管理审计规则(添加、删除、查看)。ausearch:命令行工具,用于搜索和过滤审计日志。aureport:命令行工具,用于生成审计活动的摘要报告。- 规则文件 (
/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/目录下的配置文件访问,并查询相关事件。
步骤:
- 添加一条规则,监控
/etc/ssh/目录下文件的读取、写入和属性变更,使用标签ssh_config。 - 使用
sudo cat /etc/ssh/sshd_config模拟一次访问。 - 使用
ausearch查找你刚刚触发的事件,并解释输出中的关键字段(如syscall,key,exe)。 预期输出:应能成功搜索到cat命令访问sshd_config的事件记录。
练习 2: 用户行为审计
目标:审计所有以 root 身份执行的命令。
步骤:
- 添加一条规则,监控
execve系统调用,但只记录有效用户ID(euid)为 0(即 root)的事件,并使用标签root_cmds。 - 以 root 身份执行几个命令,如
ls /root,mkdir /tmp/testdir。 - 使用
ausearch -k root_cmds -i查看记录。能否区分出哪些命令是通过sudo执行的?(提示:查看uid和euid字段) 预期输出:能看到完整的 root 命令列表,并理解uid和euid的区别。
练习 3: 生成合规报告
目标:模拟安全审计员,生成一份关于系统身份文件(passwd, shadow)和sudo配置访问的报告。 步骤:
- 确保规则(可参考示例中的
identity和sudoers键)已配置。 - 模拟一些活动:
sudo useradd testuser,sudo visudo,cat /etc/shadow。 - 使用
aureport生成一份包含所有文件访问的报告,并尝试过滤出只与identity和sudoers键相关的报告。你更倾向于用ausearch还是aureport来做这份报告?为什么? 预期输出:一份清晰的报告,展示了对关键安全文件的访问历史。
常见错误
- 忘记启动/启用服务:安装后未执行
systemctl start/enable auditd,导致审计根本没有运行。 - 规则语法错误:使用
-w监控目录时,末尾忘记加/(如/home应写为/home/),或者-p参数拼写错误(如war而非rwa)。 - 临时规则丢失:使用
auditctl添加的规则重启后会失效。重要规则必须写入/etc/audit/rules.d/下的文件并重载服务。 - 日志洪泛:监控过于广泛的路径(如
/)或系统调用(如所有write),会产生海量日志,迅速填满/var/log/audit/,甚至导致系统卡顿。始终使用-k标签进行精准定位。 - 忽略日志轮转:审计日志增长很快。确保
logrotate配置正确(通常/etc/logrotate.d/auditd),并定期归档或删除旧日志。
小结
- auditd 是系统的“黑匣子”和“监控摄像头”,提供不可抵赖的操作记录,是满足合规性要求(如 GDPR, PCI DSS)和进行安全事件事后调查(Forensics)的基石。
- 关键工作流:
配置规则(文件/系统调用监控)->生成日志->分析日志(ausearch精确搜索)->生成报告(aureport概览)。 - 最佳实践:使用清晰的
-k键名对事件分类;将规则持久化到配置文件;监控最关键、最敏感的资产(用户数据库、配置文件、特权命令执行);配合日志轮转管理存储空间。 - 通过本课的学习,你已经掌握了一个强大的工具,能够让你对系统上发生的重要活动了如指掌,为构建纵深防御体系中的“检测”环节提供了坚实基础。
下一课预告:我们将把这些独立的安全工具(如 fail2ban, auditd)和配置整合起来,形成一个系统性的《系统安全加固清单》,全面提升服务器的防御等级。
练习编辑器
rust
Loading...