mirror of
https://github.com/yeasy/docker_practice.git
synced 2024-11-16 19:43:41 +00:00
27 lines
2.3 KiB
Markdown
27 lines
2.3 KiB
Markdown
## 內核能力機制
|
||
|
||
能力機制(Capability)是 Linux 內核一個強大的特性,可以提供細粒度的權限訪問控制。
|
||
Linux 內核自 2.2 版本起就支持能力機制,它將權限劃分為更加細粒度的操作能力,既可以作用在進程上,也可以作用在文件上。
|
||
|
||
例如,一個 Web 服務進程只需要綁定一個低於 1024 的端口的權限,並不需要 root 權限。那麽它只需要被授權 `net_bind_service` 能力即可。此外,還有很多其他的類似能力來避免進程獲取 root 權限。
|
||
|
||
默認情況下,Docker 啟動的容器被嚴格限制只允許使用內核的一部分能力。
|
||
|
||
使用能力機制對加強 Docker 容器的安全有很多好處。通常,在服務器上會運行一堆需要特權權限的進程,包括有 ssh、cron、syslogd、硬件管理工具模塊(例如負載模塊)、網絡配置工具等等。容器跟這些進程是不同的,因為幾乎所有的特權進程都由容器以外的支持系統來進行管理。
|
||
* ssh 訪問被主機上ssh服務來管理;
|
||
* cron 通常應該作為用戶進程執行,權限交給使用它服務的應用來處理;
|
||
* 日誌系統可由 Docker 或第三方服務管理;
|
||
* 硬件管理無關緊要,容器中也就無需執行 udevd 以及類似服務;
|
||
* 網絡管理也都在主機上設置,除非特殊需求,容器不需要對網絡進行配置。
|
||
|
||
從上面的例子可以看出,大部分情況下,容器並不需要“真正的” root 權限,容器只需要少數的能力即可。為了加強安全,容器可以禁用一些沒必要的權限。
|
||
* 完全禁止任何 mount 操作;
|
||
* 禁止直接訪問本地主機的套接字;
|
||
* 禁止訪問一些文件系統的操作,比如創建新的設備、修改文件屬性等;
|
||
* 禁止模塊加載。
|
||
|
||
這樣,就算攻擊者在容器中取得了 root 權限,也不能獲得本地主機的較高權限,能進行的破壞也有限。
|
||
|
||
默認情況下,Docker采用 [白名單](https://github.com/docker/docker/blob/master/daemon/execdriver/native/template/default_template.go) 機制,禁用 [必需功能](https://github.com/docker/docker/blob/master/daemon/execdriver/native/template/default_template.go) 之外的其它權限。
|
||
當然,用戶也可以根據自身需求來為 Docker 容器啟用額外的權限。
|