我有一个 linux 服务器,我想用它来在公司的用户之间共享文件。用户将使用 sftp 或安全 shell 访问机器。
这是我所拥有的:
光盘 /home ls -l drwxrwsr-x 5 userA 员工 4096 Jul 22 15:00 共享 (其他列表省略)
我希望员工组中的所有用户都能够创建、修改、删除共享文件夹中的任何文件和/或目录。我根本不希望其他任何人访问该文件夹。
我有:
通过修改 /etc/group 并运行 grpconv 更新 /etc/gshadow 将用户添加到人员组
运行 chown -R userA.staff /home/shared
运行 chmod -R 2775 /home/shared
现在,staff 组中的用户可以创建新文件,但不允许打开目录中的现有文件进行编辑。我怀疑这是由于与每个用户关联的主要组 id 仍然设置为创建用户时创建的组。因此,用户“userA”的 PGID 为“userA”。
如果我能提供帮助,我宁愿不将主要用户组更改为“员工”,但如果这是最简单的选择,我会考虑。
而且,一个主题的变体,我想对另一个目录做同样的事情,但也允许 apache 用户读取目录中的文件并为它们提供服务。
设置它的最佳方法是什么?
你所拥有的实际上看起来是正确的。您在目录上设置了 setgid 位,因此创建的新文件应该继承该
staff
组。不过,它们仍然归创作者所有。我怀疑问题是umask
for your users 默认为022
or even077
,这意味着他们创建的新文件默认情况下不会具有组写入权限。用户/组所有权是正确的,但组权限不允许组的其他成员写入(甚至可能读取)文件。staff
在组中选择一个用户并将其设置umask
为002
或007
,这意味着新文件将是所有者和组可写的。我怀疑这将解决问题:此外,您注意到您根本不希望
staff
组外的任何人都可以访问该目录。您应该修改目录权限来2770
实现这一点,否则非staff
将能够读取(但不能修改)目录中的文件。对于关于
apache
用户的最后一个问题,最简单的方法可能是将该用户添加到staff
组中。我同意他的发现。关于 FUSE 文件系统守护进程。我已经重写了有关如何在http://airkayu.com/node/24上轻松完成用户之间的本地共享的程序,以防万一您仍然处于迷宫中。
问题是 sftp 守护进程不接受登录脚本,并提出了一个不允许写入组的 umask。
为了解决这个问题,创建一个设置 umask 的脚本,然后运行 sftp 服务器: cat /usr/lib/openssh/sftp-server-prot umask 02 exec /usr/lib/openssh/sftp-server
然后编辑 ssh/sshd_config 以使用上面的包装脚本: Subsystem sftp /usr/lib/openssh/sftp-server-prot
然后重启sshd。