菜单

Administrator
发布于 2025-12-28 / 9 阅读
0

Auditd

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-plugins
    
  • RHEL/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 工具来加载它们。


第四步:分析审计日志

记录了大量数据后,如何从中找到有价值的信息?ausearchaureport 是您的得力助手。

ausearch - 精确搜索

ausearch 用于从 /var/log/audit/audit.log 中查询具体的审计事件。

常用参数:

  • -k <key_name>: 根据您在规则中定义的密钥进行搜索。这是最直接、最高效的过滤方式。
  • -m <message_type>: 按事件类型搜索,如 SYSCALLUSER_LOGIN
  • -ts <start_time> / -te <end_time>: 按时间范围搜索(例如 today, yesterday, recent)。
  • -sv <success_value>: 按成功或失败进行过滤 (yesno)。
  • -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 都是一项非常有价值的技能。