2016-03-02 33 views
5

我們希望避免在dockerfiile中包含「yum update」,因爲它可能會根據docker映像的構建時間生成不同的容器,但顯然如果需要更新基礎系統,這可能會造成一些安全問題。最好的選擇是真的有一個組織範圍的基礎系統映像和更新?問題在於,每次應用安全更新時,都需要在整個組織中重建和部署所有應用程序。我該如何處理Docker容器中的安全更新?

對我來說似乎有點不同的一種變化,只是簡單地忽略容器內的安全更新,只在主機上擔心它們。這裏的思考過程是,攻擊者進入一個容器時,需要在主機上存在一個漏洞,docker-engine中的另一個漏洞才能進入容器,然後還有一個額外的漏洞來利用容器,這似乎是一系列令人難以置信的事件。隨着用戶命名空間和seccomp配置文件的引入,這似乎進一步降低了風險。

無論如何,我該如何處理容器內的安全更新,對CI/CD管道的影響最小,或者最好不必每隔一段時間重新部署整個基礎架構?

+1

你應該閱讀https://jpetazzo.github.io/2015/05/27/docker-images-vulnerabilities/ – user2915097

+0

這是一個夢幻般的資源!感謝您的文章 – jaumann

+0

今天上午,一位同事向我發送了這篇文章,似乎也解決了這個特定問題,無需重新部署整個基礎架構:https://www.hastexo.com/blogs/florian/2016/02/ 21/containers-just-because-everyone-else /#。VsmK2oUo_qD – jaumann

回答

1

通過引入中間更新層,可以減少構建的不可重複性。

創建這樣一個形象:

FROM centos:latest 
RUN yum update -y 

構建圖像,標記它,並將它推。現在你的構建不會改變,除非你決定改變它們。

您可以將您的其他Dockerfiles指向myimage:latest,以便在您決定這麼做時自動更新或指向特定版本。

我設置我的CI系統的方式是,基於更新的基礎映像的成功(手動)構建會觸發依賴它的任何映像的構建。

安全問題得到報告?檢查更新的軟件包是否可用,或在Dockerfile中進行臨時修復。觸發構建。 有一段時間,您將已經準備好部署所有應用的固定版本。

+0

我認爲這將是我們最終走向的方式。這並不理想,因爲當有補丁發生時它仍然需要全面的企業重新部署,但這可能只是我們必須忍受的事情。 – jaumann

1

大多數主要發行版都會經常發佈新的基本映像,其中包含必要的最新關鍵更新和安全修復程序。這意味着您可以簡單地拉取最新的基礎圖像以獲取這些修復並重建您的圖像。

但也因爲你的容器使用yum,你可以利用yum來控制你更新的包。 Yum允許您設置發行版本,以便您可以將更新固定到特定的OS版本。

例如,如果你使用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.conf'手冊頁。另外,如果您需要對更新進行更細粒度的控制,您可以查看'yum-plugin-versionlock'軟件包,但這很可能會超出您的需求。

相關問題