在Docker中运行nginx时,我应该如何configurationSELinux

Docker的文档中有一篇关于Docker安全性的好文章: https : //docs.docker.com/articles/security/

但是,我并不清楚容器中的根特权进程是如何在主机系统中运行的,以及我应该如何configurationSELinux来处理进程在容器外“泄漏”的风险。

例如,我在一个容器中运行nginx,当我在容器外部执行“ps”时,我可以看到所有的nginx进程。

根7281 4078 0 01:36?  00:00:00 nginx:主进程nginx
 www-data 7309 7281 0 01:36?  00:00:00 nginx:工作进程
 www-data 7310 7281 0 01:36?  00:00:00 nginx:工作进程
 www-data 7311 7281 0 01:36?  00:00:00 nginx:工作进程
 www-data 7312 7281 0 01:36?  00:00:00 nginx:工作进程

这并不奇怪,因为这是Docker工作的方式 – 这不是虚拟化,虚拟机之外什么都不显示。 使用Docker,容器的进程在名称空间和有限权限内的主机操作系统上运行。 他们直接与主机内核通话。

在这种情况下,我相信我应该configurationSELinux来保护nginx进程而不是docker的进程,就像在没有docker的情况下运行一样。 那是对的吗?

另外,是否有任何特定的Dockerconfiguration更适合运行像nginx这样的web服务器?

假设你使用的是启用了SELinux的Docker(RHEL / CentOS 7和Fedora),那么除了确保SELinux在主机上启用并执行之外, 你不需要做任何事情 。

使用Docker或virsh创build的容器会自动分配SELinux策略中指定的SELinux上下文。

您可能需要检查您的容器进程运行的安全上下文。 为此,请将-Z选项添加到ps 。 例如:

 LABEL PID TTY STAT TIME COMMAND system_u:system_r:virtd_lxc_t:s0:c5,c342 26351 ? Ss 0:00 /sbin/init system_u:system_r:virtd_lxc_t:s0:c5,c342 26458 ? Ss 0:00 /usr/sbin/sshd -D 

请注意,SELinux本身并没有命名空间,因此您不能在容器中分别使用SELinux策略,就好像它们是独立的操作系统安装一样。

对于libvirtpipe理的容器来说,这看起来还没有像SELinux一样发达。 但总的来说,这不应该是你需要担心的事情。