安装为,循环仍然分配根所有权

安装为,循环仍然分配根所有权

我正在尝试从文件设置虚拟驱动器。然后该文件将被写入闪存设备(不相关)。因为创建和操作虚拟驱动器将在脚本中进行,所以我需要在用户空间中执行此操作,即,而不是以 root 身份执行。该脚本用于为闪存设备构建和创建映像;因此,以 root 身份运行将会出现问题。

为了将该文件安装为虚拟驱动器,我将以下行添加到 /etc/fstab 中:

/home/user/drive.img /home/user/mnt ext4 loop,rw,user,noauto,noexec 0 0

问题是,当我挂载虚拟驱动器时,root 获得了 ~/mnt 的所有权,这违背了以普通用户挂载它的目的。

我知道其他文件系统允许您在指定 uid/gid 时挂载,但虚拟驱动器必须是 ext4 才能与现有进程兼容。我尝试了udisksctl,但它需要根身份验证才能环回。

我将尝试挂载然后更改所有权(以 root 身份),但永远不要卸载它。我将进行“同步”,然后拍摄虚拟驱动器的快照。我不喜欢它,因为它不干净,但它现在可能有用。

答案1

您没有提到的步骤是如何创建 ext4 文件系统,这是问题的根源。使用mkfs.ext4 /home/user/drive.img会创建一个root拥有的root inode,所以当你挂载它时,它仍然属于root。

解决方案是添加选项-E root_owner,使其属于正在运行的用户mkfs.ext4,甚至-E root_owner=$uid:$gid属于某些明确的数字用户和组 ID。 (另一个解决方案是使用debugfs(Fedora 的包e2fsprogs)来编辑 inode。)这个例子对我有用:

uid=$(id -u)
gid=$(id -g)
rm -f /tmp/ext4fs
truncate -s 50M /tmp/ext4fs
if true
then mkfs.ext4 -E root_owner=$uid:$gid /tmp/ext4fs
else mkfs.ext4 /tmp/ext4fs
     debugfs -w -R "set_inode_field . uid $uid" /tmp/ext4fs
     debugfs -w -R "set_inode_field . gid $gid" /tmp/ext4fs
fi
# echo '/tmp/ext4fs /tmp/mymnt ext4 loop,rw,user,noauto,noexec' >>/etc/fstab
mkdir -p /tmp/mymnt
mount /tmp/ext4fs
ls -lRa /tmp/mymnt
touch /tmp/mymnt/afile
ls -l /tmp/mymnt
umount /tmp/ext4fs

安装时将ls安装点显示为

drwxr-xr-x  3 meuh  users  1024 May 15 21:04 .

并允许我在那里创建一个文件。

相关内容