Docker服務(wù)端防護(hù)

2018-08-04 17:59 更新

運(yùn)行一個(gè)容器或應(yīng)用程序的核心是通過 Docker 服務(wù)端。Docker 服務(wù)的運(yùn)行目前需要 root 權(quán)限,因此其安全性十分關(guān)鍵。

首先,確保只有可信的用戶才可以訪問 Docker 服務(wù)。Docker 允許用戶在主機(jī)和容器間共享文件夾,同時(shí)不需要限制容器的訪問權(quán)限,這就容易讓容器突破資源限制。例如,惡意用戶啟動(dòng)容器的時(shí)候?qū)⒅鳈C(jī)的根目錄/映射到容器的 /host 目錄中,那么容器理論上就可以對(duì)主機(jī)的文件系統(tǒng)進(jìn)行任意修改了。這聽起來很瘋狂?但是事實(shí)上幾乎所有虛擬化系統(tǒng)都允許類似的資源共享,而沒法禁止用戶共享主機(jī)根文件系統(tǒng)到虛擬機(jī)系統(tǒng)。

這將會(huì)造成很嚴(yán)重的安全后果。因此,當(dāng)提供容器創(chuàng)建服務(wù)時(shí)(例如通過一個(gè) web 服務(wù)器),要更加注意進(jìn)行參數(shù)的安全檢查,防止惡意的用戶用特定參數(shù)來創(chuàng)建一些破壞性的容器

為了加強(qiáng)對(duì)服務(wù)端的保護(hù),Docker 的 REST API(客戶端用來跟服務(wù)端通信)在 0.5.2 之后使用本地的 Unix 套接字機(jī)制替代了原先綁定在 127.0.0.1 上的 TCP 套接字,因?yàn)楹笳呷菀自馐芸缯灸_本攻擊。現(xiàn)在用戶使用 Unix 權(quán)限檢查來加強(qiáng)套接字的訪問安全。

用戶仍可以利用 HTTP 提供 REST API 訪問。建議使用安全機(jī)制,確保只有可信的網(wǎng)絡(luò)或 VPN,或證書保護(hù)機(jī)制(例如受保護(hù)的 stunnel 和 ssl 認(rèn)證)下的訪問可以進(jìn)行。此外,還可以使用 HTTPS 和證書來加強(qiáng)保護(hù)。

最近改進(jìn)的 Linux 名字空間機(jī)制將可以實(shí)現(xiàn)使用非 root 用戶來運(yùn)行全功能的容器。這將從根本上解決了容器和主機(jī)之間共享文件系統(tǒng)而引起的安全問題。

終極目標(biāo)是改進(jìn) 2 個(gè)重要的安全特性:

  • 將容器的 root 用戶映射到本地主機(jī)上的非 root 用戶,減輕容器和主機(jī)之間因權(quán)限提升而引起的安全問題;
  • 允許 Docker 服務(wù)端在非 root 權(quán)限下運(yùn)行,利用安全可靠的子進(jìn)程來代理執(zhí)行需要特權(quán)權(quán)限的操作。這些子進(jìn)程將只允許在限定范圍內(nèi)進(jìn)行操作,例如僅僅負(fù)責(zé)虛擬網(wǎng)絡(luò)設(shè)定或文件系統(tǒng)管理、配置操作等。

最后,建議采用專用的服務(wù)器來運(yùn)行 Docker 和相關(guān)的管理服務(wù)(例如管理服務(wù)比如 ssh 監(jiān)控和進(jìn)程監(jiān)控、管理工具 nrpe、collectd 等)。其它的業(yè)務(wù)服務(wù)都放到容器中去運(yùn)行。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)