【问题标题】:How to switch user in Docker container with User Namespaces如何使用用户命名空间在 Docker 容器中切换用户
【发布时间】:2019-12-25 18:02:54
【问题描述】:

我正在运行 dockerd 19.03.1,构建 74b1e89,并在专用 ID 范围上启用了用户命名空间

 cat > /etc/sub{uid,gid}
 dockeruser:120000:10000

我需要将容器从 root 切换到我创建的专用用户

ARG USERID=26551
ENV runUID=${USERID}
ARG GROUPID=26551
ENV runGID=${GROUPID}
ARG USERNAME='testuser'
ENV runUSER=${USERNAME}
ARG groupNAME='testgroup'
ENV runGROUP=${groupNAME}
RUN groupadd -g ${runGID}  ${runGROUP} && useradd -u ${runUID} -g ${runGID} -r ${runUSER}  

但是,我无法在容器上下文中切换到用户。 su 以及替换为 gosu 失败类似于

[root@1d5594cd99a0 /]# su - testuser ls
su: cannot set groups: Invalid argument

根据documentation on user namespace mapping,这可能是一个警告,并且会影响所有依赖于setuid 或/和su 检查实际二进制所有者的二进制文件。

是否可以在容器上下文中的另一个用户下在 Docker 容器中运行命令/二进制文件,并为 dockerd 启用用户命名空间?

【问题讨论】:

    标签: docker setuid linux-namespaces


    【解决方案1】:

    回答我的问题

    我没有为用户命名空间定义足够的 subuids/subgids。

    之前

    /etc/subuid
    /etc/subgid
      dockeruser:120000:10000
    

    我在 UID=26551 的容器中创建了一个用户 - 其中 26551 不在 [120000,120000+10000] 范围内,因此切换到该用户失败。

    修复

    将 subuid 和 subgid 范围扩展到 [200000,200000+100000] 并实际包含 UID

    /etc/subuid
    /etc/subgid
       dockeruser:200000:100000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-02
      • 2012-05-29
      • 2018-02-04
      • 2017-11-29
      • 1970-01-01
      • 2022-10-15
      • 2015-08-13
      • 2011-04-24
      相关资源
      最近更新 更多