【问题标题】:Using setuid inside a docker container在 docker 容器中使用 setuid
【发布时间】:2020-07-08 09:52:58
【问题描述】:

我有一个容器需要在启动时进行一些初始化,只能以 root 身份完成,但遵循良好做法我不希望容器以 root 身份运行。

我想我应该能够在容器内创建一个脚本,该脚本由 root 拥有并设置了 setuid 位。然后可以使用非 root 用户启动容器,通过执行脚本完成初始化,然后容器完成它需要做的事情。

这似乎不起作用。即使脚本归 root 所有并且设置了 setuid 位,初始化脚本仍以非 root 用户身份运行。

这应该有效吗?还有其他(更好的)方法吗?

我在 Mac 上使用 Docker for Desktop 运行。

我需要做的初始化是使用只能在运行时从容器内部确定的值更新 /etc/hosts - 特别是与 host.docker.internal 关联的 IP 地址。

我已经尝试在 Dockerfile 中让非 root 用户可以写入 /etc/hosts。那也行不通。 /etc/hosts 在 docker 文件中是挂载的卷,chmod 和 chown 似乎对正在运行的容器中的文件没有影响。

【问题讨论】:

    标签: macos docker initialization root setuid


    【解决方案1】:

    可能为了达到你的目的你可以在Dockerfile中指定安装脚本后使用非root用户。

    例如:

    FROM ...
    RUN ./install.sh
    USER foo
    ...
    

    此 Dockerfile 将以 root 身份启动安装程序,并将用户更改为选定的用户。

    希望对你有用!

    【讨论】:

    • 谢谢大卫,但如果我理解正确的话,很遗憾不会。初始化脚本必须在容器运行时运行,而不是在构建镜像时运行。
    猜你喜欢
    • 1970-01-01
    • 2019-02-13
    • 2020-06-15
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多