如何为特定容器创建和使用特定的SELinux策略?

时间:2018-02-22 23:02:20

标签: security docker selinux

我有一个特定的容器,我需要在其中挂载/ proc文件系统,这通常由SELinux支持,原因可以理解。我想创建一个正常的SELinux策略的修改,允许这个特定的标签,然后让Docker运行一个特定的容器,我用这个策略而不是普通的system_u:system_r:container_t:s0:c540,c856上下文创建一个新的上下文。 / p>

这可能吗?怎么样?我甚至找不到禁用从system_u:system_r:container_t:s0:c540,c856上下文中挂载/ proc的策略文件的源代码。我该如何安装?

我现在有一个策略文件,重新启用所有容器的/ proc挂载,这不是我想要的。但我不知道如何写出我真正需要的东西。而且我不知道如何让Docker在不同的环境中运行。这是我所拥有的政策文件过于宽泛:

gen_require(`
        type proc_t;
        type tmpfs_t;
        type container_t;
        class filesystem unmount;
        class filesystem mount;
        class filesystem remount;
        class dir mounton;
        class dir proc_t;
')

#============= container_t ==============
allow container_t proc_t:filesystem unmount;
allow container_t proc_t:filesystem mount;
allow container_t proc_t:filesystem remount;
allow container_t tmpfs_t:filesystem unmount;
allow container_t proc_t:dir mounton;

具有不同缺点的不同答案是:

docker run --security-opt label:disable

这将禁用该容器的所有SELinux检查。有section in the Docker manual that talks about the various valid arguments for --security-opt, including SELinux related ones

因此,我目前的选择是,禁用所有容器的/proc相关检查,或禁用特定容器的所有检查。使用label:参数,你也可以为容器设置一个特定的SELinux上下文,所以如果我知道如何创建一个新的SELinux上下文,就像其他的一样,除了我指定的一些东西,我可以得到我想要的东西。

此外,这个问题与我之前在ServerFault上提出的另一个问题有关:How do I mount a private /proc inside a namespace inside a Docker container?

1 个答案:

答案 0 :(得分:1)

请查看Dan Walsh出色的blog post。它描述了如何创建自己的selinux策略,该策略扩展了容器的标准selinux策略。