我正在尝试在 Linux 机器上设置文件夹权限。我有这个主文件夹:/home/master/staging
此文件夹包含包含用户 sftp 放置点的子文件夹。我需要为此设置文件夹权限。
我有以下用户:
主服务器 sftpuser1 sftpuser2
Master 的主目录是 /home/MASTER
我对文件夹 /home/master/staging/ 进行了以下操作:
drwxrwx---. 19 MASTER MASTER 4096 Apr 14 02:21 .
drwxrwx---. 6 MASTER MASTER 199 Mar 5 12:20 ..
drwxrwx---. 2 MASTER MASTER 10 Apr 15 00:51 MASTER
drwxrwxr-x. 2 sftpuser1 MASTER 10 Apr 15 00:28 sftpuser1
drwxrwxr-x. 2 sftpuser2 MASTER 10 Feb 15 08:02 sftpuser2
假设 MASTER 是 MASTER 组的组所有者,我阅读了以下内容:
MASTER "should" be able to read/write all folders
sftpuser1 should be able to read/write in folder /staging/sftpuser1
sftpuser2 should be able to read/write in folder /staging/sftpuser2
sftpuser1 和 2 已按以下方式设置:
usermod sftpuser1 -s /bin/false
usermod sftpuser1 -d /home/master/staging/sftpuser1
usermod sftpuser2 -s /bin/false
usermod sftpuser2 -d /home/master/staging/sftpuser2
综上所述,两个 sftp 用户都无法使用 sftp 查看自己的文件夹,并且用户 MASTER 无法在本地进入这两个 sftpuser 文件夹。所有权限都被拒绝。
我这里遗漏了什么?目标是 sftpuser1 只能看到 sftpuser1;sftpuser2 只能看到 sftpuser2;而 MASTER 应该能够看到所有这些。谢谢!
更新 #1:
MASTER 现在能够查看 sftpuser 的文件夹。组权限解决了这个问题。
答案1
不存在“组的组所有者”之类的东西(在 *nix 中也没有“文件夹”,我们称之为目录,因为它应该是目录)。在传统的 *nix 权限中,所有者是用户,还有组和其他。
由于您已经修复了 MASTER 用户的访问权限,因此您需要允许 sftpuserX 访问。但您的父目录 /home/master 仅允许 MASTER 用户和 MASTER 组访问它。这就是您的 sftpuserX 无法访问 /home/master/sftpuserX 目录的原因。
除非您在 chroot 环境中运行 sftp,否则这种设置不是一个好主意。因为如果您允许 sftpuserX 读取 /home/master 目录,他们实际上将有权访问 MASTER 用户主目录中的每个文件。
我更愿意建议您为这些用户创建一个单独的目录,例如 /home/master/sftpuserX,将其组更改为 MASTER,并允许 g+rwx(完全组访问)访问该目录(保留 sftpuserX 作为所有者和完全访问权限)。如果您确实需要从那里访问这些目录,您可以添加从 /home/master/ 到 /home/sftpuserX 目录的符号链接。
另外,可以使用 ACL 扩展权限(检查 getfacl 和 setfacl 命令)。它们允许权限具有更大的灵活性,但管理起来会变得更加复杂。