Linux SELinux更新后如何验证
小樊
34
2025-12-20 05:04:04
Linux SELinux更新后的验证清单
一 快速状态与版本核验
- 查看运行模式与内核策略加载情况:
- 命令:getenforce(返回 Enforcing/Permissive/Disabled)
- 命令:sestatus(关注输出中的 SELinux status、Current mode、Loaded policy name、Policy version、Loaded module list)
- 核对配置文件是否生效:
- 命令:cat /etc/selinux/config(确认 SELINUX=enforcing|permissive|disabled 与期望一致)
- 说明:
- 若 getenforce/ sestatus 显示 Disabled,通常意味着未启用或未加载策略,需要检查配置与是否重启。
- 在 RHEL/CentOS 上,SELinux 与系统版本/内核关联紧密,更新后通过系统更新完成;在 Ubuntu 上默认使用 AppArmor,若手动启用 SELinux,需确认已安装并加载策略。
二 策略与模块完整性检查
- 列出已加载策略模块并核对版本:
- 命令:semodule -l(确认关键模块如 targeted 存在且版本符合预期)
- 查看整体策略与内核策略版本:
- 命令:sestatus(关注 Policy version 与 Loaded policy name)
- 如更新了自定义模块,确认已正确编译并加载:
- 示例流程:checkmodule -M -m -o my_policy.mod my_policy.te → semodule_package -o my_policy.pp -m my_policy.mod → semodule -i my_policy.pp
- 说明:模块加载异常会导致服务启动失败或权限异常,需结合日志进一步排查。
三 审计日志与拒绝分析
- 检索最近的拒绝事件并解释原因:
- 命令:ausearch -m avc -ts recent | audit2why
- 观察是否有新产生的 AVC denied 日志,判断更新是否引入访问冲突:
- 命令:ausearch -m avc -ts recent
- 处置思路:
- 若仅为兼容性提示,可先在 Permissive 模式验证业务,再按建议生成或调整策略模块,最后回到 Enforcing。
- 使用 audit2allow 生成策略模块并加载(示例:ausearch -m avc -ts recent | audit2allow -M my_policy && semodule -i my_policy.pp)。
四 服务与端口上下文回归测试
- 重启关键服务并观察是否因策略导致启动失败或功能异常:
- 示例:systemctl restart sshd / nginx / httpd(按实际环境选择)
- 校验文件与目录上下文是否正确:
- 查看/修正上下文:semanage fcontext -l | grep ;必要时 semanage fcontext -a -t “(/.*)?”
- 应用上下文:restorecon -Rv
- 校验端口标签是否正确(以 http_port_t 为例):
- 查看/添加端口:semanage port -l | grep http_port_t;必要时 semanage port -a -t http_port_t -p tcp
- 说明:更新策略或系统后,文件/端口的默认上下文可能变化,回归测试可提前发现访问被拒问题。
五 常见问题与临时处置
- 从 Disabled 切换到 Enforcing/Permissive 需要重启系统后才能生效;仅修改 /etc/selinux/config 而不重启不会生效。
- 临时切换运行模式用于排障(无需重启):
- 命令:setenforce 0(切换为 Permissive)
- 命令:setenforce 1(切换为 Enforcing)
- 若更新后业务异常且需快速恢复,可短时切到 Permissive 定位问题,再回到 Enforcing 并完善策略。