長話短說

長話短說

我的 docker 安裝有問題。出於某些安全原因,我配置了“daemon.json”,將命名空間切換到另一個使用者 ( userns-remap)。現在我遇到的問題是,如果我運行一個容器(使用切換的使用者上下文 ( USER containeruser) 並嘗試 ping 位於同一容器網路中的另一個容器,我會收到以下錯誤:

$ ping 172.16.0.3
PING 172.16.0.3 (172.16.0.3): 56 data bytes
ping: permission denied (are you root?)

我已經嘗試使用 AppArmor 進行一些操作,分配更多功能等等。但沒有任何幫助解決這個問題。

運行鏡像是未經任何修改的 alpine linux。

你有辦法解決我的問題嗎?

答案1

長話短說

apk add iputils

解釋

阿爾派是基於忙碌盒它在單一二進位檔案中實作了 Linux 常用命令。如果您查看/bin基本高山圖像上的目錄,您將看到該ping命令(與其他命令一樣)是一個符號鏈接/bin/busybox

要以一般使用者身分運行,ping需要蘇德位放。您可能會想要在符號連結(即 )上設定 suid 位元chmod u+s /bin/ping。但這實際上會在 busybox 二進位檔案上設定它,因此在註冊為符號連結的所有其他命令上設定它,這將是一個安全漏洞。

幸運的是,alpine 中有一個iputils包,其中包含ping.如果您安裝它,它將用一個普通的二進位檔案替換符號鏈接,該二進位檔案擁有每個人都可以執行的必要權限。只需將上述必要的命令添加到RUNDockerfile 的一行中即可。

答案2

雖然它沒有回答OP問題,但對於搜尋標題中的錯誤的人來說可能會有所幫助。

您可以執行以下命令以 docker 容器的 root 使用者身分進入 shell。

docker exec -u 0 -it <container-name> <shell>

根據鏡像中存在的 shell,shell可以是zshbashshash等中的任何一個。

如果您沒有 dockerfile 來修改它(例如,直接從登錄機碼取得 docker 映像時),這尤其有用。

相關內容