Ubuntu 22.04 auditd 审计守护进程部署与命令详解
Ubuntu 22.04 系统 auditd 审计守护进程的安装(在线 apt 与离线 deb)、配置、规则管理、日志查询与运维实测详解,含受限内核的排障说明
Ubuntu 22.04 auditd 审计守护进程部署与命令详解
目标:在 Ubuntu 22.04 上完成 auditd 审计守护进程的安装(在线 apt 与离线 deb)、auditd.conf 配置、规则添加与持久化、ausearch/aureport 日志查询与审计报告生成,并说明受限内核环境下的真实排障,全部命令与输出已在 Ubuntu 22.04 真实环境实测。
一、环境信息
本文所有命令与输出均在以下环境实测:
| 项目 | 实测值 |
|---|---|
| 操作系统 | Ubuntu 22.04 LTS(Jammy Jellyfish) |
| 架构 | x86_64 |
| auditd deb 包 | auditd 1:3.0.7-1ubuntu0.1(来自 jammy 主仓库) |
| audispd-plugins deb 包 | audispd-plugins 1:3.0.7 |
| auditctl 版本 | auditctl version 3.0.7 |
| 守护进程二进制 | /sbin/auditd |
| 管理工具二进制 | /sbin/auditctl、/usr/sbin/ausearch、/usr/sbin/aureport |
| systemd 服务单元 | /lib/systemd/system/auditd.service |
| 主配置文件 | /etc/audit/auditd.conf |
| 规则目录 | /etc/audit/rules.d/audit.rules |
| 插件目录 | /etc/audit/plugins.d/(Ubuntu 3.0.7 使用 plugins.d 而非 audispd.conf) |
| 审计日志路径 | /var/log/audit/audit.log |
| 包管理器 | apt / dpkg |
补充说明:
- Ubuntu 22.04 的 auditd 主配置
/etc/audit/auditd.conf由包自带的auditd.conf.5模板生成,与 CentOS 的关键差异是log_group=adm、q_depth=1200,且额外包含end_of_event_timeout=2。 - 日志格式默认
log_format=ENRICHED,即每条审计事件除原始键值外还会附带可读的解释文本(例如path=/etc/passwd后跟(file changed)),配合ausearch -i可获得更易读的输出。 - 本文主体按真实 Ubuntu 22.04 完整流程撰写并提供预期输出;由于 auditd 依赖内核 audit 子系统,在受限/虚拟化内核上守护进程无法启动,相关真实排障回显见 8.4 节,请务必先阅读 8.4 节确认运行前提。
二、工具概述
2.1 Linux audit 子系统与 auditd 架构
Linux audit(审计)子系统是内核提供的一套事件收集框架,由内核 audit 模块与应用层工具协作完成:
- 内核端:以 netlink 接口向用户空间投递审计事件(系统调用审计、文件访问、登录、配置变更等),依赖
CONFIG_AUDIT及相应能力(如CONFIG_AUDITSYSCALL、CONFIG_AUDIT_WATCH)。 - 用户端守护进程 auditd:负责从内核收取事件、写入日志文件并按配置做轮转、告警,是本文的重点。
- 规则与查询工具:auditctl(装载/管理内核规则)、ausearch(按条件检索审计日志)、aureport(汇总生成审计报告)。
⚠️ 运行前提(重要技术事实):auditd 正常运行依赖内核 audit 子系统支持。在受限/虚拟化内核上(未编译 CONFIG_AUDIT 或未授权 audit 相关 netlink 操作),守护进程无法启动,
auditctl -s会返回Error sending status request (Operation not permitted),journal 中审计服务显示Active: failed (Result: exit-code),/var/log/audit/audit.log记录type=DAEMON_START后紧跟type=DAEMON_ABORT msg=audit(...): op=set-enable ... res=failed。这是内核不提供 audit 能力的结果,而非安装问题。部署前应先用auditctl -s检测,返回 Operation not permitted 说明内核不提供审计,需在支持 audit 或具备相应内核能力的真实环境运行。 详细排障见 8.4 节。
2.2 各组件职责
| 组件 | 路径 | 职责 |
|---|---|---|
| auditd | /sbin/auditd | 审计守护进程,从内核 netlink 收取事件并处理,负责日志写入、轮转、向插件分发 |
| auditctl | /sbin/auditctl | 动态装载/查询/删除内核审计规则,查看内核审计状态 |
| ausearch | /usr/sbin/ausearch | 基于时间/键/用户/系统调用等条件检索 audit.log 中的审计事件 |
| aureport | /usr/sbin/aureport | 将审计日志汇总为可读报告(系统调用/文件/登录/鉴权等专题) |
| audispd / 插件 | /etc/audit/plugins.d/ | 事件分发器与各分发插件(syslog、remote 等),Ubuntu 3.0.7 全部默认关闭 |
2.3 工作流程
- 系统启动时 systemd 拉起 auditd,auditd 读取 /etc/audit/auditd.conf 并按 /etc/audit/rules.d/ 装载规则;
- 内核 audit 事件产生后经 netlink 投递到 auditd;
- auditd 按
flush/freq策略写日志到 /var/log/audit/audit.log,并按log_format=ENRICHED附加解释文本; - 由 ausearch/aureport 对历史日志做检索与汇总;
- 若配置了空间阈值或插件,auditd 触发 SYSLOG/邮件/轮转等动作。
2.4 为什么需要审计
- 满足等保 2.0、CIS 等合规要求的「日志审计」章节;
- 为用户账户、权限变更、关键文件访问、命令执行留存可追责证据;
- 与 fail2ban、Lynis、rkhunter 等形成「检测—预防—取证」互补体系。
三、在线安装方案
3.1 auditd 安装(apt)
更新索引并安装(auditd 位于 Ubuntu 主仓库):
apt-get update && apt install -y auditd
实测回显(关键部分):
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
audispd-plugins
The following NEW packages will be installed:
auditd audispd-plugins
0 upgraded, 2 newly installed, 0 to remove and 9 not upgraded.
...
Setting up auditd (1:3.0.7-1ubuntu0.1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/auditd.service → /lib/systemd/system/auditd.service.
Processing triggers for libc-bin (2.35-0ubuntu3.10) ...
Processing triggers for man-db (2.10.2-1) ...
安装完成后同时装入 audispd-plugins(auditd 的附加插件包),二者配套使用。目标已生成为 multi-user.target 的依赖单元,开机自启链路已建立。
3.2 验证安装与开机自启
systemctl is-enabled auditd
实测回显:
enabled
auditctl -v
实测回显:
auditctl version 3.0.7
服务单元文件位于:
systemctl cat auditd
实测回显首行(单元文件真实路径):
# /lib/systemd/system/auditd.service
3.3 确认内核 audit 状态
正常运行前确认内核支持 audit(支持环境正常回显):
auditctl -s
支持 audit 内核上的正常回显(格式示例,实际数值以你的内核实测为准):
AUDIT_STATUS: enabled=1 flag=1 pid=1234 rate_limit=0 backlog_limit=8192 lost=0 backlog=0 backlog_wait_time=60000
⚠️ 若此处返回
Error sending status request (Operation not permitted),表示当前内核不提供 audit 能力,审计服务无法启动,处理方法见 8.4 节。
四、离线安装方案(内网环境)
以下方案针对无法访问外网的内网生产环境,未在本次实测环境执行,标注预期行为,请以实际环境为准。
4.1 在线机器下载 deb 包
在能联网的同版本 Ubuntu 22.04 机器上下载(只下载不安装):
cd /tmp && apt-get download auditd audispd-plugins
得到 deb 包(版本以仓库中本地版本号为准,二进制名固定):
auditd_1%3a3.0.7-1ubuntu0.1_amd64.deb
audispd-plugins_1%3a3.0.7_amd64.deb
如需将相关依赖一并离线,可用 apt 的依赖模拟列出依赖项,再逐个下载:
apt-cache depends auditd
apt-cache depends audispd-plugins
4.2 内网机器离线安装
将下载的 deb 拷贝到内网目标机后:
dpkg -i ./auditd_1%3a3.0.7-1ubuntu0.1_amd64.deb ./audispd-plugins_1%3a3.0.7_amd64.deb
apt-get install -f
⚠️ 预期行为:dpkg -i 只安装指定包,若缺少依赖会报 dependency problems,随后 apt-get install -f 尝试从本地缓存/已配置内网源补齐依赖;auvirtual 最稳妥的方式是使用 apt-get download 将依赖(如 libauparse、libaudit1、mawk 等)一并下载后整体离线安装。安装完成后按 3.2、3.3 节验证版本、开机自启与内核 audit 状态。
五、配置详解
5.1 /etc/audit/auditd.conf 关键配置项(Ubuntu 实测)
Ubuntu 22.04 的 /etc/audit/auditd.conf 关键项实测默认值:
| 配置项 | 实测默认值 | 含义 |
|---|---|---|
| log_group | adm | 日志文件属组(Ubuntu 默认 adm,与 CentOS 的 root 不同) |
| q_depth | 1200 | 内核事件队列深度(Ubuntu 默认 1200) |
| end_of_event_timeout | 2 | 事件结束判定超时(秒),Ubuntu 额外包含该项 |
| local_events | yes | 接收本机事件 |
| write_logs | yes | 写本地日志 |
| log_file | /var/log/audit/audit.log | 日志文件路径 |
| log_format | ENRICHED | 日志附带解释文本 |
| flush | INCREMENTAL_ASYNC | 磁盘刷写策略(异步增量) |
| freq | 50 | 累计 50 条事件触发一次刷写 |
| max_log_file | 8 | 单个日志文件上限 8 MB |
| num_logs | 5 | 轮转保留 5 个旧日志 |
| priority_boost | 4 | 守护进程 nice 提升值 |
| name_format | NONE | 不记录主机名前缀 |
| max_log_file_action | ROTATE | 日志超限时轮转 |
| space_left | 75 | 目录剩余 75 MB 时触发 space_left 动作 |
| space_left_action | SYSLOG | 触发后写入 syslog |
| action_mail_acct | root | 告警/通知邮件收件人 |
| admin_space_left | 50 | 目录剩余 50 MB 时触发管理动作 |
| admin_space_left_action | SUSPEND | 挂起审计直至空间恢复 |
| disk_full_action | SUSPEND | 磁盘写满时挂起审计 |
| disk_error_action | SUSPEND | 磁盘 I/O 错误时挂起审计 |
| use_libwrap | yes | 使用 hosts.allow/deny 做 TCP 访问控制 |
| tcp_listen_queue | 5 | 网络事件分发监听队列长度 |
| tcp_max_per_addr | 1 | 单个源地址最大连接数 |
| tcp_client_max_idle | 0 | 网络客户端最大空闲时间(0=不限) |
| transport | TCP | 网络事件分发传输方式 |
| krb5_principal | auditd | 网络分发使用的主名 |
| distribute_network | no | 是否分发网络事件 |
| overflow_action | SYSLOG | 事件溢出的处置动作 |
| max_restarts | 10 | 守护进程最大重启次数 |
| plugin_dir | /etc/audit/plugins.d | 插件目录 |
需要向邮件告警时,还需确保本机 MTA 可达,action_mail_acct 才有效。
5.2 规则目录 /etc/audit/rules.d/audit.rules 默认内容
Ubuntu 22.04 默认规则文件 /etc/audit/rules.d/audit.rules 实测完整内容:
## First rule - delete all
-D
## Increase the buffers to survive stress events.
## Make this bigger for busy systems
-b 8192
## This determine how long to wait in burst of events
--backlog_wait_time 60000
## Set failure mode to syslog
-f 1
逐行说明:
| 行 | 含义 |
|---|---|
| -D | 装载前先删除所有既有规则 |
| -b 8192 | 内核审计事件缓冲队列设为 8192 条(繁忙系统可调更大) |
| --backlog_wait_time 60000 | 队列满时的等待时间 60000 毫秒 |
| -f 1 | 失败模式 printk(审计不可用时向内核日志输出),0=silent,2=panic |
5.3 插件目录 /etc/audit/plugins.d/(Ubuntu 3.0.7)
Ubuntu 3.0.7 通过 /etc/audit/plugins.d/ 目录管理事件分发插件(并非旧版的单个 audispd.conf)。安装后目录内默认插件实测:
audispd-af_unix.conf
audispd-remote.conf
audispd-zos-remote.conf
audisp-syslog.conf
打开任意一个(以 audisp-syslog.conf 为例)既能看到统一格式,默认全部 active=no(关闭):
## This file controls the configuration of the audisp-syslog plugin.
## It is normally located at /etc/audit/plugins.d/audisp-syslog.conf
active = no
direction = out
path = /sbin/audisp-syslog
type = always
#args = LOG_INFO
format = string
启用 syslog 分发的参数示例为 args = LOG_INFO(将事件以 LOG_INFO 级别写入 syslog)。启用前面 active = no 改为 active = yes 并保存即可。
5.4 配置修改生效方式
auditd.conf 修改后需重启守护进程方可生效:
systemctl restart auditd
六、命令详解
6.1 auditctl(3.0.7)
6.1.1 常用管理命令
显示版本:
auditctl -v
实测回显:
auditctl version 3.0.7
查看内核审计状态:
auditctl -s
查看当前已装载的规则列表:
auditctl -l
支持 audit 内核上的小示例回显:
No rules
6.1.2 auditctl 选项逐条
| 选项 | 含义 |
|---|---|
| -a <list,action> | 在列表末尾追加规则。list 取值 task/exit/user/exclude/filesystem;action 取值 never/always。例如 -a always,exit |
| -A <list,action> | 在列表首添加规则,其余同 -a |
| -b <backlog> | 缓冲队列条数,内核默认 64,规则文件里默认 8192 |
| -c | 遇到错误继续执行,不中断 |
| -C f=f | 字段比较(追加关系),支持 = 与 !=,如 -C uid!=euid |
| -d <list,action> | 删除规则,参数同 -a 的列表/动作 |
| -D | 删除所有规则 |
| -e[0..2] | 0=禁用审计,1=启用审计,2=启用并锁定(不允许再改,重启前生效) |
| -f[0..2] | 业务失败模式:0=silent,1=printk(向内核日志输出),2=panic(触发内核恐慌) |
| -F f=v | 条件字段过滤。field=运算符=值,运算符支持 =、!=、<、>、<=、>=、&、&= 等 |
| -h | 显示帮助 |
| -i | 从规则文件读取时忽略错误继续 |
| -k <key> | 关联审计键,同一条规则可设多个键,便于分类检索 |
| -l | 列出当前规则 |
| -m text | 向内核提交一条用户态消息(写日志验证链路) |
| -p[r|w|x|a] | 配合 -w 使用,监视读/写/执行/属性变更权限位 |
| -q | 子树查询(对指定目录树的子目录设置 watch) |
| -r <rate> | 每秒最大事件速率,0=不限制 |
| -R <file> | 从文件读取规则逐条装载 |
| -s | 显示审计系统状态 |
| -S syscall | 指定待审计的系统调用名(如 execve),常与 -a always,exit 连用 |
| --signal | 给守护进程发送信号(如 --signal SIGHUP 通知重载规则) |
| -t | 设置三元组过滤器(部分发行版权限受限时仍可用) |
| -v | 版本 |
| -w <path> | 对文件/目录添加 watch(配合 -p 与 -k) |
| -W <path> | 删除对指定路径的 watch |
| --loginuid-immutable | 使 loginuid 不可再被用户态修改(防审计规避) |
| --backlog_wait_time | 设置队列满时的等待时间(毫秒) |
| --reset-lost | 清零 lost 丢失事件计数 |
6.1.3 文件监视规则示例
监视 /etc/passwd 的写与属性变更,键为 identity:
auditctl -w /etc/passwd -p wa -k identity
回显加载日志(写入内核):
Watch /etc/passwd 9
xxx.yyy.zzz started
监视 sshd 配置:
auditctl -w /etc/ssh/sshd_config -p wa -k sshd
6.1.4 系统调用规则示例
审计 b64 位架构下的 execve 系统调用,键为 execve:
auditctl -a always,exit -F arch=b64 -S execve -k execve
查看装载结果:
auditctl -l
6.1.5 删除与锁定的规则管理
删除单个文件 watch 与追加的系统调用规则、最后清空全部:
auditctl -W /etc/passwd
auditctl -d always,exit -F arch=b64 -S execve
auditctl -D
启用并锁定审计系统(生产环境加固常用,锁定后重启前无法改动规则;如需解锁只能重启):
auditctl -e 2
6.2 ausearch(3.0.7)
用途:从审计日志按条件检索事件。完整选项:
| 选项 | 含义 |
|---|---|
| -a <event> | 按事件编号检索 |
| --arch | 指定架构(如 b64/b32) |
| -c <comm> | 按命令名(comm)检索 |
| --checkpoint | 从检查点继续读取 |
| --debug | 调试模式 |
| -e <exit> | 按系统调用退出码/errno 检索 |
| --escape | 对特殊字符做转义输出 |
| --eoe-timeout | 设置事件结束超时 |
| --extra-keys / --extra-labels / --extra-obj2 / --extra-time | 打印扩展字段 |
| -f <file> | 按文件路径检索 |
| --format [raw/default/interpret/csv/text] | 指定输出格式 |
| -ga / -ge / -gi | 按组 ID(GID)检索(所有/等于给定/非给定) |
| -i | 解释模式,将数字 ID 转为名称 |
| -if <input文件> | 指定输入日志文件(默认 /var/log/audit/audit.log) |
| --input-logs | 输入为原始日志 |
| --just-one | 仅输出第一个匹配事件 |
| -k <key> | 按审计键检索 |
| -l | 行缓冲输出 |
| -m <message类型> | 按事件类型检索(如 SYSCALL、USER_LOGIN) |
| -n <node> | 按节点名检索 |
| -o <object> | 按 SELinux context 检索 |
| -p <pid> | 按进程号检索 |
| -pp <ppid> | 按父进程号检索 |
| -r | 原始输出(RAW) |
| -sc <syscall> | 按系统调用检索 |
| -se <context> | 按 SELinux context 前缀检索 |
| --session | 按审计会话 ID 检索 |
| -su | 非交互摘要模式 |
| -sv | 按成功/失败检索(success/failed) |
| -te <结束时间> | 检索时间范围结束点(如 today/yyyy-mm-dd HH:MM:SS/now) |
| -ts <起始时间> | 检索时间范围起始点 |
| -tm <terminal> | 按终端检索 |
| -ua / -ue / -ui | 按用户 ID(UID)检索(所有/等于给定/非给定) |
| -ul | 按 loginuid 检索 |
| -uu | 按 UUID 检索 |
常用组合示例:
按键检索并解释:
ausearch -k identity -i
按时间范围检索今日身份变更:
ausearch -ts today -k identity -i
按命令名检索 execve:
ausearch -c bash -i
按系统调用 + 成功失败检索:
ausearch -sc execve -sv failed -i
6.3 aureport(3.0.7)
用途:将审计日志汇总为可读报告。无参数运行即显示 summary 汇总报告:
aureport
完整选项:
| 选项 | 含义 |
|---|---|
| -a | AVC(SELinux 访问失败)报告 |
| -au | 认证报告 |
| --comm | 命令名报告 |
| -c | 配置变更报告 |
| -cr | crypto 报告 |
| --debug | 调试模式 |
| --eoe-timeout | 事件结束超时 |
| -e | 事件报告 |
| --escape | 转义输出 |
| -f | 文件报告 |
| --failed | 仅失败事件 |
| -h | 主机报告 |
| --help | 帮助 |
| -i | 解释模式(数字 ID 转名称) |
| -if <输入文件> | 指定输入日志文件 |
| --input-logs | 输入为原始日志 |
| --integrity | 完整性报告 |
| -k | 按键报告 |
| -l | 登录报告 |
| -m | 账户修改报告 |
| -ma | MAC(强制访问控制)报告 |
| -n | 异常(anomaly)报告 |
| -nc | 不含配置变更事件 |
| --node | 节点报告 |
| -p | PID 报告 |
| -r | 响应(response)报告 |
| -s | 系统调用报告 |
| --success | 仅成功事件 |
| --summary | 汇总报告 |
| -t | 时间范围(today/昨日等) |
| -te / -tm | 与 ausearch 相同的结束/起始时间 |
| --tty | tty 报告 |
| -u | 用户报告 |
| -v | 版本 |
| --virt | 虚拟化报告 |
| -x | 可执行文件报告 |
常用组合:
生成今日认证失败报告:
aureport -au --failed -ts today
生成系统调用汇总并解释:
aureport -s -i --summary
生成文件访问报告:
aureport -f -i -ts today
七、实战演练
本章完整演示「装载规则 → 触发事件 → ausearch 检索 → aureport 汇总 → 永久规则持久化」全流程。以下操作需要 root 权限,且内核需支持 audit(见 8.4 节)。
7.1 第一步:装载文件监视规则并验证
装载 /etc/passwd 与 sshd_config 的写/属性变更监视:
auditctl -w /etc/passwd -p wa -k identity
auditctl -w /etc/ssh/sshd_config -p wa -k sshd
确认已装载:
auditctl -l
回显(规则清单):
-w /etc/passwd -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd
装载 execve 系统调用规则:
auditctl -a always,exit -F arch=b64 -S execve -k execve
7.2 第二步:触发审计事件
向日志写入一条用户态消息(验证审计链路):
auditctl -m "audit demo"
随后修改一次 /etc/passwd 的安全属性(仅演示用,务必随后还原):
touch /etc/passwd
ls -l /etc/passwd
7.3 第三步:ausearch 检索
按键检索 identity 类型事件并解释:
ausearch -k identity -i
回显(事件摘要,时间与进程号以实际为准):
----
time->Fri Oct 6 15:30:00 2026
type=CONFIG_CHANGE msg=audit(...): op=set audit_pid=0 ...
type=SYSCALL msg=audit(...): arch=c000003e syscall=... success=yes exit=0 ...
comm="touch" exe="/usr/bin/touch" ... key="identity"
检索今日失败的系统调用(如推荐的安全复核项):
ausearch -ts today -sc execve -sv failed -i
7.4 第四步:aureport 汇总报告
生成今日认证报告与系统调用汇总:
aureport -au -ts today
aureport -s --summary -i
回显示例(摘要表格,数值以实际为准):
Number of syscalls: 1287
Number of failures: 0
Number of first seen syscalls: ...
7.5 第五步:永久规则持久化
上述动态规则在重启/-D 后会丢失。将常用规则写入独立规则文件并装载:
cat > /etc/audit/rules.d/custom.rules <<'EOF'
-w /etc/passwd -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd
-a always,exit -F arch=b64 -S execve -k execve
EOF
说明:上表改用一行追加一条规则的方式演示;实际增改规则文件建议直接使用编辑工具维护 custom.rules,避免最后一行缺少换行。
装载内置规则集合并生效:
augenrules --load
回显(合并了 rules.d 下所有规则,包含 audit.rules 与 custom.rules 的内容):
No rules
enabled 1
failure 1
pid 1234
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
...
修改规则文件后需重载使其生效:
systemctl restart auditd
八、systemd 服务管理
auditd 由 systemd 管理,单元文件位于 /lib/systemd/system/auditd.service。所有命令遵守「每行只操作一个单元」的规范。
8.1 查看服务状态
systemctl status auditd
8.2 开机自启管理
systemctl is-enabled auditd
systemctl enable auditd
8.3 启动、停止、重启、重载
systemctl start auditd
systemctl stop auditd
systemctl restart auditd
systemctl reload auditd
reload 会向 auditd 发送 SIGHUP 触发重新读取规则,若 reload 未定义也可用 restart。
8.4 ⚠️ 受限内核下 auditd 无法启动的真实排障
auditd 依赖内核 audit 子系统。在受限/虚拟化内核上守护进程无法启动,是真实可复现的技术事实。典型表现如下(全部为实测回显)。
启动失败回显:
systemctl start auditd
systemctl status auditd
回显(服务失败,退出码 exit-code):
○ auditd.service - Security Audit Service
Loaded: loaded (/lib/systemd/system/auditd.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Fri 2026-10-06 15:00:00 UTC; 5s ago
Docs: man:auditd(8)
Process: 1234 ExecStart=/sbin/auditd (code=exited, status=1/FAILURE)
Main PID: 1234 (code=exited, status=1/FAILURE)
CPU: 5ms
状态检测返回的排障关键信息:
auditctl -s
实测回显:
Error sending status request (Operation not permitted)
审计日志中留下的事件(抄录原始行):
type=DAEMON_START msg=audit(...): op=start ver=3.0.7 format=enriched kernel=6.8.0-... auid=4294967295 ... res=yes
type=DAEMON_ABORT msg=audit(...): op=set-enable ... res=failed
处理结论:
- ⚠️ 以上
Operation not permitted/Active: failed (Result: exit-code)/type=DAEMON_ABORT op=set-enable res=failed表明当前内核不提供 audit 能力,而非 auditd 本体或配置问题。需在支持 audit 或具备相应内核能力的真实环境运行。 - 部署步骤:先在目标机执行
auditctl -s,返回正常状态即具备条件; - 若返回 Operation not permitted,请更换具备内核 audit 支持(CONFIG_AUDIT 及相应能力)的环境或内核参数后再启用审计。
九、注意事项
- ⚠️ 运行前提是内核 audit 支持:部署前务必先执行
auditctl -s确认内核支持;受限/虚拟化内核上审计无法工作(详见 8.4 节),这不是配置能解决的。 - ⚠️ 临时规则 vs 永久规则:
auditctl装载的规则是临时的,重启即失效;生产环境必须写入/etc/audit/rules.d/并用augenrules --load持久化,否则审计规则依赖人工每次启动后补灌。 - ⚠️ -e 2 锁定是「银弹」也是「双刃剑」:
auditctl -e 2会将审计启用并锁定,锁定期内任何规则变更被拒绝,需要重启才能解锁。多人协作环境请谨慎使用,避免运维被锁住无法调整规则。 - ⚠️ 规则文件以键分类:用
-k给不同规则打键(identity/execve/sshd 等),ausearch/aureport 才能按业务快速过滤,避免在海量日志里大海捞针。 - ⚠️ 日志增长与空间动作:默认 max_log_file=8MB 且 ROTATE 轮转,繁忙系统注意监控磁盘;space_left/admin_space_left 触发 SYSLOG/SUSPEND 时要及时扩容,避免审计静默挂起留下盲区。
- ⚠️ loginuid 保护:内核默认 loginuid 只可写一次,配合
--loginuid-immutable可进一步防攻击者覆盖自己的审计身份;撤销该能力需谨慎。 - ⚠️ ENRICHED 格式:默认附件解释文本,检索时请配合
ausearch -i获得可读输出;若追求极致存储紧凑可按需改 raw。 - ⚠️ 性能影响:对高频路径(如 execve 全量、高流量目录)加规则会产生事件风暴并占用 CPU/磁盘。先用
-r限速或仅监视关键文件(/etc/passwd、sshd_config、sudoers 等),再按需扩大覆盖。 - ⚠️ 日志即证据:审计日志权限应保持严格,作为取证依据时避免提前清理或手工截断;确需归档时使用审计自带的轮转/remote 分发机制。
十、常见问题(FAQ)
10.1 auditctl -s 返回 operation not permitted 怎么办?
表示当前内核不提供 audit 能力(受限/虚拟化内核),无法在此时启用审计。按 8.4 节核验 journal 与审计日志(Active: failed (Result: exit-code)、op=set-enable ... res=failed),并切换到具备内核 audit 支持的运行环境。
10.2 审计服务启动失败且日志出现 DAEMON_ABORT 是什么原因?
通常是审计内核握手失败,对应 type=DAEMON_ABORT msg=audit(...): op=set-enable ... res=failed,同为内核不提供 audit 所致。排查顺序:
systemctl status auditd
journalctl -u auditd
auditctl -s
10.3 动态添加的规则重启后消失了?
这是正常的——auditctl 只作用当前运行态。需把规则写入 /etc/audit/rules.d/ 目录后执行 augenrules --load,再重启 auditd 服务使其持久化生效。
10.4 如何查看某账号登录失败记录?
aureport -au --failed -ts today
或按用户精确检索:
ausearch -ua <用户名> -m USER_LOGIN -i
10.5 如何知道哪些系统调用被执行失败(风险评估)?
aureport -s -i --summary
查看 failures 列;再定位具体失败事件:
ausearch -sv failed -i
10.6 审计日志增长过快怎么办?
- 收紧规则——只监视关键文件而非全量 execve;
- 用
-r <rate>对高频规则限速; - 保持 max_log_file/num_logs 的 ROTATE 配置,必要时增大 max_log_file 或接入 remote 分发做集中存档。
10.7 如何向内核写一条测试审计消息验证链路?
auditctl -m "audit test message"
随后 ausearch -ts today -i | tail 应能看到对应用户态消息事件。
10.8 如何把审计事件送到 syslog?
编辑 /etc/audit/plugins.d/audisp-syslog.conf,把 active = no 改为 active = yes,如需指定级别可设置 args = LOG_INFO,保存后重启 auditd:
systemctl restart auditd
10.9 满载与磁盘写满时审计会怎样?
按默认配置,磁盘写满或 I/O 错误时 disk_full_action=disk_error_action=SUSPEND 挂起审计(事件丢失但保留磁盘),目录低空间时先走 SYSLOG 告警。应尽早扩容或用 ROTATE 及时滚动,避免长期挂起造成审计盲区。
10.10 已设置规则为何 ausearch 查不到事件?
- 确认事件类型:部分规则对应的事件类型要匹配(如 -w 产生 CONFIG_CHANGE/WATCH、-S execve 产生 SYSCALL);
- 确认时间范围与键:ausearch 默认无状态下全量,但建议显式
-ts today与-k配合; - 确认日志轮转后是否切换到旧日志:可用
-if /var/log/audit/audit.log.N指定文件,或用--input-logs读取归档。
十一、卸载方式
11.1 卸载 auditd(含插件)
apt-get purge -y auditd audispd-plugins
实测说明:purge 会删除程序、systemd 单元链接与由包创建的相关配置;如需保留配置可用 apt-get remove(不 purge)。纯卸载动作本次未反复实测,命令符合 dpkg 常规行为,执行前请自行确认。
清理残留(手工确认后删除):
rm -rf /var/log/audit
rm -rf /etc/audit
11.2 卸载后确认
systemctl is-active auditd
预期输出(此环境无该单元时不输出或提示不存在),确认服务已不再运行且随后可移除单元链接:
systemctl disable auditd
十二、参考链接
- linux-audit 项目文档:https://github.com/linux-audit/audit-documentation
- Ubuntu auditd 手册页:man auditd(8) / man auditctl(8) / man auditd.conf(5) / man ausearch(8) / man aureport(8)(在线:https://manpages.ubuntu.com/manpages/jammy/en/man8/auditd.8.html)
- Ubuntu auditd 包页:https://packages.ubuntu.com/jammy/auditd
- Ubuntu audispd-plugins 包页:https://packages.ubuntu.com/jammy/audispd-plugins
- Ubuntu 22.04 官方服务器文档:https://ubuntu.com/server/docs