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一样发达。 但总的来说,这不应该是你需要担心的事情。