抱歉,标题不对,设置实际上非常简单。我有一台主机,其中有一个名为的用户oli
和一个名为的目录/media/steve/incoming
,oli
可以对其进行读写执行。在其中,我有一个在 root 下运行的特权 LXC 容器。/media/steve/incoming
在容器中安装如下/incoming/
:
lxc.mount.entry = /media/steve/incoming incoming none bind 0 0
在容器内我有一个以 身份运行的 Web 服务器www-data
。它需要能够写入/incoming/
。
我在这里有什么选择?我能想到一些想法,但它们要么有相当严重的缺点,要么我不知道如何实现它们:
我可以将守护进程更改为在容器内以 root 身份运行,但我宁愿不这样做。root 在目录中以奇怪的方式写入文件(它们
root:oli
在主机上显示为 -owned)。我可以将容器映射到文件系统上
www-data
具有主机oli
权限吗?这会授予他们访问主机的权限吗?oli
不是一个非特权帐户。它可以造成真正的损害。我是否可以以这样一种方式绑定安装它,以便容器中的任何人都可以写入 /incoming,并且访问看起来像是来自 host-
oli
?ACL 有什么帮助吗?
答案1
访问控制列表可以成功做到这一点,因为它使得文件可以基于以下方式共享给多个用户:用户名而不是用户身份数字。
它被转换为文件属性内的用户 ID 号码。
我可以映射container-www-data
到host-oli
文件系统上的权限吗?这会授予他们访问主机的权限吗?oli
不是一个非特权帐户。它可以造成真正的损害。
您可以在主机上运行以下命令,以使lxc
容器的www-data
用户可以写入该/incoming
文件夹。
$ sudo chown oli /media/steve/incoming
$ sudo setfacl -m u:www-data:rwx /media/steve/incoming
/media/steve/incoming
/incoming
与容器绑定在一起lxc
。
并且/media/steve/incoming
的所有者已经被 拥有oli
。
因此主机oli
可以直接写入它,容器的www-data
用户也可以直接写入它。
如果setfacl
主机上不存在该命令,您可以使用以下命令进行安装。
$ sudo apt-get install acl
主机www-data
和容器www-data
可以使用差异用户 ID 号,因此您可以为容器的 www-data 用户 ID 共享 /media/steve/incoming,如下所示。
首先,得到用户ID号容器上www-data
。
$ cat /etc/passwd | grep "^www-data:" | awk -F ":" '{print $3}'
然后,如果容器中有名为 的用户www-data
,userid
则它会显示一个数字www-data
。其次,在主机上使用 acl 设置文件属性,如下所示。
$ sudo setfacl -m u:<got_number_above>:rwx /media/steve/incoming
然后它将适用于容器。
您可以从以下位置获取有关 ACL 的更多帮助文件权限ACL