为什么fixuid拒绝更改UID / GID?

时间:2020-10-12 07:50:21

标签: docker file-permissions

我遇到的问题类似于here得到回答的问题。

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

我们已针对此问题创建了解决方法,该方法可更改Docker 在构建时设置的容器的用户/组和文件权限 在运行时启动容器的UID / GID的时间。

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

示例:

  • 使用用户/组dockeruser:dockergroup作为UID / GID 1000:1000构建Docker容器。
  • 主机以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或作为启动脚本的一部分运行。它是 以setuid作为root拥有的二进制文件安装在容器中 位,并升级特权以进行适当的更改。它 应该只在开发容器中使用。

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

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

因此未更改UID会导致很多问题

1 个答案:

答案 0 :(得分:1)

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

文件/var/run/fixuid.ranchecked,表示文件在运行前存在。

好像有人在启动阶段运行了fixuid二进制文件。可能在入口点(可能会调用另一个入口点,依此类推)中,或者在实际运行命令时在入口点之后。

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