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

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

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

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

无法使用正常文件权限来完成此操作(因为复制时保留了权限)。

以下是我在网上找到的:

一些用例:

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

编辑

据我所知,设置 SGID 位是不够的,它只会影响新创建的文件 --- 以及这些用例的基本工作流程 ivnolves 复制和其他操作(保持文件的 gid 不变)

答案1

访问控制列表

直接的答案是访问控制列表 (ACL)。是的,你可以找到一个反例,但它们在实践中已经足够好了(不像单纯的组可写性,它需要用户一直考虑它)。它们确实需要的是,如果您希望文件仅由命名组共享(root 可以选择委派,例如通过接受来自 LDAP 的组,但那是另一回事),系统管理员(root)定义组。

您确实需要参与用户的 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 的解决方案,因此请使用它们。

答案2

只需这样做:

mkdir /src/teamA
addgroup teamA
chgrp teamA /src/teamA
chmod g+rws /src/teamA

现在,teamA团队中的每个人都可以制作里面的所有东西/src/teamA

神奇之处在于目录上的 sgid(设置组 ID)位。

答案3

如果希望用户能够访问共享文件夹中的文件(例如,不同的人在不同时间登录同一台机器,需要访问相同的文件),可以使用bindfs创建共享目录。

它允许多个本地用户读写(创建、删除、重命名、修改……)共享目录及其子目录中的所有文件(包括新建文件)。每个用户都将看到属于自己的文件和文件夹(包括新建文件)。

简单来说,你运行

sudo bindfs -o perms=0700,mirror-only=user1:user2:user3 /home/shared /home/shared

使 /home/shared 可供用户 1、用户 2 和用户 3 使用。

指示

Bindfs-SharedDirectoryLocalUsers(Ubuntu 文档)了解完整说明,包括永久设置(每次打开计算机时)。我在自己的计算机上使用此功能来管理多个目录,每个目录都有不同的共享组(一个文件夹可供所有帐户使用,另一个文件夹仅供工作帐户使用,另一个文件夹仅供个人帐户使用)。

摘自帖子:

bindfs 是一个 FUSE 文件系统,用于将目录挂载到另一个位置(挂载点),并带有权限设置。它允许您从挂载点内部指定文件的所有权和权限。

...

主要的好处是在共享目录中创建的新文件将继承所有权和权限。

访问控制列表 (ACL)

文档指出:

如果你想为不同的用户和/或组设置更高级的权限,请尝试访问控制列表

吉尔斯回答更多细节。

答案4

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

相关内容