我的 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?)
Run Code Online (Sandbox Code Playgroud)
我已经用 AppArmor 尝试了一些东西,分配更多的功能等等。但没有任何帮助来解决这个问题。
运行镜像是一个没有任何修改的 alpine linux。
你有解决我的问题的方法吗?
apk add iputils
Run Code Online (Sandbox Code Playgroud)
Alpine 基于busybox,它在单个二进制文件中实现了 linux 常用命令。如果您查看/bin基本 alpine 映像上的目录,您将看到该ping命令(与其他命令一样)是指向/bin/busybox
要以普通用户身份运行,ping需要设置suid 位。您可能会想在符号链接(即chmod u+s /bin/ping)上设置 suid 位。但这实际上会将它设置在 busybox 二进制文件上,因此在所有其他注册为符号链接的命令上,这将是安全漏洞。
幸运的是,iputilsalpine 中有一个包含替代版本的ping. 如果您安装它,它将用一个普通的二进制文件替换符号链接,该二进制文件持有每个人都可以执行的必要权限。只需在 Dockerfile 中添加必要的命令。
虽然它没有回答OP问题,但对于搜索标题中的错误的人来说可能会有所帮助。
您可以运行以下命令以 docker 容器的 root 用户身份进入 shell。
docker exec -u 0 -it <container-name> <shell>
根据镜像中存在的 shell,shell可以是zsh、bash、sh、ash等中的任何一个。您可以通过试错法找到。
如果您没有 dockerfile 来修改它(例如,直接从注册表获取 docker 映像时),这尤其有用。
| 归档时间: |
|
| 查看次数: |
9187 次 |
| 最近记录: |