如何在 Linux 上设置共享目录?

如何在 Linux 上设置共享目录?

我有一台 Linux 服务器,我想用它来在公司用户之间共享文件。用户将使用 sftp 或安全 shell 访问该机器。

以下是我所拥有的:

cd /主页
ls -l
drwxrwsr-x 5 userA 员工 4096 7月22日 15:00 分享
(其他列表省略)

我希望员工组中的所有用户都能够创建、修改、删除共享文件夹中的任何文件和/或目录。我根本不希望其他任何人有权访问该文件夹。

我有:

  1. 通过修改 /etc/group 并运行 grpconv 来更新 /etc/gshadow,将用户添加到 staff 组

  2. 运行 chown -R userA.staff /home/shared

  3. 运行 chmod -R 2775 /home/shared

现在,staff 组中的用户可以创建新文件,但不允许打开目录中的现有文件进行编辑。我怀疑这是由于与每个用户相关联的主组 ID 仍设置为创建用户时创建的组。因此,用户“userA”的 PGID 是“userA”。

如果可以的话,我宁愿不将用户的主要群组更改为“员工”,但如果这是最简单的选择,我会考虑。

并且,主题的一个变体,我想对另一个目录执行同样的事情,但也允许 apache 用户读取目录中的文件并为它们提供服务。

设置它的最佳方法是什么?

答案1

您实际上所拥有的看起来是正确的。您已在目录中设置了 setgid 位,因此新创建的文件应继承该staff组。但它们仍然归创建者所有。我怀疑问题是umask您的用户的默认为022或甚至077,这意味着他们创建的新文件默认不会具有组写入权限。用户/组所有权是正确的,但组权限不允许组中的其他成员写入(甚至可能读取)文件。

选择组中的一名用户staff并将 设置umask002007,这意味着新文件将具有所有者和组可写权限。我怀疑这会解决问题:

bash$ umask
0022
bash$ umask 002
bash$ umask
0002

此外,您指出您根本不希望组外的任何人staff对该目录有任何访问权限。您应该修改目录权限以2770实现此目的,否则非用户staff将能够读取(但不能修改)目录中的文件。

对于有关用户的最后一个问题apache,最简单的方法可能是将该用户添加到staff组中。

答案2

我同意他的发现。关于 FUSE 文件系统守护进程。我已经重写了如何让用户之间的本地共享在http://airkayu.com/node/24以防万一你仍然在迷宫里。

答案3

问题是 sftp 守护进程不采用登录脚本,并提出一个不允许写入组的 umask。

为了解决这个问题,创建一个设置 umask 的脚本,然后运行 ​​sftp 服务器:cat /usr/lib/openssh/sftp-server-prot umask 02 exec /usr/lib/openssh/sftp-server

然后编辑 ssh/sshd_config 以使用上述包装脚本:子系统 sftp /usr/lib/openssh/sftp-server-prot

然后重新启动 sshd。

相关内容