首先介绍一下我的配置:
- Ubuntu 15.10
- ZFS 池已创建
- 存储在 pool/lxc 中的 LXC 容器
- 数据集创建于
pool/mydataset
所有者user1
现在我需要一个容器来访问中的文件/文件夹pool/mydataset
。我尝试了以下操作:
user1
在容器内创建用户编辑
pool/lxc/mycontainer/config
并添加:lxc.mount.entry = /pool/mydataset mnt/mydataset none rw,bind 0 0
当我启动容器时,数据集已被挂载,但ls -la /mnt/mydataset
容器中显示nobody:nogroup
的不是user1:user1
,这意味着所有文件都是只读的。
知道如何在挂载目录中获取正确的权限吗?
答案1
如果确实mycontainer
是无特权的,那么它的所有者可能无权访问该路径/pool/mydataset
。无特权容器中的用户的 uid 在主机上的偏移量是容器所有者的 uid,因此容器内部的 uid 与主机上的 uiduser1
不同。user1
您可以检查主机上的哪个用户拥有该容器
sudo ls -l /pool/lxc | grep mycontainer
(sudo
可能不需要,具体取决于/pool/lxc
的权限,但ls
无论如何都应该足够安全以 root 身份运行。接下来,sudo
如果权限允许,可以省略需要的地方)。例如,我得到drwxr-xr-x 4 100000 100000 5 Apr 22 11:37 mycontainer
显示容器所有者的 uid 和 gid 是 100000(我们看到的是 uid 而不是名称,因为该用户在主机上不存在)。
测试
/pool/mydataset
的权限sudo ls -l /pool | grep mydataset
(或其sudo ls -l /pool/mydataset
内容)。如果您希望文件在容器内可写入,则只需确保您
mycontainer
希望能够写入的任何用户/pool/mydataset
在主机上具有执行此操作的权限。例如,root
在mycontainer
主机上有 uid 100000,如果user1
在中mycontainer
有 uid 1001(使用id user1
从容器内部) 那么在主机上它的uid将是101001。
您可以通过允许主机上的每个人/pool/mydataset
写入
sudo chmod -R o+w /pool/mydataset
(注意:这将在内部递归添加权限/pool/mydataset
),或者更好的方法是确保组中的用户user1
具有写权限(如果没有,则使用递归设置sudo chmod -R g+w /pool/mydataset
),然后将容器的所有者添加到组user1
中
sudo usermod -a -G user1 <username>
(在我上面的例子中,我们看到主机上没有用户拥有该容器,所以我们应该首先创建一个 uid 和 gid 为 100000 的用户,
adduser --no-create-home --uid 100000 --disabled-password --disabled-login <username>
当然,你可能希望只向user1
容器内部授予权限,因此创建一个用户,并赋予其主持人uid 并将其添加到user1
主机上的组,例如 101001。)
您还可以使用以下方式获得核并将/pool/mydataset
的mycontainer
根所有权授予
sudo chown -R 100000:100000 /pool/mydataset
但这可能会影响主机上其他用户访问数据。
完成此操作后,您设置的挂载应该mycontaier
根据需要允许内部写入权限。