Ubuntu 管理 SELinux 规则的实用指南
一 前置说明与准备
- Ubuntu 默认使用 AppArmor 而非 SELinux。如确需使用 SELinux,需先安装组件并启用,且要知悉其在 Ubuntu 上的支持有限、与 RHEL/CentOS/Fedora 相比功能与生态并不完整。准备动作包括:更新索引并安装工具集(如 selinux-basics、selinux-policy-default、auditd、setools、selinux-policy-dev),启用 SELinux 启动参数(如执行 sudo selinux-activate),随后重启系统。以上步骤为后续策略管理的前提。
二 启用与基本配置
- 配置模式:编辑 /etc/selinux/config,设置 SELINUX=permissive(建议先宽容以观察日志),必要时设置 SELINUXTYPE=targeted;保存后重启。运行时可用 getenforce 查看当前模式,用 setenforce 0/1 在 Permissive/Enforcing 间切换(切换对当前运行有效,永久生效仍需配置文件与重启)。
- 常用状态与标签命令:用 sestatus 查看整体状态;用 ls -Z 查看文件/目录的 安全上下文;如需临时调整可用 chcon 修改上下文(例如将某文件标记为 httpd 可访问类型)。
三 策略管理常用操作
- 管理文件上下文与布尔值:使用 semanage fcontext -a -t 类型 ‘路径(/.*)?’ 定义路径的默认上下文,随后用 restorecon -Rv 路径 应用;查看/设置布尔开关用 getsebool/setsebool -P 布尔名 1/0(如 httpd_enable_homedirs)。这些操作用于在不改主策略的前提下,按路径与功能细粒度放行。
- 自定义策略模块:从拒绝日志生成模块(如 ausearch -m avc -ts recent | audit2allow -M my-custom),编译并加载(make -f /usr/share/selinux/devel/Makefile && sudo semodule -i my-custom.pp),最后用 restorecon 确保文件标签正确。此法是处理复杂或批量拒绝的常用路径。
四 日志分析与排错
- 定位拒绝事件:查看 /var/log/audit/audit.log 或使用 ausearch -m AVC -ts today 聚焦当日 AVC 拒绝;用 aureport -m avc 生成汇总报告。基于这些日志再用 audit2allow 生成最小必要规则,避免“过度放行”。
五 实用建议与风险提示
- 建议流程:先在 Permissive 观察一段时间 → 用日志生成最小规则 → 逐步切换到 Enforcing → 持续复核日志与业务可用性。
- 风险提示:错误策略可能导致服务异常甚至无法登录;生产环境务必在可回滚的维护窗口操作,并优先采用“最小权限”原则与模块化加载方式。
- 替代方案:若不需要 SELinux,可继续使用 AppArmor(Ubuntu 的默认 MAC 框架),其配置与维护成本通常更低,生态与工具链对 Ubuntu 更友好。