Rootless Docker

即管睇下有幾多人畀到建議我

我今日試在Linux玩Rootless Docker,基本上係成功
但有最大問題,就係我個non-root帳戶可以sudo
即係話如果Docker container break out,都有機會畀人撞sudo密碼攞root

我想用另一個無sudo的non root帳戶行Rootless Docker
但係用我自己帳戶行Docker Compose,又唔畀Access docker.sock

咁點樣可以真正Secure咁行Rootless Docker呢?

要真正安全運行 Rootless Docker,關鍵係:

1)用無 sudo 權限嘅專用用戶(如 dockeruser)運行 Rootless Docker,隔離有 sudo 權限嘅帳戶。

2)正確配置 docker.sock,確保 Docker Compose 透過 DOCKER_HOST 環境變量訪問正確嘅 socket。

3)限制容器權限,包括使用 user namespaces、移除不必要 capabilities 同避免 mount 敏感目錄。

TOP

本帖最後由 kennylam777 於 2025-9-14 10:25 編輯

回覆 2# javacomhk


    唔好勉強用AI啦,費事你又嬲晒全世界,又響度嘈生晒,AI都唔該搵個識上網同大少少嘅model例如Gemini 2.5先好答啦。

回覆 1# 小薯仔

正經答嘅係,docker.sock同rootless係兩回事,docker.sock只係用最簡單嘅ACL,只要你個user響group docker都駁得,所以你會見教學會叫你  sudo usermod -aG docker $USER

同埋sudoer file正常係可以限制你個user可以行咩, 同埋要password先sudo得,唔係隨便sudoer就保證過sudo

TOP

回覆 3# kennylam777

感謝啟發。我主要擔心被人break到個container,就等於拎到我嘅user account。
再sudo撞密碼就有機會升root。

我發現Docker根本唔支援另一個non-root user行Rootless Docker,然後被其他user用佢個Docker engine。呢樣好似要轉Podman先Fix到。網上雖然有d「破解」方法,但被任何人用到個Docker socket都係保安漏洞,我感覺算係邪道。

暫時唯有sudo密碼加2FA,提升撞sudo嘅難度。咁都算可以用我自己account行docker engine + compose。

TOP

本帖最後由 javacomhk 於 2025-9-14 19:14 編輯

呢個先係 Google Gemini 2.5 Pro 嘅提議
docker.sock同rootless 唔係兩回事,而係一個「因果關係」。 docker.sock 係通訊嘅接口,而「Rootless」模式決定咗呢個接口由邊個用戶擁有、放喺邊度,以及有幾安全。

附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

其實你搵呢D AI嘢,就唔洗答我了
因為資料我一早已經搵哂

我要嘅係真正的實戰經驗
你無嘅話...

算啦,都係唔講啦,費事你又發爛渣。

TOP

本帖最後由 kennylam777 於 2025-9-16 00:11 編輯
回覆  kennylam777

感謝啟發。我主要擔心被人break到個container,就等於拎到我嘅user account。
再sudo ...
小薯仔 發表於 2025-9-14 14:06


我聽落似係你想搞啲一部機俾唔同街外users用嘅嘢, 例如multi-tanent嘅container hosting? 但反而大嘅方案例如k8s等等都會support rootless嘅container engine, 選擇更多例如containerd而唔係限定用docker。

其實docker都係一個daemon黎啫, 用systemd start佢果陣已經係咁, 而`docker`呢個command係一個client黎, 駁得通 docker.sock 或者指定嘅TCP port已經係等於通咗,

Docker Client (docker command) -> docker.sock / TCP port -> Docker Daemon

Docker daemon係會對client照單全收的

所以你果個問題係, 可以試吓docker daemon著咗之後, 用docker果個user(我當UID 1000)去做chmod改成775試一試先, 用另一個user(我當UID 1001)去駁個docker, 如果通嘅話就證實到我上面講嘅嘢: access到docker.sock就係full access to docker engine, 上面條AI友唔係錯晒, 只係啲內容經過多一層prompt仲要冇full context咁覆述出黎係冇用。

docker.sock係一個unix domain, dockerd (docker daemon) default係listen on unix:///var/run/docker.sock , 所以要受file permission控制, 亦可以響start daemon果陣改去唔同path, 但docker cli (client side)可以用DOCKER_HOST去改個docker.sock位置。

老實講我都冇試過docker daemon去開authorization, 但呢個問題反而係我用docker-py一類library控制個host嘅docker果陣會遇過。

TOP

回覆 7# kennylam777

Docker.sock 嘅permission嗰度,我試過用Docker Context轉位置,再set permission,係可以access,但會出另一個Error (忘記咗係乜),經TCP我試就無Listen到port 2375,所以唔work

另外試過只要Restart Docker Engine,個docker.sock就會「重生」並還原permission
所以就咁改應該係會work,但save唔到reboot或者restart docker engine

另外我都睇咗下面呢個page,佢大概意思係教人保護好docker.sock,唔好隨便access到
咁我就轉方向用返自己account行,再2FA保護sudo

https://docs.docker.com/engine/security/protect-access/

有少少想要轉Podman,但又係另一個坑

TOP