LXC容器内部和外部的用户权限?


26

我正在服务器上的Docker LXC容器内部运行某些服务,并且我开始对它们进行认真的处理。

我尚不清楚的一件事是容器内部和外部用户权限的工作方式。例如,如果我在一个容器中运行MySQL并将其数据目录设置为/dataDocker卷(即Docker卷),那么该容器内部和外部的权限如何影响访问策略?

显然,其想法是在容器(即mysql:mysql)中以其自己的用户身份运行MySQL,并赋予其对该目录的读写权限。我认为这将非常简单,只需chmod进入目录等即可。但是,这在容器如何工作?现在我有了这个名为“数据”的Docker共享卷,如何管理对它的访问控制?

我特别希望能够在Docker容器外部运行非特权用户,该用户将定期访问MySQL共享卷并备份数据。

如何设置权限,用户和组,以便主机上的特定用户可以读取/写入Docker共享卷中的文件和文件夹?


2
使用用户(但docker尚不支持),LXC容器可以非特权用户身份运行。否则root,如果容器配置不当,容器内的用户可能会爆发。即root主机上root的容器位于特权LXC容器中。
0xC0000022L 2014年

1
root顺便说一句,也可以运行非特权容器。重要的是要为用户定义一个映射。
0xC0000022L

Answers:


21

自0.9版本发布以来,Docker下降LXC并使用其自己的执行环境libcontainer。您的问题有点老,但我想我的答案仍然适用您使用的版本。

快速解答:要了解卷的权限,可以类推mount --bind Host-Dir Container-Dir。因此,为了满足您的要求,您可以使用任何传统方法来管理权限。我想ACL是您所需要的

长答案:因此,如您的示例中那样,我们有一个名为dock的容器,该容器带有volume /data

docker run -tid --name dock -v /usr/container/Databases/:/data \
    centos:latest /bin/bash

在容器内,我们的MySQL服务器已配置为使用/data为其数据目录。因此,我们的数据库位于/data容器内部。在Host OS容器的外部,我们从中装入了该/data卷,/usr/container/Databases/并分配了一个普通用户bob来备份数据库。在主机上,我们将为用户bob配置ACL 。

useradd -u 3000 bob
usermod -R o=--- /usr/container/Databases/
setfacl -R -m u:bob:rwx /usr/container/Databases/
setfacl -R -d -m u:bob:rwx /usr/container/Databases/

要进行测试,请使用bob进行备份。

su - bob
tar -cvf container-data.tar /usr/container/Databases/

tar将会列出,您可以看到我们的用户能够访问所有文件。

现在从容器内部进行检查,getfacl您会注意到它显示的是3000 ,而不是bob。这是因为bob的UID是3000,并且容器中没有这样的用户,因此它只是显示从元数据中接收到的UID 。现在,如果您在容器中创建用户,您useradd -u 3000 bob会注意到现在getfacl显示的名称是bob而不是3000。

摘要:因此,您从容器内部或外部分配的用户权限会同时反映两种环境。因此,要管理卷的权限,主机中的UID必须与容器中的UID不同


Docker for Ubuntu至少具有一个软件包名称lxc-docker,这是否表示它没有使用LXC?以上情况在这种情况下是否仍然适用?
Naftuli Kay 2014年

@NaftuliTzviKay哦,对不起。然后它必须使用LXC(我想apt-get info可能有详细信息),因为在ubuntu中docker.io,我使用了另一个软件包。由于Docker和RedHat现在已经携手,我没有和Ubuntu合作很久了。因此,最好将RHEL或CentOS作为基本OS,否则,您可以简单地使用LXC。
beginer

即使在lxc-docker这似乎按计划进行。我创建了3000 UID用户,感动于一个共享卷文件,并能够从主机OS看到该文件存在,ID为3000的用户在拥有
Naftuli凯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.