Docker內(nèi)核能力機制

2021-09-14 15:08 更新

能力機制(Capability)是 Linux 內(nèi)核一個強大的特性,可以提供細粒度的權(quán)限訪問控制。 Linux 內(nèi)核自 2.2 版本起就支持能力機制,它將權(quán)限劃分為更加細粒度的操作能力,既可以作用在進程上,也可以作用在文件上。

例如,一個 Web 服務(wù)進程只需要綁定一個低于 1024 的端口的權(quán)限,并不需要 root 權(quán)限。那么它只需要被授權(quán) net_bind_service 能力即可。此外,還有很多其他的類似能力來避免進程獲取 root 權(quán)限。

默認情況下,Docker 啟動的容器被嚴格限制只允許使用內(nèi)核的一部分能力。

使用能力機制對加強 Docker 容器的安全有很多好處。通常,在服務(wù)器上會運行一堆需要特權(quán)權(quán)限的進程,包括有 ssh、cron、syslogd、硬件管理工具模塊(例如負載模塊)、網(wǎng)絡(luò)配置工具等等。容器跟這些進程是不同的,因為幾乎所有的特權(quán)進程都由容器以外的支持系統(tǒng)來進行管理。

  • ssh 訪問被主機上ssh服務(wù)來管理;
  • cron 通常應(yīng)該作為用戶進程執(zhí)行,權(quán)限交給使用它服務(wù)的應(yīng)用來處理;
  • 日志系統(tǒng)可由 Docker 或第三方服務(wù)管理;
  • 硬件管理無關(guān)緊要,容器中也就無需執(zhí)行 udevd 以及類似服務(wù);
  • 網(wǎng)絡(luò)管理也都在主機上設(shè)置,除非特殊需求,容器不需要對網(wǎng)絡(luò)進行配置。

從上面的例子可以看出,大部分情況下,容器并不需要“真正的” root 權(quán)限,容器只需要少數(shù)的能力即可。為了加強安全,容器可以禁用一些沒必要的權(quán)限。

  • 完全禁止任何 mount 操作;
  • 禁止直接訪問本地主機的套接字;
  • 禁止訪問一些文件系統(tǒng)的操作,比如創(chuàng)建新的設(shè)備、修改文件屬性等;
  • 禁止模塊加載。

這樣,就算攻擊者在容器中取得了 root 權(quán)限,也不能獲得本地主機的較高權(quán)限,能進行的破壞也有限。

默認情況下,Docker采用 白名單 機制,禁用 必需功能 之外的其它權(quán)限。 當(dāng)然,用戶也可以根據(jù)自身需求來為 Docker 容器啟用額外的權(quán)限。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號