我有一台 Linux 服务器,我想用它来在公司用户之间共享文件。用户将使用 sftp 或安全 shell 访问该机器。
以下是我所拥有的:
cd /主页 ls -l drwxrwsr-x 5 userA 员工 4096 7月22日 15:00 分享 (其他列表省略)
我希望员工组中的所有用户都能够创建、修改、删除共享文件夹中的任何文件和/或目录。我根本不希望其他任何人有权访问该文件夹。
我有:
通过修改 /etc/group 并运行 grpconv 来更新 /etc/gshadow,将用户添加到 staff 组
运行 chown -R userA.staff /home/shared
运行 chmod -R 2775 /home/shared
现在,staff 组中的用户可以创建新文件,但不允许打开目录中的现有文件进行编辑。我怀疑这是由于与每个用户相关联的主组 ID 仍设置为创建用户时创建的组。因此,用户“userA”的 PGID 是“userA”。
如果可以的话,我宁愿不将用户的主要群组更改为“员工”,但如果这是最简单的选择,我会考虑。
并且,主题的一个变体,我想对另一个目录执行同样的事情,但也允许 apache 用户读取目录中的文件并为它们提供服务。
设置它的最佳方法是什么?
答案1
您实际上所拥有的看起来是正确的。您已在目录中设置了 setgid 位,因此新创建的文件应继承该staff
组。但它们仍然归创建者所有。我怀疑问题是umask
您的用户的默认为022
或甚至077
,这意味着他们创建的新文件默认不会具有组写入权限。用户/组所有权是正确的,但组权限不允许组中的其他成员写入(甚至可能读取)文件。
选择组中的一名用户staff
并将 设置umask
为002
或007
,这意味着新文件将具有所有者和组可写权限。我怀疑这会解决问题:
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。