3. 环境准备与工具安装:auditd 配置、ausearch 使用、setroubleshoot 工具

在排查 SELinux 引发的渲染管道延迟问题时,正确的环境准备与工具链部署是数据采集的基础。本章围绕“数据采集”环节,完成 auditd 的安装与策略配置、ausearch 的查询规则定义,以及 setroubleshoot 套件的部署。这三个工具将构成从原始审计日志→可读事件摘要→排障建议的转换管线。

排查起点判断规则

若系统未安装 auditd 或 setroubleshoot-server,以下数据采集流程将直接失败。
安装后通过 systemctl status auditd 确认守护进程状态,若状态为 active (running) 则进入数据采集就绪状态。

3.1 工具架构与数据流

本节先建立整体链路认知,便于后续章节按图索骥。三个工具在排查流程中的角色如下表所示。

工具组件 包名 数据采集中的角色 输出特征
auditd 守护进程 auditd / audit-libs 内核态审计事件采集、缓冲与落盘 /var/log/audit/audit.log(二进制/文本混合)
ausearch 查询工具 audit (同包) 对已落盘审计日志进行条件过滤与提取 结构化事件文本(含 avc: denied 等关键字段)
setroubleshoot 套件 setroubleshoot-server
setroubleshoot-plugins
实时分析审计事件、生成可读警告和排障建议 通过 sealert 命令输出 SELinux 问题分析与建议命令
环境准备与数据采集流程 auditd 安装与启动 setroubleshoot 安装 安装后验证 配置规则文件 /etc/audit/rules.d/*.rules 启动 auditd 与 setroubleshoot 服务 实时审计事件采集 ausearch / sealert 输出

3.2 auditd 安装与配置

auditd 负责捕获内核发出的所有 AVC(Access Vector Cache)拒绝事件。安装和配置按如下步骤执行。

3.2.1 安装与基础配置

# 安装 auditd 及工具集
yum install -y audit audit-libs

# 设置 auditd 开机自启并立即启动
systemctl enable auditd
systemctl start auditd

配置重心在于规则文件。建议为渲染管道相关二进制文件添加专用规则,避免审计溢出淹没关键事件。

# 创建自定义规则文件:/etc/audit/rules.d/render-pipe.rules
# 监控渲染相关二进制文件的 SELinux 上下文访问
-w /usr/bin/render-engine -p rwxa -k render_avc
-w /etc/render-pipe.conf -p wa -k render_avc

# 重新加载规则
auditctl -R /etc/audit/rules.d/render-pipe.rules

实践判断规则

多用于初始发现:若渲染管道延迟出现频率低且无明显内核错误,应优先扩大 auditd 规则覆盖范围,而非直接启用全系统审计。
关键指标:规则行数 ≤ 20 条时审计性能几乎无影响;超过 100 条则可能造成日志洪泛。

3.2.2 确认 auditd 运行状态

# 检查守护进程是否正常运行
systemctl status auditd

# 查看当前加载的审计规则数量
auditctl -l | wc -l

# 检查审计日志是否在写入(观察最后一行时间戳)
tail -1 /var/log/audit/audit.log

3.3 ausearch 查询工具使用

ausearch 是对 audit.log 进行条件过滤的核心工具。针对渲染管道延迟场景,重点过滤 avc 拒绝事件和特定 key(如 render_avc)。

3.3.1 基础查询模式

# 查询所有 AVC 拒绝事件
ausearch -m avc --start today

# 按自定义 key 过滤
ausearch -k render_avc --start 10:00 --end 11:00

# 按类型过滤:仅显示 denied 事件
ausearch --message AVC --interpret

3.3.2 渲染管道延迟专用查询表

排查场景 ausearch 命令 输出示例片段
某时间段内所有拒绝 ausearch -m avc --start "2024-03-15 09:30" --end "2024-03-15 10:30" type=AVC msg=audit(1710480600.123:456): avc: denied { write } for pid=1234 comm="render-engine"
针对特定可执行文件 ausearch -c render-engine type=AVC msg=audit(1710480600.123:456): exe="/usr/bin/render-engine"
按源上下文过滤 ausearch --subject system_u:system_r:render_t scontext=system_u:system_r:render_t:s0
关联时间窗口与 Syscall ausearch -m avc --syscall open,write syscall=open flags=O_WRONLY

数据采集避坑规则

多用于深度审查:ausearch 的 --interpret 参数可将数值 ID 转换为可读字符串,但会降低输出速度。在高速采集 30 分钟内的事件时,建议不加 --interpret 先做原始采集,再通过 aureport 做二次解析。

3.4 setroubleshoot 工具套件

setroubleshoot 提供实时分析能力,将 audit.log 中的原生事件转换为人类可读的警告和修复命令,极大缩短原因定位时间。

3.4.1 安装与启动

# 安装 setroubleshoot 服务端及插件
yum install -y setroubleshoot-server setroubleshoot-plugins

# 启动服务并设为开机自启
systemctl enable setroubleshoot
systemctl start setroubleshoot

3.4.2 sealert 使用流程

# 查看最近生成的 SELinux 警告摘要
sealert -l "*"

# 查看某条特定警告的完整分析(UUID 从警告列表获取)
sealert -l 6c5b3c91-2f4a-4e7f-8a1d-2b3c4d5e6f7a

# 实时监控模式(持续输出新产生的警告)
sealert -w

3.4.3 setroubleshoot 输出解读表

输出字段 内容示例 排查价值
SELinux is preventing /usr/bin/render-engine from read access on the file /var/render/cache/data.bin 直接指出禁止操作目标、类型和对象
Suggested command ausearch -m avc -c render-engine 提供 au search 精确查询模板
Possible solution restorecon -v /var/render/cache/data.bin 给出立即修复的参考命令
Plugin used file_context 区分问题类型(文件上下文/端口绑定/域切换等)

关键判断规则

当 setroubleshoot 输出 “Plugin used: file_context” 且建议命令为 restorecon 时,应优先执行修复后复测;若问题仍持续,则需进入策略定制环节(第 5 章)。
若 setroubleshoot 输出为空但渲染延迟继续发生,说明审计规则未捕获到相关事件,需返回 3.2 节重新配置 auditd 规则文件。

3.5 工具链路验证

完成三个工具的安装配置后,通过以下链路验证整个数据采集管道是否就绪。

# 1. 触发一条测试拒绝事件(需 root)
touch /var/render/test_avc
chcon -t httpd_sys_content_t /var/render/test_avc
cat /var/render/test_avc  # 预期出现 Permission denied

# 2. 使用 ausearch 查询
ausearch -m avc --start recent | grep test_avc

# 3. 使用 sealert 查看是否产生警告
sealert -l "*" | grep test_avc

# 4. 确认日志落盘
tail -5 /var/log/audit/audit.log