【发布时间】:2015-08-10 14:16:12
【问题描述】:
在 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 的 Permissive 模式运行 Docker,
docker -dD --selinux-enabled=false
和docker run -it --rm ubuntu /bin/bash
最后我想用 audit2allow 生成一个 *.te 和 *.pp 文件,
我执行cat /var/log/audit/audit.log | audit2allow -M container,但它说
compilation failed:
container.te:41:ERROR 'syntax error' at token 'mlsconstrain' on line 41:
#Constraint rule:
mlsconstrain chr_file { create relabelto } ((h1 dom h2 -Fail-) and (l2 eq h2) ); Constraint DENIED
/usr/bin/checkmodule: error(s) encountered while parsing configuration
/usr/bin/checkmodule: loading policy configuration from container.te
我发现了 container.te,它的内容是:
#!!!! This avc is a constraint violation. You would need to modify the attributes of either the source or target types to allow this access.
#Constraint rule:
mlsconstrain chr_file { create relabelto } ((h1 dom h2 -Fail-) and (l2 eq h2) ); Constraint DENIED
mlsconstrain chr_file { relabelfrom } ((h1 dom h2 -Fail-) ); Constraint DENIED
....
# Possible cause is the source level (s0) and target level (s0:c96,c879) are different.
我猜 docker 使用 s0 运行,但它想将 docker 的 rootfs 文件系统重新标记为 (s0:c96,c879) 并发生此错误。
所以我的问题:
是容器的类型错误吗?如何关闭这个约束或者如何解决这个问题?
【问题讨论】: