Auditd 使用指南
在复杂的 Linux 系统环境中,无论是为了安全合规、威胁检测还是事后取证,对系统活动进行精确记录都至关重要。auditd(Linux Audit Daemon)正是为此而生的强大工具。它能够深入内核,记录从文件访问到系统调用的每一个细节,为您提供一个无与伦比的“黑匣子”。
本文将作为一份详细的指南,带您从零开始,全面掌握 auditd 的安装、配置、规则定义和日志分析,让您对自己的系统了如指掌。
核心概念:Auditd 是什么?
auditd 是 Linux 审计系统(Linux Auditing System)的用户空间组件,它是一个后台守护进程,负责从内核接收审计消息,并将它们写入日志文件。 简单来说,它本身只负责记录,而不负责分析。
主要组件
Linux 审计框架由多个工具协同工作:
| 组件 | 描述 |
|---|---|
auditd |
审计守护进程,负责将内核生成的审计事件写入磁盘(默认日志路径:/var/log/audit/audit.log)。 |
auditctl |
用于即时控制审计守护进程的行为,例如添加、删除和列出审计规则。 |
ausearch |
一个强大的命令行工具,用于在审计日志文件中查询特定事件。 |
aureport |
用于生成审计日志的摘要报告,帮助快速了解系统活动概况。 |
audispd |
审计事件分发器,可以将事件实时转发给其他插件或远程服务器进行分析。 |
第一步:安装与服务管理
在大多数现代 Linux 发行版(如 RHEL/CentOS 7+)中,auditd 通常已默认安装。 如果没有,可以按以下方式安装:
Debian/Ubuntu:
sudo apt update sudo apt install auditd audispd-pluginsRHEL/CentOS/Fedora:
sudo dnf install audit audit-libs # dnf 或 yum
安装完成后,可以使用 systemctl 来管理 auditd 服务:
# 启动 auditd 服务
sudo systemctl start auditd
# 设置开机自启
sudo systemctl enable auditd
# 查看服务状态
sudo systemctl status auditd
第二步:核心配置文件解析
auditd 的主要配置文件定义了其基本行为,了解这些配置有助于根据需求进行调整。
auditd.conf
这是 auditd 的主配置文件,位于 /etc/audit/auditd.conf。 其中包含日志文件位置、轮转策略、磁盘空间管理等关键设置。
常用配置项:
| 配置项 | 描述 |
|---|---|
log_file |
指定审计日志文件的路径。 |
log_format |
日志格式,RAW 表示由守护进程直接记录。 |
max_log_file |
单个日志文件的最大体积(MB)。 |
num_logs |
保留的旧日志文件数量。 |
max_log_file_action |
当达到最大体积时的操作,ROTATE 表示轮转。 |
space_left_action |
当磁盘剩余空间低于设定值时的操作,SUSPEND 表示暂停记录。 |
disk_full_action |
当磁盘完全写满时的操作,SUSPEND 表示暂停记录。 |
audit.rules
这个文件(位于 /etc/audit/rules.d/audit.rules)是定义审计规则的核心。系统启动时,auditd 会加载此文件中的规则,以实现规则的持久化。
第三步:定义审计规则 (auditctl)
审计规则告诉 auditd 要“看”什么。规则主要分为三类:文件系统规则、系统调用规则和控制规则。
1. 文件系统规则 (Watches)
这是最常见的用法,用于监视对特定文件或目录的访问。
语法:
auditctl -w /path/to/your/file -p [r|w|x|a] -k <key_name>
-w path: 指定要监视的文件或目录路径。-p permissions: 指定要触发审计的权限类型:r- 读取 (read)w- 写入 (write)x- 执行 (execute)a- 属性变更 (attribute change)
-k key_name: 为这条规则设置一个自定义的“密钥”或标签,方便后续使用ausearch快速过滤。
示例:监视 /etc/passwd 文件的写入和属性变更
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
2. 系统调用规则 (Syscall Rules)
这类规则允许在内核层面监视特定的系统调用。
语法:
auditctl -a <action,filter> -S <syscall_name> [fields] -k <key_name>
-a action,filter: 定义规则如何应用。always,exit是最常用的组合,表示“总是在系统调用退出时记录”。-S syscall_name: 指定要监视的系统调用名称,如openat,execve,rmdir等。[fields]: 添加额外的过滤字段,如-F arch=b64(指定架构),-F auid>=1000(指定审计用户ID)。
示例:监视所有删除文件 (unlink, unlinkat) 和删除目录 (rmdir) 的系统调用
sudo auditctl -a always,exit -F arch=b64 -S unlink -S unlinkat -S rmdir -k delete_actions
3. 控制规则 (Control Rules)
用于调整审计系统本身的参数。
-D: 删除所有现有规则。-l: 列出当前所有规则。-b <size>: 设置内核中的审计缓冲区大小(in kilobytes),以应对高负载。-e [0|1|2]: 设置启用状态。1表示启用,0禁用,2表示锁定配置(重启才能修改)。
让规则永久生效
使用 auditctl 添加的规则在系统重启后会丢失。要使规则持久化,必须将它们写入 /etc/audit/rules.d/audit.rules 文件中。语法与 auditctl 命令基本相同,只是省略了开头的 auditctl。
示例 /etc/audit/rules.d/audit.rules 文件内容:
## 删除所有旧规则,确保干净的开始
-D
## 增加缓冲区
-b 8192
## 监视 passwd 文件
-w /etc/passwd -p wa -k passwd_changes
## 监视删除操作
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rmdir -k delete_actions
## 锁定规则,防止被修改
-e 2
修改规则文件后,需要重启 auditd 服务或使用 augenrules 工具来加载它们。
第四步:分析审计日志
记录了大量数据后,如何从中找到有价值的信息?ausearch 和 aureport 是您的得力助手。
ausearch - 精确搜索
ausearch 用于从 /var/log/audit/audit.log 中查询具体的审计事件。
常用参数:
-k <key_name>: 根据您在规则中定义的密钥进行搜索。这是最直接、最高效的过滤方式。-m <message_type>: 按事件类型搜索,如SYSCALL或USER_LOGIN。-ts <start_time>/-te <end_time>: 按时间范围搜索(例如today,yesterday,recent)。-sv <success_value>: 按成功或失败进行过滤 (yes或no)。-i: 将数字ID(如 UID)解释为可读的文本名称,非常有用。
示例:查找所有与 passwd_changes 相关的日志
sudo ausearch -k passwd_changes -i
输出会详细展示谁、在何时、通过什么进程修改了 /etc/passwd 文件。
aureport - 生成摘要报告
aureport 提供了一个宏观视角,用于生成易于理解的摘要报告。
常用报告类型:
-l, --login: 生成所有用户登录事件的报告。--failed: 显示失败的事件摘要。-au, --auth: 报告认证尝试。-m, --mods: 报告用户、组等账户的修改。--summary: 生成一个全面的事件摘要。
示例:生成今天的登录报告
sudo aureport -l --start today -i
示例:查看失败的认证尝试
sudo aureport -au --failed -i
总结
auditd 是一个功能强大且高度可配置的审计框架,它为 Linux 系统管理员和安全工程师提供了深入洞察系统活动的能力。从满足合规性要求到实时威胁检测,再到详尽的事件取证,掌握 auditd 都是一项非常有价值的技能。