迁移具有相同权限的挂载不起作用

迁移具有相同权限的挂载不起作用

我有两个坐骑/mount1/mount2。我运行了命令:

rsync -azrt /mount1/* /mount2/

克隆从/mount1到 的所有内容/mount2

然后我改变了/etc/fstab (见下文)删除/mount1并安装到,/mount2/mount1由于权限原因,事物(包括我的电子邮件服务器本地用户文件夹)不再正常工作,即使在将权限与安装前后的安装进行比较时,它们是相同的?!


/etc/fstab之前(工作):

UUID="3999A4F22570EAC4" /mount2   ntfs-3g nobootwait,permissions,locale=en_US.utf8    0   2
mhddfs#/mount3,/mount4 /mount1 fuse defaults,allow_other,nobootwait,nonempty,uid=1000,gid=1000,umask=007 0 0

/etc/fstab之后(不工作):

UUID="3999A4F22570EAC4" /mount1   ntfs-3g nobootwait,permissions,locale=en_US.utf8    0   2

哪里UUID="3999A4F22570EAC4"/mount2前面的内容/mount1

答案1

通用保险丝选项

1)我注意到文件系统挂载allow_other上没有设置ntfs-3g。 FUSE默认不允许其他用户访问。 mhddfs是一个 FUSE 文件系统,也是ntfs-3g(但请参阅下一节)。

2)当你使用 时allow_other,你还要考虑权限检查。 FUSE默认不检查权限。因此,只需添加allow_other到文件系统即可使其可供所有用户访问。这可能是不可取的;单独的用户 ID 通常用于包含服务,例如 CUPS 打印机守护程序,以防它们受到网络攻击。要在通用 FUSE 文件系统上启用用户/组/模式权限检查,该选项称为default_permissions

NTFS-3G 特定行为

1 -> 根据其man页面,默认ntfs-3g启用。 allow_other(FUSE 默认值只允许 root 用户执行此操作。不过,这不是问题,因为您使用的mount是 root 用户身份运行的)。

2 -> 听起来该ntfs-3g选项permissions为您启用了权限检查。否则,您不会注意到任何权限错误。 (SELinux 可能可以,但您没有使用 SELinux,因为您使用的是 Ubuntu。Ubuntu AppArmor 被描述为基于路径,因此根据您的描述,我认为它不太可能导致问题)。

论文

我相信您的 ntfs-3g 挂载已设置为执行权限检查,并且 FUSE 不会单独阻止其他用户的访问。这对于fstab用于提供系统目录(例如/var/mail.

但是,您的mhddfs安装本身不会执行权限检查,因为它没有default_permissions设置。这可以解释为什么该mhddfs设置能够工作(尽管选项uid,gid,umask只允许访问您的用户 ID 1000)。您没有显示底层文件系统,所以我不知道它们是否正在检查权限,但我怀疑这只mhddfs是以 root 身份运行并避免以这种方式进行权限检查。

这是您可以在安装上运行的测试mhddfs。它应该显示是否正在检查权限位。

mkdir dir
chmod a-w dir  # make directory read-only
touch dir/t    # attempt writing to directory

要解决权限错误,您需要确定哪些用户应该拥有对相关文件的访问权限,并相应地设置正确的权限。 您从未说过哪个用户(甚至哪个软件)未通过权限检查,因此很难说得更具体。

相关内容