CentOS下vsftp設置、匿名用戶&本地用戶設置、PORT、PASV模式設置

1, 安裝:yum install vsftpd 
2, 設置vsftp開機自啓動:chkconfig --level 35 vsftpd on 
3, 啓動vsftpd守護進程:Service vsftpd start 
4, 開啓iptables防火牆21端口-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT ,然後重啓service iptables restart   
5, 截止到現在: 
  • a. Vsftpd配置文件:/etc/vsftpd/vsftpd.conf
  • b. 系統用戶ftp(默認無密碼)已經可以作爲vsftp的匿名用戶來使用。
  • c. 從/etc/passwd中的值ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin可以看出:根目錄 /var/ftp/, 禁止控制檯登陸,也就是該用戶只能進行ftp訪問。
  • d. anon_upload_enable=YES,anon_mkdir_write_enable=YES被註釋掉,即默認匿名用戶不可上傳文件,也不可以在服務器上創建目錄。
  • e. port_enable=YES,即默認情況下,FTP  PORT主動模式被啓用
  • f. connect_from_port_20=YES,即默認情況下,FTP PORT主動模式進行數據傳輸時使用20端口(ftp-data)。YES使用,NO不使用。
  • g. ftp_data_port=port number,設定ftp數據傳輸端口(ftp-data)值。默認值爲20。此參數用於PORT FTP模式。
  • h. pasv_enable=YES,即默認情況下,FTP  PASV被動模式被啓用。但是由於防火牆設置的原因,默認情況下,FTP PASV被動模式使用FTP會失敗。
  • i. listen=YES,即默認情況下,vsftpd以單例模式監聽IPv4 socket端口。該命令不能和listen_ipv6同時使用。因此如果要同時啓用對IPv4和IPv6的支持的話,必須同時運行2份vsftpd,每份vsftpd包含自己的配置文件(一個監聽IPv4,一個監聽IPv6)
  • j. windows cmd下使用命令 ftp serverip,然後在彈出的提示畫面中輸入用戶名“ftp”就能正常登錄到ftp服務器。執行命令ls,從服務器端返回的如下信息:“200 PORT command successful. Consider using PASV.150 Here comes the directory listing.”中我們就可以看出,這個ftp連接執行在PORT主動模式
  • k. 使用Winscp、FileZilla連接時,會發現ftp用戶能正常登錄,但是list命令執行超時。這是因爲默認情況下,這些客戶端的FTP都運行在PASV被動模式下,而vsftp服務器由於沒有對PASV端口範圍及相應的iptables防火牆做設置,數據傳輸的連接被阻塞導致命令執行超時。當客戶端強制啓用PORT主動模式連接後,就能正常使用ftp功能。
  • l. FileZilla強制啓用FTP PORT主動訪問方式:Edit->Setting->Connection->Ftp->Transfer Mode->Select “Active” and uncheck “Allow fall back to other transfer mode on failure”
  • m. Winscp強制啓用FTP PORT主動訪問方式:在Winscp的login登錄界面中,選擇ftp,然後勾上“Advanced options”,選中左邊導航中的Connection欄目,然後在彈出畫面上不選中“Passive Mode”。

6, 匿名用戶上傳下載 
  • a. anonymous_enable=YES
  • b. anon_upload_enable=YES
  • c. anon_mkdir_write_enable=YES
  • d. 目錄權限設置:修改/var/ftp/pub的目錄權限爲744,並把目錄的owner和group都改成ftp(ftp用戶必須有可執行x權限,否則在執行ftp命令CWD pub時,會報錯誤:Response: 550 Failed to change directory. Error: Failed to retrieve directory listing。匿名用戶下載是使用的是nobody這個用戶,所以權限相應的other這個位置要有R權限才能被下載。)
  • e. chown ftp.ftp /var/ftp/pub
  • f. chmod 744 /var/ftp/pub
  • g. /var/ftp使用默認的權限755以及默認的owner、group:root
  • h. 如下關閉selinux,否則上傳文件時報錯誤553 Could not create file. Error: Critical file transfer error。也可以不關閉selinux,在selinux中設置ftp例外,參考:
  • i. /etc/selinux/config文件中的SELINUX=enforcing,改成SELINUX=permissive,機器reboot(如果不想重啓機器,也可以執行命令setenforce 0;setenforce 1 設置SELinux 成爲enforcing模式;setenforce 0 設置SELinux 成爲permissive模式。)
  • j. 上傳後的文件不能被直接下載,如果需要可以直接被下載,要設置匿名用戶上傳文件時的掩碼anon_umask=073
  • k. 匿名用戶重命名,刪除權限設置anon_other_write_enable=YES
  • l. no_anon_password=YES   #匿名用戶登錄時不詢問口令

7, 由於默認情況下,匿名ftp用戶的PASV模式訪問被防火牆阻塞,啓用PASV模式訪問 
  • a. pasv_enable=YES,即默認情況下,FTP  PASV被動模式被啓用。
  • b. pasv_min_port=30000 ,設定在PASV模式下,建立數據傳輸所可以使用port範圍的下界和上界,0 表示任意(1024 – 65535端口)。默認值爲0。把端口範圍設在比較高的一段範圍內,比如30000-31000。
  • c. pasv_max_port=31000
  • d. 防火牆設置:-A INPUT -m state --state NEW -m tcp -p tcp --dport 30000:31000 -j ACCEPT   ######同時可以用參數-s 192.168.0.0/16來限制客戶端IP範圍,以這種方式增加安全性
  • e. netstat -ap | grep ftp 查看服務器端ftp數據傳輸時使用的端口:tcp   1455572  0 192.168.0.1:30661    192.168.0.2:63731         ESTABLISHED 1746/vsftpd(下載) 
    tcp        0  57032 192.168.0.1:30886    192.168.0.2:63750         ESTABLISHED 1785/vsftpd(上傳) 

8,禁用匿名用戶,啓用系統本地用戶 
  • a. anonymous_enable=NO  禁止匿名用戶登錄 local_enable=YES 允許本地用戶登錄
  • b. write_enable=YES  #本地用戶可以上傳(全局控制) 刪除,重命名
  • c. local_umask=022 #本地用戶上傳文件的umask,上傳文件默認權限644(666-022),上傳文件夾默認權限755(777-022)
  • d. 關閉selinux,否則上傳文件時報錯誤553 Could not create file. Error: Critical file transfer error。也可以不關閉selinux,在selinux中設置ftp例外,參考:
  • e. userlist_enable=yes    啓用/etc/vsftpd/user_list列表
  • f. userlist_deny=no    只允許/etc/vsftpd/user_list列表中的用戶登錄(ftpusers限制仍然起作用)
  • g. chroot_list_enable=NO,chroot_local_user=YES,所有的用戶均不能切換到其他目錄。
  • h. useradd –d /ftp –s /bin/false prj  添加本地系統的ftp用戶prj,並設置用戶home目錄,禁止shell登錄,設置密碼passwd prj。默認創建的/ftp目錄owner是prj,權限700。
  • i. 把用戶prj加到user_list列表文件中
  • j. user_config_dir=/etc/vsftpd/userconf #設置用戶的單獨配置文件,用哪個帳戶登陸就用哪個帳戶命名,實現不同用戶不同權限(1,文件格式、屬性和主配置文件一致 2,文件名沒有.conf後綴  3,這裏的屬性會覆蓋主配置文件相應的屬性 4,並不是所有屬性放這裏都會起作用)
  • k. 建立目錄/etc/vsftpd/userconf,並創建ftp用戶名想對應的文件prj,在文件中用local_root屬性指定prj用戶登錄後進入的目錄。還可以設置屬性:cmds_allowed,local_umask=022, local_max_rate限速等
  • l. 編輯/etc/pam.d/vsftp文件,註釋掉auth required pam_shells.so(這個語句的意思是隻有包含shell的用戶才能登錄)
  • m. ftpd_banner定製ftp登錄時的歡迎信息
  • n. max_clients=100 #FTP的最大連接數
  • o. max_per_ip=5    #每IP的最大連接數
  • p. vsftpd服務器重啓

9,禁用匿名用戶,啓用虛擬FTP用戶 
  • a. anonymous_enable=NO  禁止匿名用戶登錄
  • b. local_enable=YES 允許本地用戶登錄,雖然虛擬用戶不是操作系統用戶,但是最終還是關聯到虛擬宿主用戶身上,因此,這裏屬性還是要設置爲yes
  • c. pam_service_name=vsftpd #設置PAM使用的名稱,默認值爲/etc/pam.d/vsftpd。
  • d. guest_enable=YES  啓用虛擬用戶登錄
  • e. guest_username=ftp #這裏設置虛擬用戶的宿主用戶。默認值爲ftp。
  • f. virtual_use_local_privs=YES/NO #當該參數激活(YES)時,虛擬用戶與其宿主用戶有相同的權限。 當此參數關閉(NO)時,虛擬用戶與匿名用戶有相同的權限。默認情況下此參數是關閉的(NO)。
  • g. 用db_load生成虛擬用戶數據庫
  • h. 修改pam.d下的vsftpd文件,修改用戶認證方式
  • i. …

10,ssl加密的vsftp(vsftp with OpenSSL)參考:加密ssl vsftp、ftp隱式加密&顯式加密 
11,vsftp配置用戶磁盤配額(磁盤限額參考:Virtualbox下爲CentOS增加新硬盤、Linux添加新硬盤、vsftp配置用戶磁盤配額(磁盤限額) 
Html代碼  收藏代碼
  1. // 匿名用戶設置  
  2. anonymous_enable=YES  
  3. no_anon_password=YES  
  4. anon_root=/var/ftp  
  5. anon_umask=073  
  6. anon_max_rate=  
  7. anon_upload_enable=YES  
  8. anon_mkdir_write_enable=YES  
  9. anon_other_write_enable  
  10.   
  11. chown_uploads  
  12. chown_username  
  13.   
  14. // 本地用戶設置  
  15. anonymous_enable=NO  
  16. write_enable=YES  
  17. userlist_enable=yes  
  18. userlist_deny=no  
  19. chroot_list_enable=NO  
  20. chroot_local_user=YES  
  21. user_config_dir=/etc/vsftpd/userconf  
  22.   
  23. // 本地用戶設置 - 各用戶獨立設置屬性  
  24. local_root  
  25. local_umask=022  
  26. local_max_rate  

vsftpd日誌:默認情況下,vsftp在/var/log/xferlog文件中記錄Wu-ftpd格式的日誌(它會記錄上傳和下載的動作)。通過設置dual_log_enable和log_ftp_protocol,可以啓用vsftp自己的日志,默認日誌文件/var/log/vsftpd.log,其中會記錄所有的ftp命令日誌看到的內容和FTP客戶端FileZilla中顯示的內容一致!所以調試錯誤的時候,貌似也沒有開啓的必要。ftp登錄或者操作出問題的時候,主要看返回的錯誤代碼是多少,然後找可能的原因。如553 Could not create file. 
  • xferlog_enable=yes/no //是否啓用 xferlog 日誌格式
  • xferlog_std_format=yes/no //是否採用標準格式記錄日誌
  • xferlog_file=/path/to/logfile //xferlog 日誌文件所在位置,默認爲/var/log/xferlog
  • dual_log_enable=yes/no //是否採用VSFTPd自己的日誌記錄方式
  • log_ftp_protocol=yes/no //是否記錄所有的ftp命令日誌
  • syslog_enable=yes/no   //是否將日誌信息寫入系統日誌/var/log/messages中

常見ftp錯誤代碼: 
  • Connect 連接被拒絕: 可能原因是vsftpd服務沒被啓動
  • 530 Permission denied: 可能原因是userlist_enable=YES並且/etc/vsftpd/user_list中包含要登錄的ftp用戶名  即user_list禁止了該用戶的登錄、或者可能是沒有指定userlist_file=/etc/vsftpd/user_list
  • 530 Login incorrect: 可能原因是登錄的ftp用戶名被包含在禁止登錄列表/etc/vsftpdftpusers中 | 同時要確保用戶名、密碼是正確的 | 也可能是配置文件中少了一行pam_service_name=vsftpd |  檢查/etc/pam.d/vsftpd 文件裏面lib的路徑 | 編輯/etc/pam.d/vsftp文件,註釋掉auth required pam_shells.so(這個語句的意思是隻有包含shell的用戶才能登錄)
  • 530 Non-anonymous sessions must use encryption.:服務器的強制,非匿名用戶必須使用加密連接
  • 500 OOPS: cannot open user list file:可能原因是不存在文件“/etc/vsftpd/user_list”或文件中不存在該帳戶,解決:解決: cho username >> /etc/vsftpd/user_list
  • 500 OOPS: cannot open chroot() user list file | 500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list:可能原因是不存在文件“/etc/vsftpd/chroot_list”
  • 500 OOPS: missing value in config file: 可能原因是配置文件“=”等號前值有問題,或只有一個空格
  • 500 OOPS: bad bool value in config file: 可能原因是配置文件=”等號後值有問題
  • 500 OOPS: unrecognised variable in config file: 可能原因是參數前有空格
  • 500 OOPS: chdir, 500 OOPS: child died, 500 OOPS: chroot:可能原因是用戶主目錄沒有權限或沒有主目錄,或者還是selinux影響的
  • 500 OOPS: vsftpd: both local and anonymous access disabled!匿名用戶和本地用戶登錄都被禁用
  • GnuTLS error -12: A TLS fatal alert has been received.:received.:Filezilla最新版本認爲vsftpd默認的加密算法"DES-CBC3-SHA"不夠安全而拒絕連接導致的。有兩種辦法解決該問題,一是降級你的Filezilla客戶端版本到3.5.3以下,二是更改服務器端vsftpd的配置。增加屬性:ssl_ciphers=HIGH
  • ECONNREFUSED - Connection refused by server: 當啓用隱式ssl連接,用filezilla、winscp客戶端連接時報錯,因爲vsftpd此時服務器端的端口還是21,但是客戶端確以990來連接。修改客戶端連接時使用的參數或者服務器的通過參數listen_port設置端口爲990,問題解決
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章