我可以在ext4外部硬盘驱动器的计算机之间移植用户权限吗?


16

我有一个外部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在磁盘上运行。

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


我不确定是否跟随您。您是否尝试在外部驱动器中设置权限?
Ramesh 2014年

1
是。那是件好事儿吗?
卢勋爵。

Answers:


19

这就是多用户系统的问题,尤其是如果您拥有多个系统。;)没有真正好的方法来做您想要的事情。我想到的方法是

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

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

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

第一点和第二点很容易实现(chownchmod)。第三点有点棘手。

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

权限位有点难。新创建的文件/目录的权限(除其他因素外)受的影响umask,该位掩码指示未明确声明设置的位。umask例如022,一个通用值是,表示通常不应该设置»group«和»others«的写位。您可以将更umask改为002,告诉您不希望清除该组的写许可权,但不利之处是您无法基于目录设置此值,并且通常不希望拥有该许可权。您为创建的每个文件设置的主要组。

可以使用ACL解决此问题:在ACL中,您可以设置maskdefault权限集,该权限集适用于使用此ACL集在目录内创建的所有文件和目录。因此,您的问题的一种可能的解决方案是

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

请参阅setfacl(1)和,acl(5)以获取更多详细信息。


1
在ext4中,spinics.net / lists / linux-fsdevel / msg57240.html上有一个补丁供他和gid映射使用,但我认为它并没有实现……
Rmano 2014年

11

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

mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1

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

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


bindfs相当慢。可能是因为它是FUSE文件系统。
纳文

4

文件的所有者和组存储为数字。因此,文件将由uid = 1005拥有,无论其连接到的系统上的哪个用户(或根本没有用户)。

将用户/组更改为无人将无法解决您的问题。然后,将只允许无人用户(或无人组的成员)访问文件。

不幸的是,我认为没有办法禁用ext4上的权限检查。例如,请参见是否可以禁用ext3或ext4文件系统上的文件权限?


2

安德烈亚斯·维斯(Andreas Wiese)表示,如果您在所有主机上拥有通用的组ID,则可以使用setgidbit和ACL 解决问题

我问问题Linux发行版中的预定义组ID?

经过自己的研究,发现该组存在于所有涉及的发行版中:Debian,Ubuntu,RedHat,Fedora,CentOS,Suse,FreeBSD,OpenBSD,NetBSD,MacOSX,Solaris上的sys组共享ID 3

有了这个:

$ sudo chgrp -R sys /mnt/data/dir
$ sudo chmod -R g+s /mnt/data/dir
$ sudo setfacl -R -m g:sys:rwx /mnt/data/dir
$ sudo setfacl -R -d -m g:sys:rwx /mnt/data/dir

和它的味道:

$ sudo adduser user sys

user可以读取/写入上的任何文件/dir

大多数工作可能会做setgid一些,但不幸的是,您通常无法控制umask。因此,ACL用于提供完整的解决方案。

也可以看看:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.