访问控制列表
直接的答案是访问控制列表(ACL)。是的,您可以找到一个反例,但是它们在实践中已经足够好(不同于仅团体可写性,这要求用户一直在思考)。他们只需要系统管理员(root)定义组,如果您只希望由命名组共享文件(root可以选择委托,例如通过接受LDAP中的组,但这是另一回事了)。
您确实需要参与的用户的umask为022。如果他们常规地创建无法被世界读取的文件,则该方案将不起作用。但是,如果它们具有受限的umask,则可能是因为他们无论如何都不想共享文件。
启用ACL
Ubuntu默认情况下不启用ACL,因此需要一次性管理员。编辑/etc/fstab
使用您喜欢的编辑器,并改变相应要共享文件文件系统的每一行:新增acl
的选项。(确保不要更改任何其他行,并且不要使用包裹长行的编辑器。)这是acl
添加了选项的示例行:
UUID=5e1ec7ed-face-dead-beef-c011ec7ab1e5 / ext4 errors=remount-ro,acl 0 1
为了使该选项第一次生效,请使用以下命令(对于每个文件系统):
sudo mount -o remount,acl /
从acl
软件包中安装ACL工具。
设置共享目录
要由组共享文件mygroup
:
setfacl -m group:mygroup:rwx /path/to/shared/root
setfacl -d -m group:mygroup:rwx /path/to/shared/root
如果人们创建文件并将它们复制到共享目录,则这些文件将是世界可读的(由于使用umask),并且该组中的任何人都可以添加和删除文件(因为该组是可写的)。人们无法编辑彼此的文件,但这是一件好事,否则您会立即编辑冲突。
如果您没有unix组,则可以一个一个地添加用户:
setfacl -m user:bob:rwx /path/to/shared/root
setfacl -d -m user:bob:rwx /path/to/shared/root
版本控制
如果确实希望人们能够在适当位置编辑文件,则还需要一些东西来防止编辑冲突。那是版本控制。
您不需要任何这些即可共享git存储库。您知道有一些解决方案,例如gitosis,所以请使用它们。