500 OOPS: vsftpd: refusing to run with writable root inside chroot 原因及解決辦法初析[ubuntu, vsftpd, ftp server]


在網絡應用日益發達的今天 FTP無疑是繼WWW網絡之后最為流行的軟件應用之一, 在linux世界中也同樣如此, 使用的FTP 軟件也不外乎wu-Ftp, proFtpd(不考慮win下的serv-U), vsFtpd, 這三款FTP軟件各有千秋, 大致的功能特點詳見另一篇文章, 作為流行度最高的FTP server來說, VSFTP的優勢也是有目共睹的.VSFTP本身的含義就是very secure FTP, 安全性自然占有優勢, 而且它的安裝及配置比較簡單, 功能也比較強大, 在本博的文章文章中有這方面的配置教程, 在經過簡單的配置后,即可投入使用, 但是就目前的較新版本而言(不論是安裝最新的版本,還是由舊版本升級而來都包括在內), 也許是考慮到安全方面的因素, 提高了它的安全級別, 但是同時也帶來了一些問題. 最常見的就是如下的提示:

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

雖然這個問題已經在本博的其他文章中有所解釋, 但是只是提供了比較簡單的解決方案, 對於解決它更多的思路卻沒有更多地展現出來, 下面結合國外的相關資料就這個問題做一個綜合性的總結.

新版本的vsftpd(含全新安裝以及升級后的vsftpd 和vsftpd-ext)在登陸時出現如下的錯誤提示:

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

出現的原因是:

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.

據以上的內容可知, vsftpd提高了它的安全性, 以確定在用戶的主目錄可寫性因用戶啟用了chroot_local_user選項而導致的權限問題, 但是這個也同時給用戶的正常登陸帶來了問題, 也就是說, 用戶的主目錄(一般是/home/user 如/home/wwufengg)是不可寫的,如果你在設置用戶權限時設置了可寫權限,就會出現如上所示的500 OOPS錯誤. 歸根到底就是由於vsftpd的用戶權限設置過嚴導致的. 既然知道了它產生的根源, 解決辦法就是給用戶設置合適的權限即可, 命令如下:

chmod a-w /home/user   //如我的用戶: chmod a-w /home/user      

或者

chmod 755 /home/user   //如我的用戶: chmod 755 /home/user 

兩個命令均可達到同樣的效果. 在重啟vsftpd后,

service vsftpd restart   //推薦使用這個命令

或者

/etc/init.d/vsftpd restart

問題即可解決.

或者你可以通過修改配置文件中的選項來解決, 針對標准vsftpd(standonly)模式,

allow_writeable_chroot=YES

針對vsftpd-ext(xinet.d)模式的:

allow_writable_chroot=YES

從總體上來看, 通過限制用戶的主目錄寫權限的方式來控制用戶的訪問並不是完美的解決方案, 因為當你在資料在上傳到該目錄時會發現即使FTP客戶端軟件提示已經上傳完成, 實際上也不會上傳成功的. 除非你開放寫權限給用戶.但是如果你這樣做的話, 就會出現那個500 OOPS, 這是一個悖論, 目前來看, 比較好的解決方案就是給用戶的根目錄新建一個子目錄, 然后賦予這個子目錄一個可讀,可寫,可執行的權限.  以下是另外的3種解決思路, 一並列出, 供參考:

1. 在VSFTP的配置文件(/etc/vsftpd.conf)中添加一個 local_root選項, 在這個選項里定義一個可供FTP USER訪問的目錄, 須以絕對路徑定義.

2. 在VSFTP的配置文件(/etc/vsftpd.conf)中添加一個 passwd_chroot_enable選項並啟用, 即passwd_chroot_enable=YES, 同時在系統的密碼文件(/etc/passwd)中找到對應的用戶並修改如下的參數值,  

/home/wwufengg => /home/./wwufengg

參考選項圖1:

變為如圖:

通過這種方法, 就可以把用戶的主目錄固定到指定的目錄下.

3.下載vsftpd-ext資源,編譯並覆蓋已經存在的源碼編譯過vsftpd配置文件或者是直接編譯已經存在的源碼配置文件, 增加一個選項並配置為allow_writeable_root=YES, 注意配置選項中的YES要大寫,並且和=中間沒有空格. 切記.

需要說明的是, 雖然我經過以上幾種方法的實驗來看, 都不能完全解決這個問題, 目前比較有效的解決方法就是如wwufengg所說的, 給用戶的根目錄新建一個子目錄, 然后賦予這個子目錄一個可讀,可寫,可執行的權限. 雖然不能徹底解決, 現在來看,應該是最接近解決這個問題的方案了.

 reference source: http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/#comment-2051

本文地址: http://www.cnblogs.com/wwufengg/archive/2012/10/29/500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot.html

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM