500 OOPS: vsftpd: refusing to run with writable root inside chroot()

vsftpd 在尚未出現帳號登入提示前,就出現 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 的錯誤訊息,是因為 vsftpd 為了增強安全,當帳號可使用 chroot() 目錄時,該目錄就不得為可寫入(writeable)。

而在尚未出現使用者帳號登入提示前,就出現該錯誤,要去修改 secure_chroot_dir 的寫入權限,在 /etc/vsftpd.conf 裡面會指定 secure_chroot_dir 的位置:

secure_chroot_dir=/var/run/vsftpd/empty

將該目錄的寫入權限移除,該目錄只要移除 other 的 w 權限,然後重啟 vsftpd 服務即可:

#chmod o-w secure_chroot_dir=/var/run/vsftpd/empty
#service vsftpd restart

現在帳號登入提示已出來,但登入後,依然出現 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 的錯誤訊息,因為個別帳號的 chroot() 目錄,還是有寫入權限,所以就會拒絕登入。

通常 chroot() 都會導到個人家目錄,可是個人家預設已經 644,群組及其他都已經沒有寫入權限了,還是不行。個人家目錄,要連 u 都不能有 w 的權限,vsftpd 才允許登入。當然可以移除家目錄的所有 w 權限,但就無法增刪修改裡面的目錄或檔案(只能下載):

#chmod a-w /home/user_DIR

在不改個人家目錄權限的狀況下,可在 vsftpd.conf 增加允許寫入的設定,讓它可增刪修改裡面的目錄或檔案:

#vi /etc/vsftpd.conf
    allow_writeable_chroot=YES

#service vsftpd restart

這樣就可以和以前一樣正常使用了。