jb.*_*jb. 13 permissions file-sharing
我想要一个具有以下属性的目录:
它不能使用普通的文件权限来完成(因为权限保留在副本中)。
这是我在网上找到的:
一些用例:
编辑
AFAIK 设置 SGID 位还不够,它只影响新创建的文件 --- 以及这些用例的基本工作流程 ivnolves 复制和其他操作(切割文件的 gid 不变)
直接的答案是访问控制列表 (ACL)。是的,你可以找到一个反例,但它们在实践中已经足够好了(不像单纯的组可写性需要用户一直考虑它)。他们需要的是系统管理员 (root) 定义组,如果您希望文件仅由指定组共享(root 可以选择委派,例如通过接受来自 LDAP 的组,但那是另一回事)。
您确实需要参与用户的 umask 为 022。如果他们经常创建非世界可读的文件,则此方案将不起作用。但是如果他们有一个限制性的 umask,那大概是因为他们无论如何都不想共享文件。
Ubuntu 默认不启用 ACL,因此需要一次性管理。编辑/etc/fstab使用您喜欢的编辑器,并改变相应要共享文件文件系统的每一行:新增acl的选项。(确保不要更改任何其他行,也不要使用包含长行的编辑器。)这是acl添加了选项的示例行:
UUID=5e1ec7ed-face-dead-beef-c011ec7ab1e5 / ext4 errors=remount-ro,acl 0 1
Run Code Online (Sandbox Code Playgroud)
要使该选项第一次生效,请使用如下命令(对于每个文件系统):
sudo mount -o remount,acl /
Run Code Online (Sandbox Code Playgroud)
从acl软件包安装 ACL 工具。
要让组共享文件mygroup:
setfacl -m group:mygroup:rwx /path/to/shared/root
setfacl -d -m group:mygroup:rwx /path/to/shared/root
Run Code Online (Sandbox Code Playgroud)
如果人们创建文件并将它们复制到共享目录,这些文件将是世界可读的(因为 umask)并且组中的任何人都可以添加和删除文件(因为该组是组可写的)。人们不能编辑彼此的文件,但这是一件好事,否则您会立即遇到编辑冲突。
如果没有unix组,可以一一添加用户:
setfacl -m user:bob:rwx /path/to/shared/root
setfacl -d -m user:bob:rwx /path/to/shared/root
Run Code Online (Sandbox Code Playgroud)
如果您确实希望人们能够就地编辑文件,您还需要一些东西来防止编辑冲突。这就是版本控制。
您不需要任何这些来共享 git 存储库。你知道有像 gitosis 这样的解决方案,所以使用它们。
只需这样做:
mkdir /src/teamA
addgroup teamA
chgrp teamA /src/teamA
chmod g+rws /src/teamA
Run Code Online (Sandbox Code Playgroud)
现在teamA小组中的每个人都可以制作里面的一切/src/teamA
神奇之处在于目录上的 sgid(设置组 ID)位。