2018年4月3日 星期二

VSFTPD的安全性設定


更新:為了符合PCI DSS的要求,通訊協定只能支援TLS 1.2以上版本,須把ssl_ciphers設定為TLSv1.2,參考來源



這年頭還會用FTP服務就是為了滿足B to B的需求吧…。


chroot_local_user=YES
#把使用者關在自己的家目錄
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
#ssl金鑰一般用自我產生的就好了,長度至少要在2048bit以上
ssl_enable=YES
#啟用FTP over TLS/SSL
ssl_ciphers=HIGH
#加密演算法使用HIGH,演算法是128位元以上的都會使用,這裡也可以自訂想要使用的加密演算法。
implicit_ssl=YES
#預設值是NO,使用FTPES,啟用此選項會改成FTPS
pasv_min_port=30000
pasv_max_port=31000
#明確指定pasv模式使用的port範圍,比較容易設定防火牆

強制開啟FTP over TLS/SSL後,有時會很難做troubleshooting,建議可以先關掉,然後就會出現明確的錯誤訊息。

啟用chroot_local_user後用Filezilla去連,會出現ssl交握錯誤這種不明確的訊息,但是把ssl模式關閉後,就會出現500 OOPS: vsftpd: refusing to run with writable root inside chroot()這樣的訊息。

關於500 OOPS: vsftpd: refusing to run with writable root inside chroot()這個錯誤,網路上大多數的解法都是在設定檔加上allow_writeable_chroot=YES這個設定,但是這個作法有潛在安全性問題,所以後面的版本就把這個設定拿掉,在manpage裡頭也看不到此設定選項的說明。(經實測Debian 9的vsftpd有此選項,但是manpage裡頭一樣看不到)正確的作法是把使用者家目錄的寫入權限拿掉,在新增使用者後在使用者的家目錄中設置一個上傳專用的目錄。