如何在Linux下使用属于子用户命名空间的文件?

F.L*_*A.M 6 linux docker

我正在使用启用了用户 ID 映射(用户名)的dockeron 。ubuntu 16.04我有以下设置:

\n\n

/etc/passwd \n\nmyusername:x:1000:1000:,,,:/home/myusername:/bin/bash\n

\n\n

/etc/subuid \n\nmyusername:100000:65536\n

\n\n

/etc/subguid \n\nmyusername:100000:65536\n

\n\n

当我启动容器时,文件会从 0(根)正确映射到我的 subuid 100000。

\n\n

主机\n\n-rw-r--r-- 1 100000 100000 0 M\xc3\xa4r 30 13:05 testfile\n

\n\n

容器\n\nrw-r--r-- 1 root root 0 Mar 30 13:05 testfile\n

\n\n

我可以读取主机上的文件,但无法编辑它。我的假设是这100000是“我的”subuid,所以我可以编辑这些文件。如何实现myusername无需 sudo 即可访问这些文件?

\n

Mat*_*att 3

我不确定如何使用用户命名空间映射来解决此问题,但您可以使用 ACL 来解决它。

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

要在父目录上设置默认 ACL,新条目将继承:

setfacl -d -m u:1000:rwx volume_dir/
Run Code Online (Sandbox Code Playgroud)

要对目录中的所有现有文件和目录设置 ACL:

setfacl -R -m u:1000:rwX volume_dir/
Run Code Online (Sandbox Code Playgroud)

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