Chroot

帶有 chroot_local_user 的 vsftpd 需要客戶端證書

  • May 23, 2021

在設置我的 FTPS 伺服器時,我想啟用 chroot_local_user。禁用時一切正常。但是,如果我啟用此功能,WinSCP 將無法連接並聲稱我需要客戶端證書才能連接。Filezilla 徹底失敗。

如果我將 require_cert 顯式設置為 NO(即使它是預設設置),此問題仍然存在。

我該如何解決這個問題?

將使用者限制在其主文件夾中的替代解決方案也是可以接受的。

謝謝

WinSCP 錯誤消息可能是錯誤的(或僅僅是推測)。當我不久前嘗試設置 vsftpd 時,chroot_local_user我發現如果使用者在 chroot 目錄中具有寫入權限,vsftpd 將拒絕登錄(出於安全原因)。這在vsftpd 常見問題解答中有點隱藏:

問)幫助!我收到錯誤消息“拒絕使用可寫根執行”。

A) vsftpd 可以防止危險的配置。此消息的原因通常是 ftp 主目錄的不可靠所有權。主目錄不應歸 ftp 使用者自己所有。它也不應該被 ftp 使用者寫入。解決此問題的一種方法是:

chown root ~ftp; chmod -w ~ftp

另一個原因可能是在未正確設置目錄所有權的情況下嘗試使用 chroot_local_user。

要對此進行調試,請添加log_die=YES到您的 vsftpd.conf。然後日誌將顯示如下內容:

Nov 29 16:08:55 yourhost vsftpd[2866]: pam_userdb(vsftpd:auth): user 'testuser' granted access
Nov 29 16:08:55 yourhost vsftpd[2872]: ERROR: vsftpd: refusing to run with writable root inside chroot()

這不是只讀訪問的問題,但如果您的使用者應該能夠上傳文件,您必須在相應使用者擁有的 chroot 目錄中創建一個文件夾。如果您想提供對使用者主目錄的 ftps 訪問,它會變得有點麻煩。您可能必須插入一個額外的層次結構級別,即/home/someuser變為/home/someuser/someuser.

為了快速測試,我發現 curl 非常方便,例如測試上傳:

curl -T /tmp/blub -u testuser:testpass ftps://yourserver.example.com/in/

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