一、ftp簡介
ftp(File Transfer Protocol文件傳輸協議)是基於TCP/IP協議的應用層協議,用於文件的傳輸,包括ftp服務器(或服務端)和ftp客戶端。
ftp客戶端與服務器創建網絡連接,請求登錄服務器,登錄成功后,就可以進行文件傳輸,主要包括開載文件和上傳文件兩種操作。
ftp協議很古老,有人說它技術太落后,不安全,對於這種說法我不於評論。但是,ftp的應用場景仍非常廣泛,這是不爭的事實。
在Linux系統中,ftp客戶端和ftp服務器是操作系統自帶的,但不一定會缺省安裝。
二、安裝ftp軟件包
在CentOS7中,采用yum來安裝ftp軟件包,包括ftp服務器和ftp客戶端。如果已經安裝,再次執行yum就會把軟件包升級到最新版本。
1、安裝ftp服務器
yum -y install vsftpd
2、安裝ftp客戶端
yum -y install ftp
三、配置ftp服務器
ftp的傳輸模式有被動模式和主動式兩種,缺省是被動模式,主動模式的應用場景極少,為了方便表達,在接下來的內容中只介紹被動模式,主動模式在本文中也有介紹。
1、關閉SELINUX
修改/etc/selinux/config文件,把SELINUX參數的值改為disabled。
SELINUX =disabled
重啟linux系統或執行setenforce 0
使修改馬上生效。
2、配置ftp數據端口參數
ftp的數據端口也稱為高端口,在/etc/vsftpd/vsftpd.conf文件中配置,由pasv_min_port和pasv_max_port兩個參數指定,如果文件中沒有這兩個參數,手工的加進去。
pasv_min_port=5000 # 高端口范圍的最小值。
pasv_max_port=5500 # 高端口范圍的最大值。
3、開通防火牆
開通防火牆的方法有兩種:
1)開通ftp服務。
firewall-cmd --zone=public --add-service=ftp --permanent
2)開通ftp服務需要的端口,21是控制端口,5000-5500是數據端口范圍,也就是上一節中在/etc/vsftpd/vsftpd.conf文件中配置的pasv_min_port和pasv_max_port參數。
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=5000-5500/tcp --permanent
重啟防火牆:
systemctl restart firewalld.service
4、啟動vsftpd服務
ftp服務器的服務名是vsftpd,相關的操作如下:
systemctl start vsftpd # 啟動服務。
systemctl stop vsftpd # 停止服務。
systemctl restart vsftpd # 重啟服務。
systemctl status vsftpd # 查看服務狀態。
systemctl enable vsftpd # 啟用開機自動動vsftpd服務。
systemctl disable vsftpd # 禁用開機自動動vsftpd服務。
5、雲平台訪問策略配置
如果您購買的是雲服務器上,需要登錄雲服務器提供商的管理平台開通訪問策略(或安全組),開通21和高端口的訪問策略。
不同雲服務器提供商的管理平台操作方法不同,具體操作方法閱讀操作手冊、或者百度,或者咨詢雲服務器提供商的客服。
如果雲服務器的ftp服務不對建立數據會話,在百度中輸入“被動模式下FTP不能建立數據會話問題“可以找到解決問題的方法,目前的阿里雲服務器就存在這個問題。
四、主動模式和被動模式
ftp有兩種模式,分別是port模式(主動模式)和pasv模式(被動模式)。
1、主動模式
客戶端給服務端的21端口發命令說:我要輸傳文件,我已經打開了自己的20端口,您向我的20端口發起TCP連接,我們來傳輸文件。服務端知道后,就會主動向客戶端的20端口發起連接,連接成功后開始傳輸文件。
在主動模式下,ftp請求是由客戶端TCP連接的;傳輸數據的時候,TCP連接卻是由服務端發起的。
2、被動模式
客戶端給服務器端的21端口發命令說:我要傳輸文件。服務器端知道后打開一個空閑的高端口,然后告訴客戶端,我已經打開了某某端口,您向我這個端口發起TCP連接,然后我們用這個端口來傳輸文件。
在被動模式下,不管是ftp命令,還是傳輸數據,都是由客戶端向服務端發起TCP連接。
3、從主動模式到被動模式
在很久以前每台電腦都有一個ip地址,ftp只有主動模式,后來出現了共享上網技術,所以也就有了下面的問題。
共享上網就是多台電腦共享一個公網ip去使用internet,例如某個局域網出口的公網ip是210.33.25.108,當內網用戶(192.168.1.100)訪問外網的ftp服務器時,如果采用主動模式,192.168.1.100告訴了ftp服務器我需要某個文件和我打開了20端口之后,由於共享上網的原因,192.168.1.100在出網關的時候ip已經被轉換成了210.33.25.108,所以ftp服務器端收到的消息是210.33.25.108需要某個文件並打開了20端口,ftp服務器就會嘗試連接210.33.25.108的20端口,這樣當然不會成功。
在主動模式中,ftp的兩個端口是相對固定的,如果命令端口是n的話,那數據端口就是n-1,也就是說默認情況下,命令端口是21,數據端口就是20,如果您把ftp服務的端口改成了521,那么數據端口就是520,這樣配置防火牆很方便,只需要開通兩個端口就可以了。但是,在共享上網的環境中無法使用主動模式。
在被動模式中,默認情況下命令端口是21,數據端口是隨機分配的。但是,被動模式中數據端口的范圍可以配置,防火牆也可以配置端口范圍。
五、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!