Security
如何保護 docker 主機不允許生根
我正在嘗試使伺服器上的 docker 更加安全。主要問題是大多數人說“如果一個人可以訪問 docker,那麼他們也可以是 root”,因為管理員很少這樣做,這不是您想要的。
詳細地說,他們可以使用
-v
並掛載/etc
到/mnt
容器中並更改影子文件並獲得對主機的訪問權限。他們也可以使用-d
, 或特權選項來做更多事情。所以基本上,我想“嘗試”和限制一些事情。
- 卷綁定掛載
- 特權
--add-cap
-d
(某些項目?)到目前為止我的想法:
- docker bash 腳本的別名,在其上使用 sudo 並正則表達式所有他們不應該做的事情。
- 打開遠端 api,保護它,也許用 nginx 和 nginx 中的正則表達式對其進行反向代理,這是他們不應該做的事情。
- 使用其他工具?Mesos/馬拉松/蜂群/造船廠/隨便
可選項目是使容器送出到 git 程式碼,並讓“檢查器”驗證內容
Dockerfile
並為它們創建圖像。然後簽署該映像並自動部署它。(但這不會再給他們太多的自由了)此外,刪除綁定卷也不是最好的。如果我們有一個 docker 外掛,上面寫著“你只能
/data
以使用者 X 的身份掛載”,那會簡單得多,其中那個USER
是Dockerfile
使用者 X。像docker-novolume-plugin這樣的東西已經是卷的一個很好的開始,雖然不限制綁定卷。
最後的問題是,我怎樣才能讓使用者以他們自己的使用者/docker 身份建構/拉取/執行 docker 映像,而不能 root 系統。不一定是完美的,只要它有效。
保護
docker
引擎需要關注許多不同的方面,而縱深防禦總是與安全****層有關。您列出的要求之一是限制使用者可以命令
docker
引擎執行的操作,這可能是最重要的要求之一,因為到目前為止,docker
引擎還沒有實現授權控制。您的選擇包括:
- 像Twistlock這樣的閉源解決方案,一個實現 RBAC 和策略控制以訪問
docker
API的項目- OpenShift Origin,一個開源項目,以安全約束和細粒度授權策略的形式實現基於角色的訪問控制。它相當容易部署,並且對開箱即用的解決方案有很大幫助。
我還建議研究引擎可以部署到的不同作業系統
docker
,並建議不要使用通用作業系統,而是使用專用作業系統,例如Atomic。Atomic 和 OpenShift 一起,將確保您還可以:
- 定期掃描您的圖像。
- 使用受信任的系統資料庫
- 為您的容器定義seccomp配置文件。這項技術的改進及其實施是整個世界正在進行的一項工作。
docker
- 刪除容器中應用程序不需要的功能。
- 使用 SELinux。列出的許多其他安全措施都有局限性,但 SELinux 在其他一切都失敗時可以很好地提供安全網路。一些例子:它將有助於限制對
docker
套接字的訪問,它將控制是否允許在容器之間共享文件描述符,它可以為每個容器/容器組分配不同的 MCS 級別,以將它們與主機和其他容器隔離。