温馨提示×

ubuntu selinux为何启动失败

小樊
61
2026-10-07 06:57:03
栏目: 智能运维

在 Ubuntu 上,SELinux 默认是不启用甚至经常“启动失败”的,这是“正常现象”,不是常规配置问题。下面分点说明原因和解决办法。


一、为什么 Ubuntu 上 SELinux 启动失败(常见原因)

1️⃣ Ubuntu 默认使用 AppArmor,而不是 SELinux

  • Ubuntu 官方安全模型是 AppArmor
  • SELinux 并未预装,也未默认启用
  • 即使你手动安装 SELinux,系统也常因冲突而无法进入 enforcing 模式

✅ 结果:

  • sestatus 显示 SELinux status: disabled
  • 或开机卡在 selinuxfs 挂载失败

2️⃣ 内核未启用 SELinux 支持

Ubuntu 官方内核:

  • ✅ 支持 SELinux(部分)
  • ❌ 但 默认未开启 security=selinux

查看:

cat /boot/config-$(uname -r) | grep SELINUX

如果看到:

# CONFIG_SECURITY_SELINUX is not set

说明内核不支持。


3️⃣ GRUB 没有指定 SELinux 启动参数

SELinux 需要内核参数:

security=selinux selinux=1

Ubuntu 默认是:

security=apparmor

4️⃣ 文件系统未打 SELinux 标签

即使内核支持:

  • 根分区没有 selinux 标签
  • 启动会失败或自动降级为 permissive

5️⃣ systemd 与 SELinux 冲突

Ubuntu 的 systemd 默认按 AppArmor 设计,SELinux 策略不完整时常导致:

  • 无法挂载 /sys/fs/selinux
  • 启动卡死或进入 emergency 模式

二、如何确认 SELinux 是否真的失败

sestatus

常见结果:

  • disabled → 根本没启用
  • permissive → 启用了但没强制
  • enforcing → 成功(Ubuntu 很少见)

三、Ubuntu 上“正确”启用 SELinux 的方式(不推荐生产)

⚠️ 官方不建议在 Ubuntu 上使用 SELinux

1️⃣ 安装

sudo apt install selinux selinux-basics selinux-policy-default

2️⃣ 启用

sudo selinux-activate

3️⃣ 修改 GRUB

sudo nano /etc/default/grub

改成:

GRUB_CMDLINE_LINUX="selinux=1 security=selinux"

然后:

sudo update-grub
sudo reboot

四、更现实的建议

✅ 如果你只是想要“强制访问控制”

  • ✅ 用 AppArmor(Ubuntu 原生)
  • ❌ 不要用 SELinux

✅ 如果你必须用 SELinux

  • 使用 RHEL / CentOS / Rocky / AlmaLinux
  • Ubuntu 不是 SELinux 的“原住民”

五、一句话总结

Ubuntu 上 SELinux 启动失败,不是你配置错了,而是 Ubuntu 本来就不是为 SELinux 设计的。

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • 是否必须上 SELinux
  • 用于什么场景(考试 / 合规 / 学习)

我可以给你最合适的具体方案。

0 踩