我正在尝试设置一个 LXC 容器进行测试,该容器运行 CentOS 7 并启用了 SELinux 以满足我尝试运行的测试的要求。
尽管我付出了所有努力,但我仍然无法让 getenforce 的输出返回除“Disabled”之外的任何内容。
该容器最初使用以下 lxc 命令创建:
sudo lxc-create -n <name> -t download -- -d centos -r 7 -a amd64
我已经将容器配置文件设置为使用 fedora.common.conf 来解决启动缓慢的问题,并执行了一些其他引导操作,但我认为没有什么会影响 SELinux。
我已尝试/检查以下内容以尝试启用它(可能还有一些我忘记的东西!)
- 在 /etc/selinux/config 中设置 SELINUX=enforcing
- 删除模板指向 /usr/sbin/selinuxenabled 的 /bin/false 符号链接并恢复原始文件
- 将 /selinux/enforce 设置为 1
- 安装了之前缺少的 selinux-policy-targeted 包
- 检查我的内核是否支持 SELinux
- 创建 /.autorelabel 以尝试重新标记文件系统,但在容器重新启动时似乎并未被拾取(该文件仍然存在)
- 尝试使用 fixfiles 手动重新标记 fs,但结果出现错误,提示 SELinux 未启用。
我还没有在主机上启用 SELinux,因为我确信我已经看到运行 CentOS7 的 docker 容器可以在主机不需要安装或运行 SELinux 的情况下运行它。
我已经在 Google 上搜索了所有我能想到的内容,并在这里搜索了一下,但没有找到任何其他建议来解释为什么我无法在这个 LXC 容器内启用 SELinux,有人可以帮忙吗?
我正准备放弃并创建一个 CentOS7 主机来运行我的 CentOS7 容器,但我真的希望这不是必要的。
答案1
Selinux
需要在你的物理主机上运行,因为Selinux
它在内核端运行并且你的容器与物理主机共享内核。
容器是在其他进程中运行的正常进程namespace
答案2
SELinux 没有命名空间,因此各个容器不能拥有自己单独的 SELinux 策略。虽然 SELinux 在主机上运行,但它在容器中始终显示为“禁用”。
有关详细信息,请参阅For more information, seeLinux 容器简介。
如果您正在测试 SELinux 策略,请使用完整的虚拟机。