Docker userns-remap 用户拥有的文件最终归容器内的任何人所有

问题描述

我正在处理 Docker 用户命名空间重新映射:https://docs.docker.com/engine/security/userns-remap/

我通过修改 /etc/docker/daemon.json 启用了 Docker 用户命名空间重新映射。内容目前看起来像这样:

{
  "userns-remap": "default"
}

我已经重新启动了 Docker 守护进程。默认 dockremap 用户是按照文档的承诺创建的:

user@host:~$ id dockremap
uid=125(dockremap) gid=134(dockremap) groups=134(dockremap)

/etc/subuid 中还有一个条目:

dockremap:165536:65536

现在,我有一个包含共享文件的文件夹,我希望将其绑定安装在容器内以使其可供读取。在主机操作系统上,该文件具有以下所有者和权限设置:

-rwxrwx--- 1 dockremap dockremap 0 april 8 19:19 shared_file.txt

该文件不应该是全局可写的。我的实际意图是在主机操作系统和容器之间安全地共享包含一些秘密信息的文件。

如果有任何不同,父目录是全局可写的:

drwxrwxrwx 3 dockremap dockremap 4,0K april 8 19:20 .

我将它绑定安装到一个 Alpine 容器中,如下所示:

docker run --rm -it -w /work -v $(pwd)/shared_file.txt:/work/shared_file.txt remaptest ls -lah

我现在希望该文件由容器内的 UID 为 0 的 root 所有,因此可供读取。相反,它归 nobody 所有,root 不可读:

-rwxrwx--- 1 nobody nobody 0 Apr 8 16:19 shared_file.txt

容器内的

nobody 具有以下 ID:

/work # id nobody
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)

我是否对用户命名空间重新映射和绑定挂载文件系统权限如何协同工作有错误的期望,或者这里有什么问题?我已经在两台不同的 PC 上对此进行了测试。其中一个运行 Ubuntu,另一个运行 Mint。

我还使用 Ubuntu-based 容器而不是 Alpine-based 容器进行了测试,但结果几乎相同。我当然可以修改用于构建映像的 Dockerfile,但我的印象是我上面这样做的方式应该可行。

我想与它一起使用的实际 Dockerfile 来自 Docker Hub,我不想弄乱它的设置方式。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)