Docker: 如何给本地用户root权限?
Docker: How to give root permissions for the local user?
我 运行 是 Docker 中的一个这样的人:
docker run --user $(id -u):$(id -g) --rm --network=host -v `pwd`:${SRC_MOUNT_DIR} my-image:latest my-build-script.sh
我将本地用户设置为 --user
以避免 root 拥有的文件出现在我的主目录中。
现在,问题是我需要在我的构建脚本中使用 sudo apt install
来安装一些其他构建的依赖项,但这需要 root。
我该如何安排?我猜不可能让 sudo
在没有密码的情况下为所有可能的用户工作..?
如果您容器内的用户可以 运行 sudo apt install ...
那么您也可以 运行 容器中的所有内容作为 root,因为任何攻击都可以 sudo ...
任何攻击代码。相反:
考虑是否需要 apt install
在容器内,或者是否可以在图像中这样做。最好在映像中安装二进制文件并部署它们,而不是每次 运行 容器时都重新安装应用程序。
如果您有一个在启动时需要 root 的用例,请以 root 身份启动您的容器,然后在完成这些 root 步骤后交给用户。 gosu
之类的工具就是为此而设计的。对于执行此操作的入口点示例,我有一个带有 entrypoint script 的 docker 基础图像,它添加了 gosu
和 运行s 带有 [=15= 的 CMD ] 以避免 /bin/sh
作为 pid 1(这有助于信号处理)。
可以在以下位置找到 Gosu:https://github.com/tianon/gosu
我 运行 是 Docker 中的一个这样的人:
docker run --user $(id -u):$(id -g) --rm --network=host -v `pwd`:${SRC_MOUNT_DIR} my-image:latest my-build-script.sh
我将本地用户设置为 --user
以避免 root 拥有的文件出现在我的主目录中。
现在,问题是我需要在我的构建脚本中使用 sudo apt install
来安装一些其他构建的依赖项,但这需要 root。
我该如何安排?我猜不可能让 sudo
在没有密码的情况下为所有可能的用户工作..?
如果您容器内的用户可以 运行 sudo apt install ...
那么您也可以 运行 容器中的所有内容作为 root,因为任何攻击都可以 sudo ...
任何攻击代码。相反:
考虑是否需要
apt install
在容器内,或者是否可以在图像中这样做。最好在映像中安装二进制文件并部署它们,而不是每次 运行 容器时都重新安装应用程序。如果您有一个在启动时需要 root 的用例,请以 root 身份启动您的容器,然后在完成这些 root 步骤后交给用户。
gosu
之类的工具就是为此而设计的。对于执行此操作的入口点示例,我有一个带有 entrypoint script 的 docker 基础图像,它添加了gosu
和 运行s 带有 [=15= 的 CMD ] 以避免/bin/sh
作为 pid 1(这有助于信号处理)。
可以在以下位置找到 Gosu:https://github.com/tianon/gosu