問題一:ftpusers和user_list兩個文件各自的用途是什么?有何關系?
首先請明確一點:ftpusers不受任何配制項的影響,它總是有效,它是一個黑名單!
該文件存放的是一個禁止訪問FTP的用戶列表,通常為了安全考慮,管理員不希望一些擁有過大權限的帳號(比如root)登入FTP,以免通過該帳號從FTP上傳或下載一些危險位置上的文件從而對系統造成損壞。
而user_list則是和vsftpd.conf中的userlist_enable和userlist_deny兩個配置項緊密相關的,它可以有效,也可以無效,有效時它可以是一個黑名單,也可以是一個白名單!那么是什么的設置決定了它的作用呢?這就是問題二要解釋的。
所以簡單總結就是:ftpusers和user_list沒有任何關系,ftpusers文件總是生效,user_list則取決於userlist_enable和userlist_deny兩項配置。
問題二:vsftpd.conf中的userlist_enable和userlist_deny兩個配置項各自起什么作用,兩者如何搭配使用?
為了說明這個問題,我們來建立兩個測試用戶:
tom: 在user_list中
jim:不在user_list中
然后我們分別給兩個配置項取不同的值,分4種情況進行測試:
1: userlist_enable=YES, userlist_deny=YES
tom: 拒絕登入
jim: 允許登錄
2: userlist_enable=YES, userlist_deny=NO
tom: 允許登錄
jim:拒絕登錄(如user_list文件開頭的注釋所述,甚至不會提示輸入密碼,即無登入提示框,直接拒絕連接)
3: userlist_enable=NO,userlist_deny=NO
tom: 允許登錄
jim: 允許登錄
4: userlist_enable=NO,userlist_deny=YES
tom: 允許登錄
jim: 允許登錄
綜上實驗得出以下結論:
- userlist_enable和userlist_deny兩個選項聯合起來針對的是:本地全體用戶(除去ftpusers中的用戶)和出現在user_list文件中的用戶以及不在在user_list文件中的用戶這三類用戶集合進行的設置。
- 當且僅當userlist_enable=YES時:userlist_deny項的配置才有效,user_list文件才會被使用;當其為NO時,無論userlist_deny項為何值都是無效的,本地全體用戶(除去ftpusers中的用戶)都可以登入FTP
- 當userlist_enable=YES時,userlist_deny=YES時:user_list是一個黑名單,即:所有出現在名單中的用戶都會被拒絕登入;
- 當userlist_enable=YES時,userlist_deny=NO時:user_list是一個白名單,即:只有出現在名單中的用戶才會被准許登入(user_list之外的用戶都被拒絕登入);另外需要特別提醒的是:使用白名單后,匿名用戶將無法登入!除非顯式在user_list中加入一行:anonymous
vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()錯誤的解決方法
chroot_local_user=YES/NO:禁止所有用戶切本目錄之外
chroot_list_enable=YES:禁止部分用戶切本目錄之外
chroot_list_file=/etc/chroot_list 要限制的用戶列表
當我們限定了用戶不能跳出其主目錄之后,使用該用戶登錄FTP時往往會遇到這個錯誤:
- 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.
從2.3.5之后,vsftpd增強了安全檢查,如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫權限了!如果檢查發現還有寫權限,就會報該錯誤。
要修復這個錯誤,可以用命令chmod a-w /home/user去除用戶主目錄的寫權限,注意把目錄替換成你自己的。或者你可以在vsftpd的配置文件中增加下列兩項中的一項:
allow_writeable_chroot=YES
