iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
DevOps

以 Docker 為始的多種開源服務初探系列 第 30

Day 30 Docker 的使用安全

若要長期穩定的使用服務,了解其安全性是必要的。畢竟世上沒有 100% 安全的軟硬體,總是會存在一些漏洞在往後被有心人士給發現。一般而言,Docker 被認為安全的第一直覺是因為每個容器會有一個「隔離」的環境。

安全性

Namespace

Docker 的容器環境能夠實現「隔離」,主要是仰賴於 Linux 所提供的 Namespace 機制來實現。不過容器間以及容器與宿主間的隔離,其實並沒想像中的徹底。例如當你要在容器內進行一些指令操作,這還是得仰賴於 Host Linux 系統中的 /sys 來獲取相關訊息。簡言之,當你在 docker 容器中修改了這些沒被 Namespace 區隔的目錄和模組,會同步修改到 Host Linux 的內容。

Capabilities

容器內的環境,會是「輕量化且受到不小限制」的。因為其背後的實作,部分會需要 Host 的 root 權限。若這個 root 權限遭到濫用,那就失去了「隔離且不影響 Host」的意義。在預設情況下, docker 是關閉以下內容的:

  • 拒絕所有的 mount 操作
  • 拒絕部分文件系統的操作,像是更改檔案擁有者
  • 拒絕模組加載
  • ...等等

CGroups

Docker 利用 CGroups 機制來實現對每個容器中關於 CPU、記憶體...等的限制。舉例來說,以下指令代表啟用一個 Ubuntu 最新版本的容器,限制其 CPU 為 2、記憶體為 200Mb

docker run -it --cpus="2" --memory="200m" ubuntu:latest /bin/bash

Docker Daemon

Docker 由映像檔建立一個容器,必定需要利用 root 權限啟用 daemon。如果駭客已能存取你的 Host 主機,那這些操作就不是難事。不過在 Host 主機能進行的操作更多,就無強烈使用容器的完成攻擊動作指令必要性。因此,利用 docker daemon 所開放的 port ( 預設為 2375,且無須認證 ) 的 API 來進行攻擊變成了一種可行的方式。因應之道為「在使用 API 來對 docker 進行操作之前,先行綁定一組 TLS 證書」

Docker Image 的安全

  1. 使用精簡版的 Image
    使用越為精簡的 Image 來生成容器或是打造自己的映像檔,都會使安全性提升許多。由 Snyk 所提供的報告指出,採用精簡版本的 node,都可以讓漏洞有效的下降不少。
    FromSynk

  2. 保持最小權限原則
    容器內的權限,預設都是用 root 啟動的。如果你想要避免這個情況,可以視情況加入較小權限的 User。


上一篇
Day 29 使用 docker-compose 來安裝 Wordpress
系列文
以 Docker 為始的多種開源服務初探30

尚未有邦友留言

立即登入留言