CentOS SELinux 日志分析步骤
一 准备与定位日志来源
getenforce(返回 Enforcing/Permissive/Disabled),sestatus -v 查看详细状态与策略路径。aureport | grep AVC;实时查看:journalctl | grep AVC。yum -y install audit audit-libs setroubleshoot-server(或 setroubleshoot)。二 快速定位 AVC 拒绝
ausearch -m AVC,USER_AVC,SELINUX_ERR -ts <开始时间> -te <结束时间>(时间格式:YYYY-MM-DD HH:MM:SS)。ausearch -m AVC,USER_AVC,SELINUX_ERR -ts recent。ausearch -m AVC -p <PID>;按文件检索:ausearch -m AVC -f <文件路径>。grep -i "denied" /var/log/audit/audit.log 或 journalctl | grep AVC。type=AVC、avc: denied { getattr }comm="httpd"(进程名)、pid=...path="/var/myserver/services"(目标路径)scontext=system_u:system_r:httpd_t:s0(主体上下文)tcontext=unconfined_u:object_r:var_t:s0(目标上下文)tclass=file、permissive=0(是否宽容模式)三 解读 AVC 并给出修复方案
sealert -a /var/log/audit/audit.log。报告会给出高置信度修复步骤,例如:
restorecon -v <文件或目录> 恢复默认安全上下文。audit2allow 生成本地策略模块。audit2why < /var/log/audit/audit.log,输出拒绝原因及是否可通过策略模块放行。audit2allow -a -M mypolicy(生成 mypolicy.pp 与 mypolicy.te),semodule -i mypolicy.pp。httpd 访问 /var/myserver/services 被拒,AVC 显示 tcontext=...:var_t。restorecon -Rv /var/myserver/services,或设置正确 fcontext 后恢复:
semanage fcontext -a -t httpd_sys_content_t '/var/myserver/services(/.*)?'restorecon -Rv /var/myserver/services四 常见修复动作对照表
| 症状与线索 | 可能原因 | 推荐操作 |
|---|---|---|
| AVC 中目标上下文为 var_t、default_t 等非预期类型 | 文件/目录标签错误 | restorecon -Rv <路径>;必要时用 semanage fcontext 设置默认标签后恢复 |
| AVC 提示缺失 TE allow 规则 | 策略未覆盖该访问 | audit2allow -a -M <name> 生成模块,semodule -i <name>.pp |
| 新目录作为 DocumentRoot 或数据目录 | 默认 fcontext 不匹配服务类型 | 为目录设置正确 fcontext(如 httpd_sys_content_t),再 restorecon |
| 服务需监听非常规端口 | 端口类型未允许该服务 | semanage port -a -t <svc>_port_t -p tcp <端口> |
| 临时需要收集完整拒绝日志 | 生产环境不便立刻修复 | 将 SELinux 设为 Permissive 复现问题,定位后再恢复 Enforcing(修改 /etc/selinux/config 的 SELINUX=,重启;用 sestatus 确认) |
五 日志轮替与长期维护
ausearch -ts recent 快速筛查最新拒绝。restorecon 与 semodule -l | grep <name> 校验生效状态。