在本地机器上共享文件的好方法

jb.*_*jb. 13 permissions file-sharing

我想要一个具有以下属性的目录:

  • 许多用户可以将文件复制到其中
  • 这些文件可以被这些用户删除/更改(用户 A 可以删除/修改复制到此目录中的文件)

它不能使用普通的文件权限来完成(因为权限保留在副本中)。

这是我在网上找到的:

一些用例:

  • 在本地机器上共享音乐
  • 简单的 git 存储库共享(只是让一个裸存储库可以写给很多人)---我知道有像 gitosis 这样的解决方案
  • 允许许多开发人员修改 php 应用程序的测试实例而不给他们 root(我猜他们会复制文件)---我正在领导一个非营利性初级开发人员团队,我需要保持简单!

编辑

AFAIK 设置 SGID 位还不够,它只影响新创建的文件 --- 以及这些用例的基本工作流程 ivnolves 复制和其他操作(切割文件的 gid 不变)

Gil*_*il' 9

访问控制列表

直接的答案是访问控制列表 (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
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 这样的解决方案,所以使用它们。


she*_*lic 2

只需这样做:

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)位。


Dav*_*ill -3

您可以将 shellholic 的解决方案与 cron 作业结合起来,该作业每 15 秒或类似的操作更新该文件夹中所有文件的 gid。