Ssh

通過埠 22 的 SFTP 或通過埠 20 / 21 的 vsftp - 保護對伺服器的 FTP 訪問的最佳方式

  • March 17, 2017

我已經閱讀了很多關於 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 ‘工作’

現在,我陷入了一個看似 22 的問題,我懷疑(希望)只是配置錯誤。如果沒有 sshd_config 中的 chroot 塊,我可以通過 Putty 或 SFTP 客戶端進行連接,一切都很好——除了可以訪問整個文件系統。有了 chroot 塊,我Could not chdir to home directory /home/ftp在身份驗證期間遇到了錯誤,因為現在該/home/ftp/.ssh文件夾無法訪問,因此密鑰不起作用。這個老問題/答案建議在.ssh文件夾中放置一個文件/var/www/html/,但這對我來說似乎很奇怪 - 這樣做真的可以嗎,因為它可以被 Web 伺服器訪問?

是否有更“正確”的方式讓使用者通過 SSH 密鑰連接然後僅限於 /var/www/html?

在您的 OpenSSH 配置中,您可以將一些配置放在匹配塊中。這使您可以為不同的使用者/組/網路設置不同的配置。

所以你可以把你所有的 sftp 使用者放到一個組 sftpd 中,然後像這樣添加一個塊。這種強制 chroot 和強制 sftp 僅適用於該組。然後,您的主帳戶就可以正常使用 shell。

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

/var/www/html/ 文件夾中的 .ssh 文件夾,但這對我來說似乎很奇怪 - 真的可以嗎

這還不是最糟糕的事情。人們希望這些使用者沒有進行出站連接,因此該文件夾中沒有密鑰對,也沒有 known_hosts,只留下 authorized_keys 文件。其中只有公鑰。公鑰是公開的,共享它們應該不是特別危險。儘管將 sftp 帳戶的 chroot 目錄設置為 Web 根目錄中的至少一個目錄並不是一個壞主意,這樣 .ssh 就不會在 Web 根目錄之外公開提供。如果您的 chroot 是,/var/www並且您為 Web 伺服器設置了您的 root,/var/www/html那似乎可以滿足您的擔憂。

引用自:https://serverfault.com/questions/838702