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

标签 linux docker

我在 ubuntu 16.04 上使用 docker 并启用了用户 ID 映射(用户 namespace )。我有以下设置:

/etc/密码 我的用户名:x:1000:1000:,,,:/home/我的用户名:/bin/bash

/etc/subuid 我的用户名:1​​00000:65536

/etc/subguid 我的用户名:1​​00000:65536

当我启动一个容器时,文件被正确地从 0(root)映射到我的 subuid 100000。

主持 -rw-r--r-- 1 100000 100000 0 30 月 30 日 13:05 测试文件

容器 rw-r--r-- 1 root root 0 Mar 30 13:05 测试文件

我可以读取主机上的文件,但无法编辑它。我的假设是 100000 是“我的”subuid,因此我可以编辑这些文件。我怎样才能使 myusername 无需 sudo 即可访问这些文件?

最佳答案

我不确定如何使用用户命名空间映射解决此问题,但您可以使用 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 上不可用。

关于linux - 如何在 Linux 下使用属于子用户命名空间的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43116163/

相关文章:

python - pgadmin4 docker 无法转储服务器配置;没有名为 'flask' 的模块

docker - 使用Docker Compose标记图像/容器

nginx - nginx代理从端口80到其他端口

c++ - 加载共享库时出错 : No such file or directory even after using LD_LIBRARY_PATH and changing $PATH

linux - 两个优先级相同的SCHED_FIFO任务在Linux中是否在每个周期内获得处理时间?

python - 使用Python在Linux上的许多文件中查找并替换字符串

c - 使用 pthreads 我只得到大值的 "Segmentation fault (core dumped)"

linux - 我可以使用 wget 从 linux 终端下载多个文件吗

json - Docker:b'json:无法将数字解码为字符串类型的 Go 结构字段 LogConfig.Config'

database - 使用 opscenter 在 docker 上管理 cassandra 数据库