SELinux 策略改坏了?
自定 SELinux 策略装坏后系统异常的处理:先切 permissive 止血、定位坏模块重打包重装、最后恢复 enforcing,给完整恢复流程。
简短答案
策略装坏(semodule -i 报错、装完策略服务起不来)的标准动作是三步:先临时切 permissive 止血,再卸掉坏模块、重新打包重装,最后回 enforcing。记住:permissive 只是止血,不是长期方案。
现象对照表
| 现象 | 说明 |
|---|---|
semodule -i 报策略加载失败 |
自定义包与基线策略版本不匹配 |
| 装完策略某服务起不来 | 自定义规则把该服务的合法访问挡了 |
getenforce 显示 Permissive |
之前止血后忘了改回 enforcing |
| 日志大量 denied 但业务正常 | 处于 permissive,只记录不拦截 |
排查步骤
# 看当前模式与策略版本
getenforce
rpm -q 策略包名 # 策略包名以系统实际安装为准
# 止血:切 permissive(重启不生效则只改内存态)
setenforce 0
# 定位:看拒绝记录
ausearch -m av -ts recent | tail -30
journalctl -g since today | grep -i denied
# 修复:卸坏模块 → 重打包重装 → 回 enforcing
semanage module -r 模块名
semodule -i 模块名.pp
setenforce 1
切 permissive 前先把
/etc/selinux/config改回 enforcing 的待办写进任务单,避免止血忘恢复。
处理办法
- 策略包版本不匹配:在基线系统上重新打包(先
semodule -p核对再重编);基线参考 服务器 V11 条目 的发行说明; - 规则过严:用
semanage收窄到具体服务与端口,不做整域放行; - 标签错乱:
semanage fcontext补规则后执行restorecon -R 目录; - 整系统恢复:介质取 银河麒麟镜像列表,按 Rufus 启动盘条目 重写 U 盘。
操作小结
- 先 permissive 止血,别硬顶 enforcing 排查;
- 用 ausearch 找具体拒绝项;
- 模块先 r 再 i,装完回 enforcing 验证;
- 止血后把 config 恢复项排进计划,防止遗忘。