以安全方式运行Docker

8
我知道docker守护进程需要以root身份运行,因此我听说这可能会带来一些安全问题,例如如果容器受到攻击者的攻击,则攻击者可以更改主机的系统文件。

在遭受攻击的情况下,有什么预防措施可以减轻损失?

运行docker守护进程时应该注意什么实践?我考虑使用vagrant启动虚拟机,在虚拟机中运行docker。


这对我来说并不像是一个编程问题...也许Unix/Linux SE,或者security SE,或者如果有针对您的Linux发行版的特定SE(如果有,例如这个)会更好。不确定哪里最有可能得到一个好的答案,所以浏览一下他们与docker相关的问题(如果您在其他地方提问,请删除此问题,避免在SE网站之间重复)。 - hyde
@hyde 已经明白了。我能否转移问题而不是重新发布它? - jkris
3
这绝对涉及编程。这里的“预防措施”和“实践”指的是程序的设置和安装方式。如果可以的话,我会反对关闭它。 - Wolfgang Fahl
2个回答

6
主要了解Docker安全实践的信息来源是关于"Docker安全"页面。

只有信任的用户才应该被允许控制您的Docker守护程序。这是一些强大的Docker功能的直接结果。

具体来说,Docker允许您在Docker主机和guest容器之间共享目录;并且它允许您这样做而不限制容器的访问权限。

如果您公开了REST API,则应通过https进行。

最后,如果您在服务器上运行Docker,则建议您在服务器中仅运行Docker,并将所有其他服务移至由Docker控制的容器中

有关VM,请参见"Docker容器真的安全吗?"

最大的问题是Linux中的所有内容都没有命名空间。目前,Docker使用五个命名空间来更改进程对系统的视图:进程、网络、挂载、主机名、共享内存。

虽然这些为用户提供了一定级别的安全性,但绝非全面,如基于内核的虚拟机(KVM)
在KVM环境中,虚拟机中的进程不直接与主机内核通信。它们没有任何访问内核文件系统(如/sys/sys/fs/proc/*)的权限。


3

以下是几项从安全角度遵循的最佳实践:

  1. 优先选择最小化的基础镜像:您选择的基础镜像可能存在漏洞,在选择基础镜像之前,可以查找安全漏洞。选择最小的基础镜像可能会确保漏洞较少。
  2. 最小化权限:如果在Dockerfile中没有指定用户,则默认情况下使用root特权运行容器。为限制访问权限,请在 docker image 中创建专用用户和用户组。
  3. 对镜像进行签名和验证:我们在生产环境中运行docker镜像,因此在使用之前身份验证docker镜像非常重要。您应该对docker镜像进行签名,并在运行之前进行验证。
  4. 使用安全软件和 linters :使用安全软件扫描 Docker 镜像中的任何漏洞,您也可以使用 linter 对 Dockerfile 进行静态分析,并在存在安全漏洞时发出警告。
  5. 不要将敏感信息泄露到 Docker 镜像中:秘密必须保留在 Dockerfile 之外。如果复制有关秘密的信息,则它们将缓存在中间docker容器上,为避免此问题,您可以使用多阶段构建或docker秘密命令。

致谢:感谢Liran Tal和Omer Levi Hevroni的博客。我从中学到了这些最佳实践,请访问该网站获取更多细节和其他的最佳实践。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接