启用 ChrootDirectory 会破坏我在 AWS 上的 SFTP,并会因错误的目录而产生错误

启用 ChrootDirectory 会破坏我在 AWS 上的 SFTP,并会因错误的目录而产生错误

我正在尝试在 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 拥有。但您可以在其下创建一个具有用户权限的文件夹(例如文件、上传)。

相关内容