1. 程式人生 > >Docker入門教程(五)Docker安全

Docker入門教程(五)Docker安全

【編者的話】DockOne組織翻譯了Flux7的Docker入門教程,本文是系列入門教程的第五篇,介紹了Docker的安全問題,依然是老話重談,入門者可以通過閱讀本文快速瞭解。

我們必須高度重視開源軟體的安全問題,當開發者在使用Docker時,從本地構建應用程式到生產環境部署是沒有任何差異的(譯者注:作者的言外之意是更應該重視Docker的安全問題)。當Docker被越來越多的平臺使用的時候,我們需要嚴格保證Docker作為一個專案或者平臺的安全性。

因此,我們決定在Docker系列教程的第五篇來討論Docker安全性的相關問題以及為什麼會它們影響到Docker的整體安全性。由於Docker是LXC的延伸,它也很容易使用LXC的安全特性。

在本系列的

第一篇文章中,我們知道docker run命令可以用來執行容器。那執行這個命令後,Docker做了哪些具體的工作呢?具體如下:

  1. docker run命令初始化。
  2. Docker 執行 lxc-start 來執行run命令。
  3. lxc-start 在容器中建立了一組namespace和Control Groups。


對於那些不知道namespace和control groups的概念的讀者,我在這裡先給他們解釋一下:namespace是隔離的第一級,容器是相互隔離的,一個容器是看不到其它容器內部執行的程序情況(譯者注:namespace系列教程可以閱讀DockerOne上的

系列教程)。每個容器都分配了單獨的網路棧,因此一個容器不可能訪問另一容器的sockets。為了支援容器之間的IP通訊,您必須指定容器的公網IP埠。

Control Groups是非常重要的元件,具有以下功能:

  • 負責資源核算和限制。
  • 提供CPU、記憶體、I/O和網路相關的指標。
  • 避免某種DoS攻擊。
  • 支援多租戶平臺。

 

Docker Daemon的攻擊面

Docker Daemon以root許可權執行,這意味著有一些問題需要格外小心。
下面介紹一些需要注意的地方:

  • 當Docker允許與訪客容器目錄共享而不限制其訪問許可權時,Docker Daemon的控制權應該只給授權使用者。
  • REST API支援Unix sockets,從而防止了cross-site-scripting攻擊。
  • REST API的HTTP介面應該在可信網路或者VPN下使用。
  • 在伺服器上單獨執行Docker時,需要與其它服務隔離。


一些關鍵的Docker安全特性包括:

  1. 容器以非特權使用者執行。
  2. Apparmor、SELinux、GRSEC解決方案,可用於額外的安全層。
  3. 可以使用其它容器系統的安全功能。

 

Docker.io API

用於管理與授權和安全相關的幾個程序,Docker提供REST API。以下表格列出了關於此API用於維護相關安全功能的一些命令。
 

part-5-1.png



Docker系列教程的下一篇文章中我們將繼續探討前面第二篇文章中所討論的Docker命令的進階。