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

时间:2017-03-30 11:10:11

标签: linux docker

我在let TabExample = React.createClass({ getInitialState() { return { key: 1 }; }, handleSelect(key) { this.setState({key}); }, ajaxCall : function() { // Ajax call is made here.. componentDidMount : function () { this.ajaxCall(); } render() { return ( <Tabs activeKey={this.state.key} onSelect={this.handleSelect} id="controlled-tab-example"> <Tab eventKey={1} title="Tab 1">Tab 1 content with ajax call</Tab> // Ajax here <Tab eventKey={2} title="Tab 2">Tab 2 content</Tab> // No ajax <Tab eventKey={3} title="Tab 3" disabled>Tab 3 content</Tab> // No ajax </Tabs> ); } }); 上使用docker并启用了用户ID映射(用户名称)。我有以下设置:

/ etc / passwd中 ubuntu 16.04

的/ etc / subuid myusername:x:1000:1000:,,,:/home/myusername:/bin/bash

的/ etc / subguid myusername:100000:65536

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

宿主 myusername:100000:65536

容器 -rw-r--r-- 1 100000 100000 0 Mär 30 13:05 testfile

我可以在主机上读取文件,但我无法编辑它。我的假设是 rw-r--r-- 1 root root 0 Mar 30 13:05 testfile 是“我的”subuid,所以我可以编辑这些文件。如何在不使用sudo的情况下100000访问这些文件?

1 个答案:

答案 0 :(得分:0)

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