我需要 2 个 Linux 用户共享一个文件夹。在此文件夹中,用户应始终能够创建文件和子文件夹并写入任何子文件夹(无论他们是否拥有该子文件夹)。但是,他们只能编辑他们实际拥有的文件。
我尝试过使用粘滞位和 ACL,但仍然很困难。
答案1
使用 POSIX ACL 无法可靠地做到这一点——如果您默认使子目录可写,则文件也将默认变为可写。
要允许创建文件,请授予目录的写入权限 (rwx)。“默认 ACL”可帮助实现此目的:
d:g:twousers:rwX
在目录上设置(假设两个用户都在twousers
组中),所有新创建的项目都将继承该权限。要禁止修改其他用户的文件,无需执行任何操作。标准 umask 设置 (022) 已确保新创建的文件只有所有者可写 (rw/r/r)。
但是,如果目录像#1 中那样设置了“默认 ACL”,那么这些 ACL 也将添加到新创建的文件中。
(不过请记住,只有主人可以更改 (chmod) 文件的权限。因此,如果文件尚未可写,其他用户就无法将其设置为可写。)
为了禁止删除其他用户的文件,请在目录上设置粘滞位。不幸的是,它不能被继承。
如您所见,点 1 和点 2 发生冲突(默认 ACL 适用于所有对象,无论类型如何)。
你可以有点通过教用户chmod +t,g+w
创建的每个新目录来实现这一点,但这并不是特别可靠。
解决方案是使用NFSv4 ACL,可以将其标记为仅由文件或目录继承。不幸的是,Linux 本身不支持它们,需要应用内核补丁。如果你对这些东西感兴趣,nfs4acl和恩加克尔有两种实现方式。
一Windows 在这方面做得更好。