我可以跨计算机移植 ext4 外置硬盘的用户权限吗?

Lor*_*oh. 17 permissions ext4 external-hdd

我有一个外部 USB 3 磁盘驱动器(2TB 容量),它很可能会在机器之间移动。磁盘有一个 GUID 分区表和一个 ext4 分区。除非我提升进程 ( sudo),否则我无法写入磁盘。

到目前为止,我正在考虑尝试以下一种或两种方法,并想知道每种方法的缺点 -

  1. chmod 777 /mnt/externalDrive
  2. chown nobody:nogroup /mnt/externalDrive

如果我授予 777 权限并且 user1 (UID:1005) 写入它,然后我将磁盘移动到另一台 user7 是 UID:1005 的计算机,会发生什么?user7 是否成为该计算机上文件的所有者?在我看来,我将不得不定期chown -R nobody:nogroup /mnt/externalDrive在磁盘上运行。

我正在考虑的任何一种明显的不良做法是什么?磁盘很可能包含视频、音乐和图片,它们不需要像某些财务数据那样受到保护。

And*_*ese 20

这就是多用户系统的问题,尤其是当您拥有多个用户系统时。;) 没有什么好方法可以做你想做的事。想到的方法是

  • 在您使用外部驱动器的每台机器上为您的帐户使用相同的 UID(实际上不可行,因为很可能并非所有机器都在您的控制之下)
  • 使用不知道所有者/组 concpt 的文件系统(想到 FAT 或 NTFS,但是......啊,不)

最有效的方法是回归常规做法。在大多数(至少)Linux 系统上,存在一些通常具有通用 GID 的组。例如users,它100在大多数 Linux 发行版上都有 GID 。如果您可以设法在该组中拥有各自的用户帐户,则可以

  1. 使您的驱动器上的所有文件和目录归该组所有
  2. 以某种方式设法对这些文件和目录拥有适当的组权限
  3. 以某种方式设法使用适当的组所有权创建新文件。权限。

第一点和第二点很容易完成(chownchmod)。第三点获取有点棘手。

“组所有权”部分相对简单:您可以在驱动器上的所有目录上设置 SGID 位。应用于目录的 SGID 位告诉内核以 BSDish 的方式运行:BSD 使在特定目录组下创建的每个文件/目录都不是由创建文件/目录的进程的主要组拥有(如 Linux 那样),但是由父目录的所有者。

权限有点难。新创建的文件/目录的权限(除其他外)受umask, 位掩码的影响,如果未明确说明,则告诉哪些位不要设置。umask例如022,一个常见的值是,这意味着通常不应设置 »group« 和 »others« 的写入位。您可以更改您的umaskto 002,告诉您不希望为该组清除写权限,但缺点是您无法基于目录设置此值,并且您通常不希望为该组设置写权限为您创建的每个文件设置的主要组。

这可以通过使用访问控制列表来解决:在ACL中,你可以设置maskdefault权限设置,它适用于这个ACL集的目录中创建的所有文件和目录。因此,您的问题的一种可能解决方案是

  • 确保您是要在其上使用外部驱动器的所有系统上的公共组的成员
  • 使驱动器上的所有文件和目录归该组所有,并在所有目录上设置 SGID 位
  • 更改所有目录的 ACL 以包含一个掩码和默认权限,告诉内核创建每个新文件/目录,并为该组设置写权限。

请参阅setfacl(1)acl(5)了解更多详细信息。


Mic*_*rin 11

还有另一个类似的问题,建议使用 bindfs:

mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1
Run Code Online (Sandbox Code Playgroud)

OSX 用户建议noowners安装选项如下所述:

忽略整个卷的所有权字段。这会导致所有对象显示为用户 ID 99 和组 ID 99 所有。用户 ID 99 被解释为当前有效的用户 ID,而组 ID 99 被直接使用并转换为“未知”。