Docker
無法 ping(權限被拒絕)
我的 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。
你有解決我的問題的方法嗎?
TLDR;
apk add iputils
解釋
Alpine 基於busybox,它在單個二進製文件中實現了linux 常用命令。如果您查看
/bin
基本 alpine 映像上的目錄,您會看到該ping
命令(與其他命令一樣)是指向/bin/busybox
要作為普通使用者執行,
ping
需要設置suid 位。您可能很想在符號連結(即chmod u+s /bin/ping
)上設置 suid 位。但這實際上會在busybox二進製文件上設置它,因此在所有其他註冊為符號連結的命令上,這將是一個安全漏洞。幸運的是,
iputils
alpine 中有一個包,其中包含ping
. 如果您安裝它,它將用一個普通的二進製文件替換符號連結,該二進製文件擁有每個人都可以執行的必要權限。RUN
只需在 Dockerfile的一行中添加上述必要的命令。