gpt4 book ai didi

ubuntu - Docker 在 ubuntu 上使用 SELinux 运行违反约束

转载 作者:行者123 更新时间:2023-12-02 18:33:21 24 4
gpt4 key购买 nike

在 Ubuntu 14.04 上,我用 SELinux 运行 Docker,据我所知,Docker 会读取 $Selinux-Root-Dir/default/contexts/lxc_contexts。但是我找不到这个文件,所以我创建了这个文件并放了一些内容如下:

process = "system_u:system_r:svirt_lxc_net_t:s0"
content = "system_u:object_r:virt_var_lib_t:s0"
file = "system_u:object_r:svirt_lxc_file_t:s0"
sandbox_kvm_process = "system_u:system_r:svirt_qemu_net_t:s0"
sandbox_lxc_process = "system_u:system_r:svirt_lxc_net_t:s0"

然后我用 Selinux 的许可模式运行 Docker,docker -dD --selinux-enabled=falsedocker run -it --rm ubuntu/bin/bash

最后我想用audit2allow生成一个*.te和*.pp文件,我执行 cat/var/log/audit/audit.log | audit2allow -M container,但它说
编译失败:
container.te:41: 第 41 行标记“mlsconstrain”处出现错误“语法错误”:
#约束规则:
mlsconstrain chr_file { create relabelto } ((h1 dom h2 -Fail-) and (l2 eq h2) );约束被拒绝
/usr/bin/checkmodule:解析配置时遇到错误
/usr/bin/checkmodule:从 container.te 加载策略配置

我cat了container.te,内容是:
#!!!!此 avc 违反约束。您需要修改源或目标类型的属性以允许此访问。
#约束规则:
mlsconstrain chr_file { create relabelto } ((h1 dom h2 -Fail-) and (l2 eq h2) );约束被拒绝
mlsconstrain chr_file { relabelfrom } ((h1 dom h2 -Fail-) );约束被拒绝
....
# 可能的原因是源级别(s0)和目标级别(s0:c96,c879)不同。
我猜 docker 使用 s0 运行,但它想将 docker 的 rootfs 文件系统重新标记为 (s0:c96,c879) 并发生此错误。

所以我的问题:

容器的类型是否错误?如何关闭此约束或如何解决此问题?

最佳答案

我不知道您的 container.te 文件的第 41 行。一般来说,“语法错误”表示缺少 selinux 类型或未知的 selinux 接口(interface),这意味着问题出在不同的地方。

但是我注意到了一些事情:

  • Docker Daemon 必须运行 --selinux-enabled=true 以支持 SELinux
  • 要创建一个新的 selinux 策略模块,您需要所有这些文件:.te、.fc 和 .if。查看Debian how-to一个最小 SELinux 政策的例子。
  • 通过使用 cat/var/log/audit/audit.log | audit2allow -M container 你处理所有记录的行。最好只将需要的行复制到新文件中。
  • s0 是级别而不是标签。而“重新标记”意味着改变类型。参见 labeling files .
  • 在运行时 SELinux(不是 docker 本身)将重新标记 docker 守护进程类型 (docker_t) 和正在运行的容器 (svirt_lxc_net_t)。
  • Docker 默认更改文件类别(即 s0:c96、c879)以将运行的容器彼此分开。

默认情况下,Ubuntu 预装了 AppArmor,如果你想使用 SELinux,你必须先删除/禁用它。 Ubuntu 和 Debian 没有为 SELinux 提供 Docker 策略。

可能的解决方案:

  • 在 Ubuntu 上使用 AppArmor(但我不知道是否有现成的 Docker 配置文件)。
  • 在 Ubuntu 上为 SELinux 构建您自己的 Docker 策略。参见 Fedora-Cloud Docker SELinux政策,但有很多依赖关系,即 svirt_lxc_net_t 来自 virt.te
  • 使用 Fedora,它将开箱即用地与 SELinux 和 Docker 一起工作,包括提到的文件 lxc_contexts

关于ubuntu - Docker 在 ubuntu 上使用 SELinux 运行违反约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30500346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com