開發者工具 · Docker run 到 Docker compose 轉換器
以 root 身分執行容器:什麼 --user 和使用者:變更以及原因
· 為什麼它很重要
碼頭工人 容器 安全
除非影像另有說明,否則容器中的進程是根進程。這篇文章解釋了這對主機意味著什麼,--user 和 Compose user: key 如何更改它,以及隨之而來的檔案擁有權問題。
無法刪除的檔案 — 一個容器執行後,綁定掛載充滿了 root 擁有的檔案
無法刪除的檔案 — 在一個容器執行後,綁定掛載充滿了 root 擁有的檔案。證據:綁定安裝的輸出可能會暴露解析無法診斷的身份不符。使用一次性文字再現執行時身分。將每個來源事件與使用者安裝功能配對;保留名稱空間和所有權以供目的地審查。
此安全事件也表明,一個單獨的安全事件邊界是鏡像 USER 和入口點交換器需要檢查或鏡像來源。證據:影像使用者和入口點開關需要檢查或影像來源。這個執行時身份約束是一個停止點。檢查使用者在沒有製造行為的情況下安裝的功能,然後記錄主機對命名空間和所有權的檢查。
內部根是外部根 — 使用預設使用者命名空間設置,容器中的 UID 0 是主機上掛載檔案的 UID 0
內部根是外部根 — 使用預設使用者命名空間設置,容器中的 UID 0 是主機上已掛載檔案的 UID 0。證據:UID 零主機影響取決於命名空間配置,此處未閱讀。將執行時身份令牌追蹤到使用者安裝功能。將有序值與最後值欄位分開;命名空間和所有權位於集合之外。
相關的安全機制邊界是一個單獨的安全語法邊界是 1000:1000 範例示範保存而不是所有權保證。證據:1000:1000 範例示範了保存而不是所有權保證。使用此執行時身分事實來預測使用者安裝功能中的一個成員或標量。在決定有關命名空間和所有權的任何事情之前檢查警告。
--user 變成 user: — 數字 UID:GID 與名稱,以及為什麼當映像沒有匹配帳戶時數字更安全
--user 變成 user: — 數字 UID:GID 與名稱,以及為什麼當映像沒有匹配帳戶時數字會更安全。證據:--user 成為用戶,並數字 UID:GID 文字被引用。從其模型判斷執行時身份序列化。在使用者掛載功能中引用可以保護類型,但不會提供命名空間和所有權的操作證明。
第二個安全序列化觀察是一個單獨的安全輸出邊界是 read_only cap_drop 和 security_opt 映射,而無根模式則不會。證據:read_only cap_drop 和 security_opt 映射,而 rootless 模式則不然。此執行時標識輸出將設定與不可用的上下文分開。保持使用者掛載功能可審查,並獨立檢查命名空間和所有權。
已放棄權限的映像 - Dockerfile 中的 USER,以及在入口點切換使用者的映像
已放棄權限的映像 - Dockerfile 中的 USER,以及在入口點切換使用者的映像。在執行時身份異常處停止而不是猜測。任何靠近使用者安裝功能的新增都需要與命名空間和所有權相關的特定部署的原因。
另一個安全異常約束是,一個單獨的安全性異常邊界是命名空間重新映射和 Kubernetes 上下文超出範圍。證據:命名空間重新映射和 Kubernetes 上下文超出了範圍。將原始執行時身份命令保留在警告旁邊。此比較顯示了使用者安裝功能包含哪些內容以及哪些命名空間和所有權決策仍然是手動的。
工作範例:轉換 docker run --user 1000:1000 -v /srv/app:/app — 使用者:金鑰以及磁碟上的所有權
工作範例:轉換 docker run --user 1000:1000 -v /srv/app:/app — 使用者:金鑰以及磁碟上的最終所有權。從合成名稱建立執行時身分範例。使每個用戶安裝的功能項目都可追踪,而不會暴露生產命名空間和所有權詳細資訊。
相同的安全性範例範例表明,一個單獨的安全性範例邊界是身分在安裝和功能旁邊變得可見以供審查。證據:除了坐騎和功能之外,身份也變得可見,可供審查。配對的執行時身分事實應該在使用者安裝功能中可見。記錄該行並避免有關名稱空間和所有權的假設。
其他強化金鑰 — read_only、cap_drop: [ALL]、security_opt no-new-privileges 和 rootless Docker 作為更大的一步
其他強化金鑰 — read_only、cap_drop: [ALL]、security_opt no-new-privileges 和 rootless Docker 作為更大的一步。將執行時身分結果轉換為可觀察的使用者安裝功能差異。 Docker 擁有後來的命名空間和所有權判決。
安全性結果實作也顯示了一個單獨的安全效果邊界,即綁定安裝的輸出可能會暴露解析無法診斷的身份不符。分割執行時身分職責:轉換寫入使用者安裝功能,儲存庫刪除機密,操作員驗證命名空間和所有權。
這不包括什麼-使用者命名空間重新映射配置和 Kubernetes securityContext
這不包括使用者命名空間重新映射配置和 Kubernetes securityContext。將執行時身份範圍限制為此處顯示的使用者安裝功能分支。相鄰的表單和預設值無法回答命名空間和所有權問題。
另一個安全範圍限制來自一個單獨的安全限制邊界,即 UID 零主機影響取決於此處未讀取的命名空間配置。將此執行時身份邊界視為排除項。喜歡準確的使用者掛載功能,而不是對命名空間和所有權的猜測。
重點:決定您的進程是誰 - 並檢查轉換器的輸出包括 user: 在您啟動堆疊之前
重點:決定您的進程是誰 - 並檢查轉換器的輸出包括 user: 在您啟動堆疊之前。審核執行時身分作為來源選項、模型欄位、使用者安裝功能行和警告。在檢查命名空間和所有權之前刪除機密。
最後,安全要點來源確認了一個單獨的安全決策邊界是 --user 成為用戶,並引用數字 UID:GID 文字。嚴格關閉執行時身分:使用者掛載功能是候選者;不能保證命名空間、所有權和 shell 等效性。