我正在尝试在 AWS 上设置一个 SFTP 服务器,供多个客户安全地上传数据。重要的是,他们不能看到任何其他客户的数据,为此,我需要使用 ChrootDirectory 来限制目录
我的 sshd_config 具有以下内容:
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /home/chroot/ftptest/
AllowTcpForwarding no
ForceCommand internal-sftp
如果我注释掉 ChrootDirectory 行,一切都会正常工作,只是你无法看到系统上的所有文件。我根据说明配置了所有内容这里使用 vsftpd。我使用 ssh 密钥来控制对每个客户帐户的访问,如亚马逊的说明。我正在使用 Amazon AMI。
编辑:我将 chroot 目录更改为 /home/chroot/ftptest/,并创建了具有以下权限的目录:
ls -ld / /home /home/chroot /home/chroot/ftptest/
dr-xr-xr-x 25 root root 4096 Feb 23 03:28 /
drwxr-xr-x 6 root root 4096 Feb 23 20:26 /home
drwx--x--x 3 root root 4096 Feb 23 20:27 /home/chroot
drwxr-xr-x 2 ftptest ftptest 4096 Feb 23 20:27 /home/chroot/ftptest/
它仍然不起作用。在 /var/log/secure 中我看到
Authentication refused: bad ownership or modes for directory /home/ftptest
即使 /home/ftptest 不是我尝试 chroot 到的目录。为什么它会针对该目录抛出错误?这可能是 ~/.ssh 目录的问题吗?
答案1
“匹配组”部分与用户的 UNIX 帐户组匹配,因此如果 ftptest 不在组 sftponly 中或者不存在,则添加它:
# groupadd sftponly
# usermod -a -G sftponly ftptest
这应该可以让它工作,问题是如果你将其他任何人添加到该组,他们都会得到相同的文件夹,所以如果你想要一个用户被 chroot,简单的方法是执行以下操作
Match User ftptest
ChrootDirectory /home/chroot/ftptest
ForceCommand internal-sftp
AllowTcpForwarding no
现在,ftptest 连接并获取自己的文件夹。如果您有很多用户,请将他们添加到组 sftponly 并使用此配置:
Match group sftponly
ChrootDirectory /home/chroot/%u
ForceCommand internal-sftp
AllowTcpForwarding no
这将为所有这些文件夹提供他们自己的沙盒文件夹(确保 mkdir 他们的文件夹并赋予其正确的权限)。
答案2
chroot 目录应该由 root 拥有。但您可以在其下创建一个具有用户权限的文件夹(例如文件、上传)。