使用vsftpd這麼久, 已經不是第一次更新完就不正常運作了, 但畢竟就是看上他強調的安全性, 也只能接受這一些些不便.
第一個問題, FileZilla連線時出現錯誤訊息:
1 |
回應: 500 OOPS: vsftpd: refusing to run with writable root inside chroot() |
翻了一下Change log, 兇手就是這一項:
1 2 3 |
- Add stronger checks for the configuration error of running with a writeable root directory inside a chroot(). This may bite people who carelessly turned on chroot_local_user but such is life. |
說是因為安全性問題, 所以當使用chroot功能時, 根目錄不可有寫入的權限. 所以網路上有些人就真的把寫入權限拿掉了, 但是如果ftp是給許多人使用的, 若他們沒辦法上傳檔案到自己的根目錄, 那會被抱怨到翻掉吧…
所以我的解法是安裝vsftpd-ext, 然後在vsftpd.conf裡加上這一行:
1 |
allow_writable_root=YES |
在 vsftpd 3 版以後, 不需要安裝 ext 的版本了, 但設定名稱有點不同:
1 |
allow_writeable_chroot=YES |
第二個問題, FileZilla使用SSL連線時出現錯誤:
1 |
錯誤: GnuTLS error -12: A TLS fatal alert has been received. |
修改vsftpd.conf, 加上這一行:
1 |
ssl_ciphers=HIGH |
附註1:
在FreeBSD, vsftpd-ext似乎沒有正確的讀取到原本的設定檔, FileZilla出現錯誤訊息:
1 |
500 OOPS: vsftpd: not found: directory given in 'secure_chroot_dir':/usr/share/empty |
只好自己修一下rc script, 修改 /usr/local/etc/rc.d/vsftpd, 原本的內容:
1 2 3 4 5 |
... command="/usr/local/libexec/$name" required_files="/usr/local/etc/$name.conf" start_precmd="vsftpd_check" ... |
加上一行, 順序要對:
1 2 3 4 5 6 |
... command="/usr/local/libexec/$name" required_files="/usr/local/etc/$name.conf" command_args="$required_files" start_precmd="vsftpd_check" ... |