[英]docker container process running as non-root user cannot write to docker volume
kubernetes
)似乎沒有一個好的 devops/configuration-as-code 方法來在 docker 卷上設置正確的所有者/權限,因此(非 root)用戶無法寫入卷當以non-root
用戶身份運行容器進程並且我想寫入(cloudstor,aws-ebs)docker 卷時,什么是好的做法。
在(和外部)docker 容器中以 root 身份運行進程被認為是不好的做法(參見例如ref1 ,ref2 ,...)。 這可能具有安全隱患。
但是當我們開始使用 docker 卷並且非 root 用戶嘗試寫入卷時,麻煩就開始了。 我找不到一個干凈的解決方案,可以在沒有人工干預的情況下在雲基礎設施上運行。 我發現的所有工作解決方案似乎都在某些方面存在不足(安全性、可維護性……)。
作為旁注,我們正在使用cloudstor
在docker-swarm
上部署aws-ebs
卷。 我們希望有朝一日遷移到 kubernetes,但我們還沒有 kubernetes,因此我們嘗試為我們的設置尋找替代解決方案。
作為建議在這里,如果docker-compose
創建新卷,對圖像內的目錄的權限將被傳播。
缺點:
cloudstor
配置卷,這可能也不起作用,因為它不會通過docker-compose
配置卷(未測試)hasat 創建了一個volumes-provisioner映像,它可以在真正的容器啟動之前設置正確的文件夾權限。
缺點:
ebs
卷只能掛載在單個 docker 容器上,這導致了很多部署問題docker run
修正文件權限一旦真正的容器在安裝了卷的情況下運行(但仍然具有錯誤的權限),我們調用
docker run --rm -u root -v ${MOUNT}:${TARGET} { real_image } chown -R user:group ${TARGET}
缺點:
ebs
卷只能掛載在一個容器中,所以這會產生沖突這意味着:
root
用戶身份啟動進程(否則我們無權更改目錄所有者/權限)non-root
用戶缺點:
這是最簡單的解決方案,但是安全性呢? 每個人都建議不要這樣做?
正如這里所建議的,使用 kubernetes,我們可以為卷分配一個組 ID。 這似乎在pods的kubernetes 文檔中得到證實。
缺點:
kubernetes
。確保文件系統上存在具有正確所有者/權限的目錄。
缺點
cloudstor
,它甚至允許我們切換可用區)我投票支持解決方案 4,以 root 身份更改權限然后以非 root 身份啟動應用程序沒有安全問題。 如果您的應用程序中存在安全漏洞,則無論在啟動之前發生什么,該應用程序仍不會以 root 身份運行。 您可以在入口點的腳本中執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.