我在 CentOS 服务器上设置了 chroot (chroot 没有 shell 访问权限/严格为 sftp)。仅供参考,文件夹如下:
home/sftp_users/%u (root:root 750)
home/sftp_users/%u/input (site_user:sftp_users 770)
home/sftp_users/%u/input/result (site_user:sftp_users 770)
在我的 sshd.conf 文件中,我有以下内容:
Subsystem sftp internal-sftp
Match Group webrecom_sftpusers
ChrootDirectory /home/sftp_users/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
这基本上就是我想要的。如果您注意到上面我没有让用户成为其文件夹的所有者home directory
。这样做的原因是我不想让他们能够删除这些目录或更改它们的权限。否则,有人可能会在某个时候搞砸它。他们仍然可以访问,-r -w -e
因为他们属于他们的组。虽然这基本上就是我想要的,但由于他们有写入权限,input
他们可以删除result
目录。我可以通过重新创建那个文件夹来解决这个问题in PHP
。PHP 将在这些文件夹中查找要选择和运行的文件,然后返回有关它们的报告。
问题是它site_user
属于自己的组site_user
,而在 PHP 中,我只能将文件夹分配给用户所属的组。如果我添加,site_user
它sftp_users
就会卡在 CHROOT 监狱中。
我想我可以让文件夹归site_user
该site_user
组所有,并将权限设置为 0777,但是:
- 有没有其他方法可以防止用户更改权限/删除我忽略的这些目录
- 有没有办法可以添加
site_user
但sftp_users
不将其放入监狱
答案1
Match 可以采用多个条件。尝试:
Match Group webrecom_sftpusers, User !site_user