总结

总结

我的 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

解释

Alpine 基于忙碌箱它在一个二进制文件中实现了 Linux 常用命令。如果你查看/bin基础 Alpine 映像上的目录,你会看到该ping命令(与其他命令一样)是指向/bin/busybox

要以普通用户身份运行,ping需要自杀位设置。您可能想在符号链接上设置 suid 位(即chmod u+s /bin/ping)。但这实际上会将其设置在 busybox 二进制文件上,因此也会将其设置在注册为符号链接的所有其他命令上,这会造成安全漏洞。

幸运的是,alpine 中有一个iputils包含替代版本的软件包ping。如果你安装它,它将用一个普通的二进制文件替换符号链接,该二进制文件具有每个人都可以执行的必要权限。只需在 Dockerfile 中的一行中添加上述必要命令即可RUN

答案2

虽然它没有回答 OP 的问题,但对于寻找标题错误的人来说可能会有帮助。

您可以运行以下命令以作为docker容器的root用户进入shell。

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

根据图像中存在的壳,shell可以是、、、等中的任意一个zsh。您bash可以通过反复试验的方法找到。shash

如果您没有 dockerfile 来修改它(例如,直接从注册表获取 docker 映像时),这将特别有用。

相关内容