瞭解 Windows 的許可權要求
本頁面包含在 Windows 上執行和安裝 Docker Desktop 的許可權要求,特權助手程序 com.docker.service
的功能,以及採用此方法的理由。
本頁面還闡明瞭以 root
身份執行容器與在主機上擁有 Administrator
訪問許可權的區別,以及 Windows Docker engine 和 Windows 容器的許可權。
Docker Desktop for Windows 在設計時考慮了安全性。僅在絕對必要時才需要管理員許可權。
許可權要求
雖然 Docker Desktop for Windows 可以在沒有 Administrator
許可權的情況下執行,但在安裝過程中需要這些許可權。安裝時會收到 UAC 提示,允許安裝特權助手服務。之後,如果您是 docker-users
組的成員,Docker Desktop 就可以在沒有管理員許可權的情況下執行。如果您執行了安裝,您會自動被新增到此組,但其他使用者必須手動新增。這允許管理員控制誰有權訪問 Docker Desktop。
採用這種方法的原因是 Docker Desktop 需要執行一組有限的特權操作,這些操作由特權助手程序 com.docker.service
完成。這種方法遵循最小特權原則,僅在絕對必要的操作中使用 Administrator
訪問許可權,同時仍允許非特權使用者使用 Docker Desktop。
特權助手
特權助手 com.docker.service
是一個 Windows 服務,它在後臺以 SYSTEM
特權執行。它監聽命名管道 //./pipe/dockerBackendV2
。開發者執行 Docker Desktop 應用程式,該應用程式連線到命名管道並向服務傳送命令。此命名管道是受保護的,只有屬於 docker-users
組的使用者才能訪問它。
此服務執行以下功能:
- 確保在 Win32 hosts 檔案中定義了
kubernetes.docker.internal
。定義 DNS 名稱kubernetes.docker.internal
允許 Docker 與容器共享 Kubernetes 上下文。 - 確保在 Win32 hosts 檔案中定義了
host.docker.internal
和gateway.docker.internal
。它們指向主機本地 IP 地址,並允許應用程式從主機本身或容器使用相同的名稱解析主機 IP。 - 安全地快取 Registry 訪問管理策略,該策略對開發者是隻讀的。
- 建立 Hyper-V VM
"DockerDesktopVM"
並管理其生命週期 - 啟動、停止和銷燬。VM 名稱在服務程式碼中是硬編碼的,因此該服務不能用於建立或操作任何其他 VM。 - 移動 VHDX 檔案或資料夾。
- 啟動和停止 Windows Docker engine 並查詢其是否正在執行。
- 刪除所有 Windows 容器資料檔案。
- 檢查 Hyper-V 是否已啟用。
- 檢查 bootloader 是否啟用 Hyper-V。
- 檢查所需的 Windows 功能是否已安裝並啟用。
- 執行健康檢查並檢索服務本身的版本。
服務啟動模式取決於所選的容器 engine,對於 WSL,還取決於是否需要在 Win32 hosts 檔案中維護 host.docker.internal
和 gateway.docker.internal
。這由設定頁面中 Use the WSL 2 based engine
下的設定控制。當啟用此設定時,WSL engine 的行為與 Hyper-V 相同。因此,
- 對於 Windows 容器或 Hyper-V Linux 容器,服務在系統啟動時啟動並始終執行,即使 Docker Desktop 未執行也是如此。這是必需的,以便您可以在沒有管理員許可權的情況下啟動 Docker Desktop。
- 對於 WSL2 Linux 容器,服務不是必需的,因此係統啟動時不會自動執行。當您切換到 Windows 容器或 Hyper-V Linux 容器,或者選擇在 Win32 hosts 檔案中維護
host.docker.internal
和gateway.docker.internal
時,會出現 UAC 提示,要求您接受啟動服務的特權操作。如果接受,服務將啟動並設定為在下次 Windows 啟動時自動啟動。
在 Linux VM 中以 root 身份執行的容器
Linux Docker 守護程式和容器執行在一個由 Docker 管理的最小的、專用 Linux VM 中。它是不可變的,因此您無法擴充套件它或更改安裝的軟體。這意味著儘管容器預設以 root
身份執行,但這不允許更改 VM,也不授予對 Windows 主機的 Administrator
訪問許可權。Linux VM 充當安全邊界,限制可以訪問的主機資源。檔案共享使用使用者空間構建的檔案伺服器,從主機繫結掛載到 Docker 容器的任何目錄仍然保留其原始許可權。容器無法訪問除明確共享之外的任何主機檔案。
增強容器隔離
此外,Docker Desktop 支援增強容器隔離模式 (ECI),僅適用於商業客戶,它可以在不影響開發者工作流程的情況下進一步保護容器。
ECI 自動在 Linux 使用者名稱空間中執行所有容器,從而將容器中的 root 使用者對映到 Docker Desktop VM 中的非特權使用者。ECI 使用此技術及其他高階技術進一步保護 Docker Desktop Linux VM 中的容器,使其與 Docker 守護程式和 VM 中執行的其他服務進一步隔離。
Windows 容器
警告
啟用 Windows 容器具有重要的安全隱患。
與在 VM 中執行的 Linux Docker Engine 和容器不同,Windows 容器使用作業系統特性實現,並直接在 Windows 主機上執行。如果您在安裝過程中啟用 Windows 容器,容器內部用於管理的 ContainerAdministrator
使用者將成為主機上的本地管理員。在安裝過程中啟用 Windows 容器會使 docker-users
組的成員能夠在主機上提升為管理員。對於不希望其開發者執行 Windows 容器的組織,可以使用 -–no-windows-containers
安裝程式標誌來停用它們的使用。
網路
對於網路連線,Docker Desktop 使用使用者空間程序 (vpnkit
),該程序繼承了啟動它的使用者的約束,如防火牆規則、VPN、HTTP 代理屬性等。