【问题标题】:Why is fixuid refusing to change the UID/GID? [closed]为什么 fixuid 拒绝更改 UID/GID? [关闭]
【发布时间】:2021-01-26 12:29:15
【问题描述】:

我的情况与here 回答的问题类似。

在答案中,建议在docker镜像中使用fixuid以便(我引用)

我们已经为这个问题创建了一个解决方法,它改变了一个 Docker 在构建时设置的容器的用户/组和文件权限 容器在运行时启动的 UID/GID 的时间。

项目和安装说明位于: https://github.com/boxboat/fixuid

例子:

  • Docker 容器是使用用户/组 dockeruser:dockergroup 作为 UID/GID 1000:1000 构建的。
  • 主机以 UID/GID 1001:1002 运行。
  • 使用 docker run -u 1001:1002 运行映像。 fixuid 将:
  • 将 dockeruser UID 更改为 1001
  • 将 dockergroup GID 更改为 1002
  • 将旧 dockeruser:dockergroup 的所有文件权限更改为 1001:1002
  • 将容器内的 $HOME 更新为 dockeruser $HOME
  • 现在容器和主机 UID/GID 匹配,并且在主机装载的容器中创建的文件将匹配。

它可以作为 ENTRYPOINT 或作为启动脚本的一部分运行。它是 作为 root 拥有的二进制文件安装在容器中,带有 setuid 位,并提升权限以进行适当的更改。它 只能在开发容器中使用。

但是当我尝试这样做时,我得到了

fixuid: already ran on this system; will not attempt to change UID/GID

因此UID没有改变,这会导致很多问题

【问题讨论】:

    标签: docker file-permissions


    【解决方案1】:

    正如您在fixuid 的源代码中所见,不运行此二进制文件两次有一个(微小的)安全性(因为它是setuid root,所以它非常危险):

    文件/var/run/fixuid.ranchecked 在运行之前存在。

    看起来有人可能在启动阶段运行了fixuid 二进制文件。可能在一个入口点中(可能调用另一个入口点等等),或者在实际运行命令时在入口点之后。

    fixuid 可以在入口点中使用作为命令的外壳包装器。
    如果您尝试同时执行这两种情况,您将收到该消息。

    【讨论】:

    • 我认为可能是这样。我问了一个认识这样做的开发人员的人,显然这就是正在发生的事情。 fixuid 在入口点中使用,然后在提交 docker 时再次调用它。我想我将不得不对此进行更多调查
    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2015-01-21
    • 2020-10-18
    • 2012-04-12
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多