通过端口 22 的 SFTP 或通过端口 20/21 的 vsftp - 确保 FTP 访问服务器安全的最佳方式

通过端口 22 的 SFTP 或通过端口 20/21 的 vsftp - 确保 FTP 访问服务器安全的最佳方式

我已经阅读了 SF 上许多关于此问题的文章和问题,但仍然无法弄清楚我这样做的方式是否 (a) 可行,以及 (b) 安全。

该服务器在 AWS EC2 上运行,所有访问均通过 SSH 密钥进行。我也只向自己的 IP 开放端口 22,但如果我想允许其他人通过 SFTP 访问,似乎需要向全世界开放端口 22(或者花几天时间管理动态 IP 地址的防火墙规则)。这真的比端口 21 上的 vsftp 更好吗?

假设目前端口 22 上的 SFTP 是最好的,这就是我所做的:

  • 使用公钥/私钥创建“ftp”用户
  • 设置/home/ftp/.ssh/authorized_keys并测试 SSH 访问
  • 添加了一个指向的ChrootDirectory条目/etc/ssh/sshd_config/var/www/html
  • 向下调整权限/var/www,使 chroot 可以正常工作

现在,我陷入了似乎进退两难的境地,我怀疑(希望)这只是配置错误。如果 sshd_config 中没有 chroot 块,我可以通过 Putty 或 SFTP 客户端进行连接,一切都很顺利 - 除了无法访问整个文件系统。使用 chroot 块后,我Could not chdir to home directory /home/ftp在身份验证过程中遇到了错误,因为现在/home/ftp/.ssh无法访问文件夹,因此密钥不起作用。旧问题/答案建议将.ssh文件夹/var/www/html/文件夹内,但对我来说这似乎很奇怪 - 考虑到它可以被网络服务器访问,这样做真的可以吗?

有没有更“正确”的方法让用户通过 SSH 密钥连接,然后仅限于 /var/www/html?

答案1

在您的 OpenSSH 配置中,您可以将一些配置放入匹配块中。这允许您为不同的用户/组/网络设置不同的配置。

因此,您可以将所有 sftp 用户放入一个组 sftpd,然后添加这样的阻止。此强制 chroot 和强制 sftp 仅适用于该组。然后您的主帐户将能够正常使用 shell。

Match Group sftp
    ChrootDirectory /var/www/
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

.ssh 文件夹位于 /var/www/html/ 文件夹中,但这对我来说似乎很奇怪 - 这样做真的可以吗

这还不是最糟糕的事情。人们希望这些用户不会进行出站连接,这样该文件夹中就不会有密钥对,也不会有 known_hosts,只留下 authorized_keys 文件。该文件中只有公钥。公钥是公开的,共享它们应该不会特别危险。不过,将 sftp 帐户的 chroot 目录设置为距离 Web 根目录至少一个目录并不是一个坏主意,这样 .ssh 就不会在 Web 根目录之外公开提供。如果您的 chroot 是这样的,/var/www并且您将 Web 服务器的根目录设置为,/var/www/html这似乎可以解决您的担忧。

相关内容