我有以下设置:
有多个用户 /home/user1、/home/user2 等等。此外,还有一个用户 /home/sftp-all。文件夹 /home/sftp-all/shared 安装在每个其他用户的 /home 目录中,例如 /home/user1/shared。所有用户 user1、user2、...、sftp-all 都是名为“sharegroup”的组的成员。
现在的问题是,如果其中一个用户(user1,...)写入该文件夹,则新文件归该用户及其主要组所有(例如 user1:user1,...)。相反,我希望它归 user1:sharegroup 所有。有什么办法可以解决这个问题吗?提前谢谢!
答案1
您应该研究在文件系统上使用 ACL 权限。您可以设置“默认”权限,并且可以拥有多个组、用户等。
https://help.ubuntu.com/community/FilePermissionsACLs
有关详细信息,请参阅此其他帖子的答案:
https://superuser.com/questions/381416/forcing-group-and-permissions-for-created-file-inside-folder
答案2
设置 sgid 位,以便它在目录上启用/home/sftp-all/shared
,并创建该目录的组sharegroup
。
$ chmod g+s /home/sftp-all/shared
最后确保其中所有已存在的文件/home/sftp-all/shared
都已将其组设置为sharegroup
。可以这样做:
$ chgrp sharegroup /home/sftp-all/shared/*
通过设置目录的 xgid 位,您可以强制在目录中创建新文件时传播该目录所属的组。此方法仅适用于新创建的文件,例如,如果有人将文件从系统上的其他地方移动到此目录中,它不会强制执行组所有权。
但是,鉴于这是一个 SFTP 服务器应用程序,我想不出用户可以通过任何方式在 SFTP 之外将文件移动到该目录中。