在本地计算机上共享文件的简便方法


13

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

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

使用普通文件权限无法完成此操作(因为权限保留在副本中)。

这是我在网上发现的:

一些用例:

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

编辑

AFAIK设置SGID位不起作用,它仅影响新创建的文件---和这些用例的基本工作流程ivnolves复制和其他操作(不改变文件的gid)

Answers:


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

为了使该选项第一次生效,请使用以下命令(对于每个文件系统):

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,所以请使用它们。


如果自动继承没有被丢弃(忽略)在目标目录级别设置的默认acl的cp(和mv?)破坏,则ACL可以完美地工作。
有用的

2

只需执行以下操作:

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

现在teamA小组中的每个人都可以将所有东西都放入里面/src/teamA

魔术是目录上的sgid(设置组ID)位。


AFAIK它不起作用,请参阅更新的帖子
jb。

1

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

它允许多个本地用户从共享目录及其子目录读取和写入(创建,删除,重命名,修改...)所有文件(包括新创建的文件)。每个用户将看到属于它们的文件和文件夹(包括新创建的文件和文件夹)。

简要地说,您跑步

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

使/ home / shared对user1,user2和user3可用。

使用说明

看到 完整说明, Bindfs-SharedDirectoryLocalUsers(Ubuntu文档),包括永久性设置(每次打开计算机时)。我在自己的计算机上将其用于多个目录,每个目录具有不同的共享组(一个文件夹可用于所有帐户,另一个文件夹仅适用于工作帐户,另一个文件夹仅适用于个人帐户)。

从帖子:

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

...

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

访问控制列表(ACL)

文档说明:

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

有关更多详细信息,请参见Gilles答案


如果您无法在oneiric上添加bindfs,可以在此处获取用户创建的包bugs.launchpad.net/ubuntu/+source/bindfs/+bug/851600
david.libremone 2011年

-3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.