这样就使得这个容器运行在比一般容器更严格的SELinux安全机制下。要注意的是,你也许要关注下审计日志,确认你的应用是否需要额外的SELinux放行规则。
你可以通过audit2allow命令添加这些规则,将这些规则追加到已有的 .te 文件中,然后重新编译安装。
# grep docker_apache_t /var/log/audit/audit.log | audit2allow >> docker_apache.te
# make -f /usr/share/selinux/devel/Makefile docker_apache.pp
# semodule -i docker_apache.pp
多级安全模式
目前,我们使用MCS分离以确保出容器并不允许交互或者与其他容器交互,除非他是通过网络。某些政府系统要求不同类型的政策MLS(多级安全)。使用MLS,你标记基于他们将被看见的数据级别的处理。MLS说,如果你的容器将被处理Topsecret数据,那么它应该运行在Topsecret.我们增加了选项到Docker,允许管理员设置的容器在特定的水平上运行。其中应该满足MLS系统的需求。
docker run -d --security-opt label:level:TopSecret --security
这将能使Docker容器两者都运行于交替类型,和水平上,并且会防止容器使用并不是在同一标签上的数据。通过鉴定,在这一点上这并没有消失,但是我们将愿意帮助第三方MLS用户建立解决方案。
调整空间在其他安全论坛上,我已经讨论了如何把命名空间(namespaces)可以被认为是一种安全机制,由于它会消除一个进程在系统(PID命名空间)上看到其他进程的能力。网络空间(network namespace)可以消除从你的命名空间看到其他网络的能力。IPC(进程间通信)命名空间具有阻止Container调用其它容器IPC的能力。
Docker现在已经有能力放松这些限制。你可以和容器共享主机命名空间:
--pid=host 让容器共享主机pid命名空间
--net=host 让容器共享主机网络命名空间
--ipc=host 让容器共享主机ipc命名空间
请注意,为了让上述的设置生效,让容器共享主机的PID或IPC命名空间, 我们还需要禁用SELinux权限分隔限制。
docker run -ti --pid=host --net=host --ipc=host rhel7 /bin/sh
你可能想要读有关这个主题的额外信息Super Privileged Containers。
Docker安装应用(CentOS 6.5_x64)
在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker