如何在Linux下处理属于子用户名称空间的文件?

如何在Linux下处理属于子用户名称空间的文件?,linux,docker,Linux,Docker,我正在使用ubuntu16.04上的docker,并启用了用户id映射(用户名)。我有以下设置: /etc/passwd myusername:x:1000:1000:,,:/home/myusername:/bin/bash /etc/subuid 我的用户名:100000:65536 /etc/subguid 我的用户名:100000:65536 启动容器时,文件将从0(根)正确映射到我的子UID 100000 主机 -rw-r--r--1 100000 Mär 30 13:0

我正在使用
ubuntu16.04
上的
docker
,并启用了用户id映射(用户名)。我有以下设置:

/etc/passwd

myusername:x:1000:1000:,,:/home/myusername:/bin/bash

/etc/subuid

我的用户名:100000:65536

/etc/subguid

我的用户名:100000:65536

启动容器时,文件将从0(根)正确映射到我的子UID 100000

主机

-rw-r--r--1 100000 Mär 30 13:05测试文件

容器

rw-r--r--1根根目录0 Mar 30 13:05测试文件


我可以在主机上读取该文件,但无法编辑它。我的假设是
100000
是“我的”子UID,所以我可以编辑这些文件。我如何才能在没有sudo的情况下通过
myusername
访问这些文件

我不知道如何使用用户名称空间映射解决这个问题,但您可以使用ACL解决这个问题

如果您不介意将一些UID信息泄漏到容器中,可以为主机用户向目录添加ACL。ACL位于标准POSIX权限之上

要在父目录上设置新条目继承的默认ACL,请执行以下操作:

setfacl -d -m u:1000:rwx volume_dir/
要在目录中的所有现有文件和目录上设置ACL,请执行以下操作:

setfacl -R -m u:1000:rwX volume_dir/

X
自动检测目录并将其设置为可执行,但跳过使文件可执行。不幸的是,默认ACL上没有这种类型的差异

我不知道如何使用用户名称空间映射解决这个问题,但您可以使用ACL解决这个问题

如果您不介意将一些UID信息泄漏到容器中,可以为主机用户向目录添加ACL。ACL位于标准POSIX权限之上

要在父目录上设置新条目继承的默认ACL,请执行以下操作:

setfacl -d -m u:1000:rwx volume_dir/
要在目录中的所有现有文件和目录上设置ACL,请执行以下操作:

setfacl -R -m u:1000:rwX volume_dir/

X
自动检测目录并将其设置为可执行,但跳过使文件可执行。不幸的是,默认ACL上没有这种类型的差异

通常,修改卷内容(对于普通用户)不是一个好的做法。无论如何,您都可以使用root更改它们。这仅用于开发。我想从包含php fpm的容器开始,在主机上编辑IDE中的文件。无论如何,您都可以使用root更改它们。这仅用于开发。我想从包含php fpm的容器开始,在主机上编辑IDE中的文件。