vsftpd安裝手冊(參考視訊學習)
1. 安裝vsftpd
[[email protected] ~]# yum -y install vsftpd
相關配置檔案 /etc/vsftpd/vsftpd.conf
2. 新增ftp使用者
[[email protected] ~]# useradd ftpuser
[[email protected] ~]# passwd ftpuser
後輸入兩次系統密碼
3. 開放21埠
[[email protected] ~]# vim /etc/sysconfig/iptables
在-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT複製貼上,將22改為21(注:22為ssh埠)
重啟iptables
4. 修改selinux
[[email protected] ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
以上結果表示未開啟外網訪問
(注:getsebool get SELinux boolean value(s))
[[email protected] ~]# setsebool -P allow_ftpd_full_access on
[ [email protected] ~]# setsebool -P ftp_home_dir on
4.ps FTP傳輸的主動模式與被動模式
FTP客戶端連線到FTP伺服器端21埠,二者之間進行一系列的身份驗證,這個過程叫做命令連線。客戶端向伺服器端傳送請求時候,客戶端會隨機選擇某個TCP埠語伺服器端21埠連線,此過程通過TCP的三次握手來完成,握手完成後,相互之間建立一條通道,此通道只能傳輸FTP一些簡單的指令,如檢視檔案列表,刪除檔案等。如果互相之間要上傳下載檔案,二者之間需要建立一條額外的通道來完成。此時就有了主動模式與被動模式的區分。當客戶端發出上傳下載檔案的指令後,若是客戶端隨機開放一個另一個1024以上的埠監聽等待連線,並且通過先前建立的命令連線告訴伺服器端所開放的埠號,之後FTP伺服器會通過20埠主動與客戶端剛才開放的埠進行三次握手,握手成功則建立了一條傳輸通道,二者之間通過此通道來上傳下載資料,由於是伺服器20埠主動與客戶端建立的連線,所以稱為主動模式(Active)。
5. 關閉匿名連線
開啟/etc/vsftpd/vsftpd.conf配置檔案,將
anonymous_enable=YES
修改未NO
6. 開啟被動模式
被動模式預設開啟,但是需要配置埠範圍,同樣 開啟/etc/vsftpd/vsftpd.conf配置檔案,在末尾追加
pasv_min_port=30000
pasv_max_port=30999
另外需要在iptables裡增加開放埠,與上面保持一致,具體方法參看之前的博文。
8. 設定開機自啟
chkconfig vsftpd on
9. 在Java中藉助Apache的commons-net.jar包實現上傳下載時候,需要記住設定為被動模式。另外,在我使用時候遇到一個小問題,每次上傳失敗,但是FtpClient並不會報錯,我debug發現請求傳送檔案的命令(包括路徑和檔名)已經成功傳送了,但是ftp伺服器 返回 553 。。。。。什麼什麼的,發現是我在 ftpuser使用者下建立檔案使用的是root使用者,所有使用ftpuser使用者上傳時候沒有對該路徑的讀寫許可權。。。