Ubuntu 上 SELinux 与云部署实践指南
一 关键认知与取舍
二 在 Ubuntu 上启用与日常管理 SELinux
sudo apt update && sudo apt install selinux-basics selinux-policy-default auditd/etc/selinux/config,设置 SELINUX=permissive(建议先宽容模式验证)sudo selinux-activatesudo rebootsudo touch /.autorelabel && sudo reboot(确保新策略标签生效)sestatus、getenforcesudo setenforce 0(Permissive),sudo setenforce 1(Enforcing)sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" && sudo restorecon -Rv /var/www/htmlsudo semanage port -a -t http_port_t -p tcp 8080sudo ausearch -m avc -ts recentgrep avc /var/log/audit/audit.log | audit2allow -M mypol && sudo semodule -i mypol.pp三 云上部署的常见场景与建议
| 场景 | 推荐 SELinux 做法 | 关键注意点 |
|---|---|---|
| 通用 Ubuntu 服务器(非容器) | 建议保持或迁移到 Enforcing,按服务逐步定制策略 | 先 Permissive 验证,利用 audit2allow 与 semanage 逐步放行,避免一次性放宽过多权限 |
| Kubernetes 节点 | 入门/兼容性需求可用 Permissive;生产优先定制策略以恢复 Enforcing | 与容器网络、卷挂载、主机路径访问相关的拒绝需通过端口/类型/布尔值精细化放行 |
| 云迁移/迁云工具 | 迁移前可 临时关闭 以简化访问;迁移完成后恢复并加固 | 迁移工具完成后再启用 SELinux,按需设置上下文与端口标签,避免业务中断 |
上述取舍与做法可兼顾 兼容性 与 安全基线;在 K8s 环境中,优先通过策略定制而非长期关闭来解决问题。
四 故障排查与回退
sestatus、getenforcesudo ausearch -m avc -ts recentgrep avc /var/log/audit/audit.log | audit2allow -M mypol && sudo semodule -i mypol.ppsudo setenforce 0(Permissive)/etc/selinux/config,设 SELINUX=permissive 或 SELINUX=disabled,必要时重启sudo touch /.autorelabel && sudo reboot 以完成全量重标记五 云侧安全与最小暴露面