About The FTP
一.FTP
簡介
FTP是TCP/IP網絡上兩臺計算機傳送文件的協議,FTP是在TCP/IP網絡和INTERNET上最早使用的協議之一。盡管World?Wide?Web(WWW)已經替代了FTP的大多數功能,FTP仍然是通過Internet把文件從客戶機復制到服務器上的一種途徑。FTP客戶機可以給服務器發出命令來下載文件,上傳文件,創建或改變服務器上的目錄。原來的FTP軟件多是命令行操作,有了像CUTEFTP這樣的圖形界面軟件,使用FTP傳輸變得方便易學。主要使用它進行“上載”。即向服務器傳輸文件。由于FTP協議的傳輸速度比較快,我們在制作諸如“軟件下載”這類網站時喜歡用FTP來實現,同時我們這種服務面向大眾,不需要身份認證,即“匿名FTP服務器”。[1]
FTP是應用層的協議,它基于傳輸層,為用戶服務,它們負責進行文件的傳輸。FTP是一個8位的客戶端-服務器協議,能操作任何類型的文件而不需要進一步處理,就像MIME或Unicode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求數據之間的時間會非常長,并且不時的必需執行一些冗長的登陸進程。
?
FTP服務一般運行在20和21兩個端口。端口20用于在客戶端和服務器之間傳輸數據流,而端口21用于傳輸控制流,并且是命令通向ftp服務器的進口。當數據通過數據流傳輸時,控制流處于空閑狀態。而當控制流空閑很長時間后,客戶端的防火墻會將其會話置為超時,這樣當大量數據通過防火墻時,會產生一些問題。此時,雖然文件可以成功的傳輸,但因為控制會話會被防火墻斷開,傳輸會產生一些錯誤。
工作原理
文件傳輸協議(FTP)是TCP/IP提供的標準機
?
制。用來將文件從一個主機復制到另一個主機。FTP使用TCP的服務。
主要功能
提供文件的共享(計算機程序?/?數據);?支持間接使用遠程計算機;?使用戶不因各類主機文件存儲器系統的差異而受影響;?可靠且有效的傳輸數據。
FTP?,盡管可以直接被終端用戶使用,但其應用主要還是通過程序實現。
FTP?控制幀即指?TELNET?交換信息,包含?TELNET?命令和選項。然而,大多數?FTP?控制幀是簡單的?ASCII?文本,可以分為?FTP?命令或?FTP?消息。?FTP?消息是對?FTP?命令的響應,它由帶有解釋文本的應答代碼構成。
二.FTP的主被動模式
FTP協議有兩種工作方式:PORT方式和PASV方式,中文意思為主動式和被動式。?PORT(主動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請?求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,客戶端在命令鏈路上用PORT?命令告訴服務器:“我打開了XXXX端口,你過來連接我”。于是服務器從20端口向客戶端的?XXXX端口發送連接請求,建立一條數據鏈路來傳送數據。?PASV(被動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請?求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,服務器在命令鏈路上用PASV?命令告訴客戶端:“我打開了XXXX端口,你過來連接我”。于是客戶端向服務器的XXXX端口?發送連接請求,建立一條數據鏈路來傳送數據。?從上面可以看出,兩種方式的命令鏈路連接方法是一樣的,而數據鏈路的建立方法就完?全不同。而FTP的復雜性就在于此。
三.Ubuntu下pureftpd的搭建
利用apt-get搭建pureftpd
首先,安裝pureftp。
1 Sudo apt-get install pure-ftpd第二步,用#號注釋掉/etc/inetd.conf中任何包含ftp的行。
第三步,將/etc/default/pure-ftpd-common中的STANDALONE_OR_INETD=inetd改為STANDALONE_OR_INETD=standalone。
第四步,為pureftp添加用戶。其中alice_ftp是登錄ftp的用戶名,alice_unix是對應的linux系統中的用戶名,/home/alice是登錄ftp后的根目錄。
1 Sudo pure-pw useradd alice_ftp -u alice_unix -d /home/alice第五步,創建pureftp用戶數據庫。
1 sudo pure-pw mkdb第六步,創建一些符號鏈接。
1 sudoln-s/etc/pure-ftpd/pureftpd.passwd/etc/pureftpd.passwd 2 3 sudoln-s/etc/pure-ftpd/pureftpd.pdb/etc/pureftpd.pdb 4 5 sudoln-s/etc/pure-ftpd/conf/PureDB/etc/pure-ftpd/auth/PureDB第七步,更改一些配置文件。
1 cd/etc/pure-ftpd/conf 2 3 su 4 5 echo"*,21"> Bind 6 7 echo"UTF-8"> FSCharset 8 9 echo"1000"> MinUID 10 11 echo"yes"> NoAnonymous 12 13 echo"no"> PAMAuthentication 14 15 echo"/etc/pure-ftpd/pureftpd.pdb"> PureDB 16 17 echo"no"> UnixAuthentication這里有一點需要說明,如果希望我們的ftp鏈接是明文的話,/etc/pure-ftpd/conf下的TLS文件的內容應該為0。否則,如果我們希望我們的ftp鏈接建立在tls之上,我們可以把TLS文件的內容設置為2或者3。其中,2代表控制鏈接加密但數據鏈接不加密;3代表所有鏈接都加密。另外,如果決定要進行加密,我們還應該執行下面的命令生成證書。
1 sudo mkdir -p/etc/ssl/private 2 3 openssl req -x509 -nodes -newkey rsa:1024 -days 3650 -keyout/etc/ssl/private/pure-ftpd.pem -out/etc/ssl/private/pure-ftpd.pem 4 5 chmod600/etc/ssl/private/pure-ftpd.pem最后,重啟pureftp。
1 sudo/etc/init.d/pure-ftpdrestart至此,一個簡單而又安全的ftp服務器就搭建完成了。pureftp還有許多高級功能,例如限速、限流量、結合mysql進行用戶管理等等,有興趣的朋友可以參看pureftp的文檔。
通過編譯源碼搭建pureftpd
1 * Step 1 (optional but recommended): 2 3 Create a specific, unprivileged user and group called _pure-ftpd, without any 4 5 valid shell. Don't use this for anything else, including FTP virtual users. 6 7 groupadd _pure-ftpd 8 9 useradd -g _pure-ftpd -d /var/empty -s /etc _pure-ftpd 10 11 If having a user whose name begins with an underscore is a no-go for you, 12 13 you can also call it pure-ftpd, without the underscore. 14 15 * Step 2: 16 17 If you have Cdialog or Xdialog installed on your system, try the following 18 19 command to build and install Pure-FTPd: 20 21 make -f Makefile.gui 22 23 If you don't have Cdialog or if you prefer the conventional way, here it is: 24 25 ./configure 26 27 make install-strip 28 29 Et voila! The software is now installed in /usr/local/sbin/pure-ftpd 30 31 * Step 3: 32 33 To launch the server, just type the following command: 34 35 36 37 /usr/local/sbin/pure-ftpd & 38 39 If you installed a binary package (RPM, SLP, Debian), maybe use the 40 41 following command instead: 42 43 /usr/sbin/pure-ftpd & 44 45 Your server is ready. Just type 'ftp localhost' to test it. If you want to 46 47 automatically run the server when the system boots, add the previous command 48 49 to /etc/rc.d/rc.local or /etc/rc.d/boot.local . Don't forget the '&' sign. 50 51 Note 1: 52 53 To compile under Irix, you have to issue this before typing ./configure: 54 55 export CC=cc 56 57 export CFLAGS=-I/usr/freeware/include 58 59 export LDFLAGS=-L/usr/freeware/lib32 60 61 To compile under Solaris, use GNU Make, not Solaris make. Then do: 62 63 export PATH=/usr/ccs/bin:$PATH 64 65 export MAKE=gmake 66 67 Nota 2: 68 69 To deinstall Pure-FTPd (no, do you really want to do this?), use: 70 71 ./configure 72 73 make uninstall相關資料可查看下面站點:
http://www.pureftpd.org/project/pure-ftpd/doc
http://wiki.ubuntu.org.cn/Pure-ftpd
四.Pureftpd常見問題分析:
驗證pureftpd主動模式下的傳輸端口
首先,通過windows下的doc命令對ftp進行訪問
?
上傳數據文件,驗證主動模式下的數據傳輸端口是20
?
?
將傳輸到20端口的數據包丟棄,看主動模式下是否還能正常傳輸數據
?
?
實驗證明將20端口關閉后,主動模式下無法正常傳輸數據
驗證pureftpd被動模式下的傳輸端口
首先將pureftpd被動模式下的數據傳輸端口設置為30000到30010,重新啟動pureftpd服務
?
用flashfxp登錄ftp(通過被動模式pasv登錄),屬性->參數選擇->數據連接模式(pasv)
?
?
通過flashfxp傳輸數據,查看數據傳輸端口是否在設定的值的范圍內(30000:30010)
?
?
強制一個IP地址使用被動響應??(為什么linux命令pftp無法登錄ftp,windows是用工具可以登錄ftp)
從傳輸的數據及監聽的端口進行分析
?
結論:都是強制一個IP地址使用被動響應?惹的禍
可以通過設置該參數解決問題
1 # 強制一個IP地址使用被動響應( PASV/EPSV/SPSV replies)。 - for NAT. 2 3 # Symbolic host names are also accepted for gateways with dynamic IP 4 5 # addresses. 6 7 8 9 # ForcePassiveIP 192.168.0.1(該參數是配置被動模式下服務器傳輸數據的ip地址)轉載于:https://www.cnblogs.com/sky-of-chuanqingchen/p/pureftpd.html
總結
以上是生活随笔為你收集整理的About The FTP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python接口自动化根据请求接口类型进
- 下一篇: pycharm专业版-2017.3.3