这是针对 FreeBSD UFS 的,但我希望它适用于任何类型的 POSIX 样式文件系统。
这是上下文:
- 格式化为 UFS 的外部卷。
- 有多个 FreeBSD 工作站,每个工作站都由拥有它们的用户以自己的方式进行配置。
- 对于 来说
$REASONS
,通过 NFS、Samba 等进行网络和文件共享不是一种选择。
外部卷从一个用户传递到另一个用户,每个用户都使用该卷上的数据,并且需要完全访问权限才能读取、写入和执行该数据。用户将创建新的文件和文件夹。他们会定期删除和修改文件和文件夹。
由于系统之间的 ID 可能不同,通用组方法将不起作用。我已经尝试过设置开放权限,例如 777,我尝试过 ACL,我简要地研究了粘性位。这些解决方案都不起作用。我会遇到一个问题,用户 A 会创建一个文件,但用户 B 无法修改它。
在 NTFS 上有“每个人”的概念,并将其设置为“完全控制”。如何使用 UFS 等 POSIX 文件系统获得类似的行为?
编辑:(澄清 777 方法失败的原因)。
john@pc1 /mnt# sudo chmod 777 /media/external_usb/
john@pc1 /mnt# ls -larths /media/external_usb/
total 18
1 drwxrwxrwx 2 john john 2B Dec 16 12:41 ./
17 drwxr-xr-x 9 root wheel 9B Dec 16 12:41 ../
john@pc1 ~> touch /media/external_usb/test
john@pc1 ~> ls -larths /media/external_usb/test
1 -rw-r--r-- 1 john john 0B Dec 16 12:43 /media/external_usb/test
# Drive is moved from pc1 to pc2
adam@pc2 ~> touch /media/external_usb/test
touch: /media/external_usb/test: Permission denied
答案1
当您将目录权限设置为 777 时,目录中的每个用户的文件仍然归该用户/组所有——特别是他们的 UID:GID。并且,文件权限不允许“任何人”更改文件。在您的示例中,即使任何人都可以访问该文件所在的目录,该文件也只能由 john rw。
为了执行您想要的操作,在将驱动器移动到另一个系统之前,john 需要将文件的权限设置为 666(任何人都可以读写)。非常没有安全感,但显然你被困住了。
如果您确实希望人们能够执行该文件,那么您需要将该文件的权限设置为 777 而不是 666。
这不是 BSD 或 UFS 问题...您在几乎任何 UNIX 操作系统和文件系统上都会遇到同样的问题。