有没有一种方法可以在不同的 Linux 机器上的不同用户 (uid) 之间共享外部 USB 驱动器上的 ext3/ext4 格式的分区,而无需为此目的创建组,将分区的组所有权设置为该组,并将每个相应的用户添加到每台机器上的组中?
这意味着我需要在每台机器上拥有 root 权限……但在某些情况下我可能没有。
我正在使用该分区来存储我在 Linux 上开发的代码,并且我希望该选项是安全的……如果可能的话。
我可以使用 vfat 分区,但是我无法控制 rw 权限 + 我无法直接在目录中开发:我总是必须将目录压缩为 tar.gz,提取,工作,tar.gz,复制到外部驱动器...等等。
谢谢!
答案1
一般答案是“否”。文件系统上的 uid 和 gid 将在写入时设置,如果它们在不同的机器上不匹配,那么权限也不会匹配。
如果您不想在多台机器上对 uid/gid 进行小规模的改动,您可以尝试使用 acls 为所有机器上的所有所需用户设置所需的权限。我怀疑这会在内部使用数字 uid,因此可能会发生这种情况,即授予机器 A 上的 uid a 的帐户 foo 访问权限,将授予机器 B 上的 uid a 的随机人员 bar 访问您的文件的权限。这似乎也比它的价值更麻烦。
我认为更明智的方法是使用 tar 来迁移您的开发树。
我也曾经有过一个不成熟的想法,那就是随身携带一个 Subversion 存储库(其中的文件只有 root 才能写入,并具有适当的访问配置文件),并依靠所有要使用的机器上的 svn 服务器,但我认为这并不是非常明智。
答案2
我发现Debian、Ubuntu、RedHat、Fedora、CentOS、Suse、FreeBSD、OpenBSD、NetBSD、MacOSX、Solaris 上的sys
组共享 ID 。3
没有其他组名共享相同的 ID。即使是某些系统上的root
ID 为 的组实际上也是。在 Linux 上通常是 ,但在 BSD 上是((0
wheel
nogroup
65534
32766
将 segid 位和 ACL(包括默认值)设置为sys
外部存储上的目录:
$ sudo chgrp -R sys /mnt/data/dir
$ sudo chgmod -R g+s /mnt/data/dir
$ sudo fsetacl -R -m g:sys:rwx /mnt/data/dir
$ sudo fsetacl -R -d -m g:sys:rwx /mnt/data/dir
user
添加到组后,sys
它能够在任何主机上读取和写入/mnt/data/dir
。您不再需要sudo
每次都具有特权才能访问。
sys
组和setgid
位可以很好地完成工作,但是为了解决uname
掩码问题,您需要使用 ACL。
这是你能做的最好的事。
UNIX 不是为个人/家庭使用而设计的。它是企业/企业操作系统,没有定义跨不同主机插入可移动媒体((
也可以看看:
- https://unix.stackexchange.com/questions/273144/predefined-group-ids-across-linux-distros/
- https://unix.stackexchange.com/questions/126213/external-hard-drive-permissions-ext4/
- https://askubuntu.com/questions/12009/solving-permission-problems-when-using-external-ext4-hard-disk-with-multiple-lin/
- https://askubuntu.com/questions/252361/how-could-i-mount-an-ext4-partition-and-have-write-permission/