在 Ubuntu 上启用 SELinux 的可行路径
Ubuntu 默认启用的是 AppArmor,并非 SELinux。在 Ubuntu 上启用 SELinux 属于“可选方案”,可获得性取决于版本与仓库,功能支持相对有限,生产环境需充分评估与测试。
启用步骤
安装必要软件包
建议安装:基础工具 selinux-basics、默认策略 selinux-policy-default、策略开发包 selinux-policy-dev、审计与策略分析工具 auditd 与 setools。示例:
sudo apt update
sudo apt install selinux-basics selinux-policy-default auditd setools selinux-policy-dev
说明:不同版本仓库提供的包名与可用性可能不同,若提示找不到包,请先确认仓库配置与版本支持。
激活 SELinux 启动参数
执行激活脚本,使内核在启动时加载 SELinux:
sudo selinux-activate
该操作会为引导参数添加 security=selinux,确保系统以 SELinux 为 LSM 加载。
配置运行模式
编辑配置文件 /etc/selinux/config,设置模式为 permissive 或 enforcing:
SELINUX=permissive
SELINUXTYPE=default
说明:初次启用建议先设为 permissive(仅告警不阻断),验证无误后再切换为 enforcing。修改后需重启:sudo reboot。
验证运行状态
重启后检查:
sestatus(查看整体状态)
getenforce(查看当前模式:Enforcing/Permissive/Disabled)
若状态异常,请回到上一步确认配置文件与启动参数是否生效。
策略管理与故障排查
查看与调整布尔值
示例:允许 Apache 访问用户主目录
sudo setsebool -P httpd_enable_homedirs 1
说明:不同服务的布尔项名称与可用性会随策略包与版本变化。
查看安全上下文
文件:ls -Z /path/to/file
进程:ps -Z
用于核对标签是否正确,是定位访问被拒的第一步。
分析审计日志与生成策略模块
查看 AVC 拒绝日志:ausearch -m avc -ts recent
将拒绝转换为可读说明:ausearch -m avc -ts recent | audit2why
基于拒绝日志生成自定义模块:
grep myapp /var/log/audit/audit.log | audit2allow -M myapp
加载模块:sudo semodule -i myapp.pp
说明:自定义策略应与系统策略包保持兼容,避免冲突。
注意事项与替代方案
支持与兼容性
Ubuntu 对 SELinux 的支持为“可选/有限”,并非主线集成;若需要更完善的 SELinux 生态与工具链,优先考虑 RHEL/CentOS 等发行版。
启用顺序与风险控制
建议顺序:安装包 → selinux-activate → 设为 permissive → 重启验证 → 按需调整策略 → 切换 enforcing。
在变更前备份关键数据与现有安全配置,变更窗口内密切监控系统日志与服务可用性。