如何处理docker容器中的安全更新?

时间:2016-03-02 19:46:39

标签: security docker updates

我们希望避免包含" yum update"在dockerfiile中,因为它可以基于何时构建docker镜像生成不同的容器,但是如果需要更新基本系统,这显然会带来一些安全问题。真正拥有组织范围的基本系统映像并更新的最佳选择是什么?问题是,每次应用安全更新时,都需要在整个组织中重建和部署所有应用程序。

对我来说似乎有点变化,只是忽略容器内的安全更新,只担心它们在主机上。这里的思考过程是,对于攻击者进入容器,需要在主机上存在漏洞,docker-engine中的另一个漏洞才能进入容器,然后是另一个利用漏洞利用内容的漏洞。容器,这似乎是一系列令人难以置信的事件。随着用户命名空间和seccomp配置文件的引入,这似乎进一步降低了风险。

无论如何,我如何处理容器内的安全更新,对CI / CD管道的影响最小,或者理想情况下不必每隔一段时间重新部署整个基础架构?

2 个答案:

答案 0 :(得分:5)

您可以通过引入中间更新层来减少构建的不可重复性。

创建如下图像:

FROM centos:latest
RUN yum update -y

构建图像,标记并推送它。现在你的构建不会改变,除非你决定改变它们。

您可以将其他Dockerfile指向myimage:latest,以便在您决定执行此操作或指向特定版本时获得自动更新。

我设置CI系统的方式是,使用更新成功(手动)构建基本映像会触发构建依赖于它的任何图像。

是否报告了安全问题?检查更新的软件包是否可用,或者在Dockerfile中进行临时修复。触发构建。 有一段时间,您将准备好部署所有应用程序的固定版本。

答案 1 :(得分:1)

大多数主要发行版会经常发布新的基本映像,其中包含必要的最新关键更新和安全修复程序。这意味着您只需提取最新的基本图像即可获得这些修复并重建图像。

但是,由于您的容器使用yum,您可以利用yum来控制更新的包。 Yum允许您设置发布版本,以便将更新固定到特定的操作系统版本。

例如,如果您使用的是RHEL 7.2,则可能会有一个类似于以下内容的Dockerfile:

FROM rhel:7.2
RUN echo "7.2" > /etc/yum/vars/releasever
RUN yum update -y && yum clean all

这确保您将继续使用RHEL 7.2并且只接收关键软件包更新,即使您进行完整的yum更新也是如此。

有关可用yum变量或其他配置选项的更多信息,请查看' yum.conf'手册页。

此外,如果您需要更精细的控制更新,您可以查看&yum-plugin-versionlock'包裹,但这很可能会超出您的需求。