ftp(File Transfer Protocol,檔案傳輸協定) 是 TCP/IP 協定族中的一員。ftp協定包括兩個組成部分,其一為ftp伺服器,其二為ftp用戶端。
ftp用戶端與伺服器建立網絡連接配接,請求登入伺服器,登入成功後,就可以進行檔案傳輸。
檔案傳輸的請求由用戶端發起,主要包括取檔案和發送檔案兩種操作。
在linux下,ftp用戶端和ftp服務端是作業系統自帶的,但不一定預設安裝。
在windows下,指令提示符下有ftp用戶端指令,但很難用,問題很多,也有第三方用戶端軟體,如FileZilla、 Cuteftp、Ws_ftp、Flashfxp、Leapftp等。windows版的ftp服務端軟體要購買,具體不清楚,ServerU。
主動模式和被動模式
1. 通信端口
利用ftp傳輸過程中,主要使用到兩個端口,一個是控制端口,一個是資料端口,控制端口一般為21,而資料端口不一定是20,這和FTP的應用模式有關,如果是主動模式,就是為20,如果為被動模式,由伺服器端和用戶端協商而定。
2. 主動模式與被動模式
FTP具有兩種模式,分别是port模式(也叫主動模式)和pasv模式(也叫被動模式),怎麼來了解這兩種模式呢?
在主動模式下:用戶端給伺服器端的21端口發指令說,我要下載下傳什麼什麼,并且還會說我已經打開了自己的20端口,你就從這裡把東西給我吧,伺服器收到後就會連接配接用戶端已打開的20端口把東西傳給用戶端,這就是主動模式,可以了解為服務端主動給用戶端傳輸檔案。
在被動模式下:用戶端給伺服器端的21端口發指令說,我要下載下傳什麼什麼,伺服器端知道後,就打開一個空閑的高端口,然後告訴用戶端,我已經打開了某某端口,你自己進去拿吧,于是用戶端就從那個高端口進去拿檔案了,這就是被動模式,可以了解為服務端被用戶端拿走了東西。
3. 從主動模式到被動模式
在很久以前沒有共享上網這種技術,一個電腦一個ip。但是後來出現了,是以也就有了下面的問題。
大家都知道,共享上網就是很多台電腦共享一個公網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這個公網IP,是以伺服器端收到的消息也就是210.33.25.108需要某個檔案并打開了20端口,FTP伺服器就會往210.33.25.108的20端口傳資料,這樣當然會連接配接不成功了,因為打開20端口的并不是192.168.1.100這個位址,在這種情況下被動模式就有用了。
在主動模式中,FTP的兩個端口是相對固定的,如果指令端口是n的話,那資料端口就是n-1,也就是說預設情況下,指令端口是21,資料端口就是20,你把指令端口改成了600,那麼資料端口就是599。這樣使用防火牆就很友善了,隻要開通這兩個端口就可以了,但是如果用戶端是共享上網的話那豈不是不能正常使用FTP了,這樣還是不行,一定需要被動模式。
在被動模式中,預設情況下指令端口是21,但是資料端口是随機的。不過,因為被動模式中資料端口的範圍是可以自定義的,是以也可以通過端口範圍去配置防火牆。
安裝ftp用戶端
#yum -y install ftp
安裝ftp伺服器
#yum -y install vsftpd
配置ftp伺服器
Linux作業系統的使用者即ftp的使用者,也可以配置專用的ftp使用者,專用的ftp使用者隻能用于ftp,不能登入作業系統。
1、防火牆開啟 21 端口。
不同linux版本防火牆的配置有所不同,centos7中的防火牆改成了firewall。
#firewall-cmd --zone=public --add-port=21/tcp --permanent
指令含義:
--zone # 作用域
--add-port=21/tcp # 添加端口,格式為:端口/通訊協定
--permanent # 永久生效
顯示success為成功
如果要采用主動模式,防火牆還要開通20端口。
#firewall-cmd --zone=public --add-port=20/tcp --permanent
2、配置ftp高端口參數
# vi /etc/vsftpd/vsftpd.conf
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iNxUzN2AzYhZTN3MjZzM2NzYzXxEzNxETMyIzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
設定被動模式的高端口範圍為5500-6000。
3、防火牆開啟5500-6000端口
#firewall-cmd --zone=public --add-port=5500-6000/tcp --permanent
4、關閉 selinux
#vi /etc/selinux/config
修改成 selinux=disabled
執行 setenforce 0 使修改馬上生效
5、防火牆服務相關操作
centos7和centos6的服務啟停方式也不同,以下是centos7的指令。
#systemctl restart firewalld.service # 重新開機防火牆
#systemctl stop firewalld.service # 關閉防火牆
#systemctl start firewalld.service # 啟動防火牆
#systemctl status firewalld.service # 檢視防火牆服務狀态
如果防火牆配置不成功,直接關掉它,不用防火牆。
centos7開機禁用防火牆:systemctl enable firewalld.service
centos6開機禁用防火牆:chkconfig iptables off
6、vsftpd服務相關操作
#systemctl start vsftpd # 啟動
#systemctl stop vsftpd # 停止
#systectl status vsftpd # 檢視
#systemctl enable vsftpd # 開機自動啟動vsftpd服務
#systemctl disable vsftpd # 禁用vsftpd服務
ftp常用指令
1. 登入ftp伺服器
方法一:輸入ftp ip位址,然後輸入使用者名和密碼,如下圖:
方法二:輸入ftp,用open連上伺服器,再輸入使用者名和密碼,如下圖:
方法三:輸入ftp -n ip位址,用user指令登入,如下圖:
進入ftp服務後輸入open加ip位址open 118.89.50.198
當連接配接成功後會讓你進行身份驗證,在輸入密碼時螢幕上沒有任何顯示,不用管,直接輸完密碼敲Enter鍵即可。
2. 檢視ftp伺服器上的檔案
dir:顯示伺服器目錄和檔案清單
ls:顯示伺服器目錄和檔案清單
cd:進入伺服器指定的目錄
lcd:進入本地用戶端指定的目錄。
dir指令可以使用通配符“*”和“?”,比如,顯示目前目錄中所有擴充名為jpg的檔案,可使用指令 dir *.jpg。
cd指令中必須帶目錄名。比如 cd /tmp 表示進入/tmp目錄
3. 下載下傳檔案
ftp的傳輸模式分為ASCII碼方式和二進制方式兩種,二進制方式可以傳輸任何檔案,包括壓縮包、可執行程式、圖檔、視訊、音頻等,而ASCII碼方式隻能傳輸.txt、.htm等ascii碼檔案。在實際開發中,不管什麼檔案,都用二進制方式傳輸檔案。
type:檢視目前的傳輸方式
ascii:設定傳輸方式為ASCII碼方式
binary:設定傳輸方式為二進制方式
get/recv:下載下傳單個檔案get filename [newname](filename為下載下傳的ftp伺服器上的檔案名,newname為儲存在本都計算機上時使用的名字,如果不指定newname,檔案将以原名儲存。
get/recv指令下載下傳的檔案将儲存在本地計算機的工作目錄下。該目錄是啟動ftp用戶端時的工作目錄目錄。如果想修改本地計算機的工作目錄,可以使用 lcd 指令。比如:lcd /tmp 表示将工作目錄設定/tmp/目錄。
mget:下載下傳多個檔案mget filename [filename ....](mget指令支援通配符“*”和“?”,比如:mget *.jpg 表示下載下傳ftp伺服器目前目錄下的所有擴充名為jpg的檔案。)
prompt:關閉/打開互交提示。
4. 上傳檔案
put/send:上傳單個檔案put filename [newname]
filename為上傳的本地檔案名,newname為上傳至ftp伺服器上時使用的名字,如果不指定newname,檔案将以原名上傳。
mput:上傳多個檔案mput filename [filename ....]
mput指令支援通配符“*”和“?”,比如:mput *.jpg 表示上傳用戶端伺服器目前目錄下的所有擴充名為jpg的檔案。
prompt:關閉/打開互交提示。
5. 結束并退出ftp
bye:結束與伺服器的ftp會話并退出ftp環境
6. 其它ftp指令
pwd:檢視ftp伺服器上的目前工作目錄
rename filename newfilename:重命名ftp伺服器上的檔案
delete filename:删除ftp伺服器上一個檔案。
mdelete [remote-files] :删除多個檔案。
mkdir pathname:在伺服器上建立目錄。
rmdir pathname:删除伺服器上的目錄。
passive:主動模式與被動模式切換。
nlist:列出伺服器目錄中的檔案名,如:nlist /home/wucz /tmp/tmp.list,表示把伺服器上/home/wucz目錄下的檔案列出來,結果輸出到本地的/tmp/tmp.list檔案中。
help [cmd]:顯示ftp指令的幫助資訊,cmd是指令名,如果不帶參數,則顯示所有ftp指令。
windows登入ftp
windows的指令提示符下有ftp用戶端程式,但是不好用。
采用資料總管,輸入:ftp://伺服器ip,如下圖:
在空白的位置點滑鼠右鍵,選擇登入菜單,如下圖:
輸入使用者名和密碼登入ftp伺服器,如下圖: