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 问题分析与建议命令 |
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