檔案傳輸協定(File Transfer Protocol)是一種傳統的網絡協定,主要功能是實作伺服器和用戶端之間的檔案發送,ftp以tcp封裝包
的模式進行伺服器與用戶端連接配接,當連接配接建立後,使用者可以使用用戶端程式連接配接伺服器端,并進行檔案的下載下傳與上傳,此外還可以直接管理使用者在伺服器上
面的檔案。FTP是僅基于TCP的服務,不支援UDP。 與衆不同的是FTP使用2個端口,一個資料端口和一個指令端口(也可叫做控制端口)。通常來說這兩個端
口是21(指令端口)和20(資料端口)。但FTP 工作方式的不同,資料端口并不總是20。這就是主動與被動FTP的最大不同之處。
(一)主動FTP
主動方式的FTP是這樣的:用戶端從一個任意的非特權端口N(N>1024)連接配接到FTP伺服器的指令端口,也就是21端口。然後用戶端開始監聽端口N+1,并發
送FTP指令“port N+1”到FTP伺服器。接着伺服器會從它自己的資料端口(20)連接配接到用戶端指定的資料端口(N+1)。 針對FTP伺服器前面的防火牆來
說,必須允許以下通訊才能支援主動方式FTP:
1. 任何大于1024的端口到FTP伺服器的21端口。(用戶端初始化的連接配接)
2. FTP伺服器的21端口到大于1024的端口。 (伺服器響應用戶端的控制端口)
3. FTP伺服器的20端口到大于1024的端口。(伺服器端初始化資料連接配接到用戶端的資料端口)
4. 大于1024端口到FTP伺服器的20端口(用戶端發送ACK響應到伺服器的資料端口)
(二)被動FTP
為了解決伺服器發起到客戶的連接配接的問題,人們開發了一種不同的FTP連接配接方式。這就是所謂的被動方式,或者叫做PASV,當用戶端通知伺服器它處于被動模
式時才啟用。 在被動方式FTP中,指令連接配接和資料連接配接都由用戶端發起,這樣就可以解決從伺服器到用戶端的資料端口的入方向連接配接被防火牆過濾掉的問題。
當開啟一個 FTP連接配接時,用戶端打開兩個任意的非特權本地端口(N > 1024和N+1)。第一個端口連接配接伺服器的21端口,但與主動方式的FTP不同,用戶端不
會送出PORT指令并允許伺服器來回連它的資料端口,而是送出 PASV指令。這樣做的結果是伺服器會開啟一個任意的非特權端口(P > 1024),并發送
PORT P指令給用戶端。然後用戶端發起從本地端口N+1到伺服器的端口P的連接配接用來傳送資料。
對于伺服器端的防火牆來說,必須允許下面的通訊才能支援被動方式的FTP:
1. 從任何大于1024的端口到伺服器的21端口 (用戶端初始化的連接配接)
2. 伺服器的21端口到任何大于1024的端口 (伺服器響應到用戶端的控制端口的連接配接)
3. 從任何大于1024端口到伺服器的大于1024端口 (用戶端初始化資料連接配接到伺服器指定的任意端口)
4. 伺服器的大于1024端口到遠端的大于1024的端口(伺服器發送ACK響應和資料到用戶端的資料端口)
一:淺析vsftpd主配置檔案:
[root@lyt ~]# mkdir /mnt/cdrom
[root@lyt ~]# mount /dev/cdrom /mnt/cdrom/
[root@lyt ~]# cd /mnt/cdrom/Server/
[root@lyt Server]# rpm -ivh vsftpd-2.0.5-16.el5.i386.rpm
[root@lyt Server]# service vsftpd start
[root@lyt Server]# chkconfig vsftpd on
1:匿名使用者和本地使用者:
[root@lyt Server]# vim /etc/vsftpd/vsftpd.conf
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_13484058606bAA.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405866LvaA.png"></a>
[root@lyt server]# useradd user1 #建立user1使用者
[root@lyt server]# passwd user1
[root@lyt server]# cd /home/user1/
[root@lyt user1]# touch user1 #在user1家目錄中建立一個檔案user1
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405874XX4J.png"></a>
進入到/var/ftp/中,在界面中點選滑鼠右鍵,選擇“登入”:
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405880t3me.png"></a>
在user1的家目錄中可以看到檔案user1,并且可以上傳檔案
2:匿名使用者怎麼上傳檔案:
[root@lyt user1]# vim /etc/vsftpd/vsftpd.conf
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405886IeGR.png"></a>
[root@lyt user1]# service vsftpd restart
[root@lyt user1]# cd /var/ftp/
[root@lyt ftp]# chmod o+wt pub/ #将pub目錄賦予匿名使用者可讀權限,所有者有權删除自己上傳的檔案
3:匿名使用者建立目錄、改名删除的權限及下載下傳匿名使用者上傳的檔案:
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405889lczz.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405892ft51.png"></a>
4:ftp的日志
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405895ZXFI.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405898GO24.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405900YPcj.png"></a>
5:為避免攻擊,拒絕使用郵箱位址登入ftp伺服器:
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405902M0QH.png"></a>
使用其他主機測試:
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_13484059053RzU.png"></a>
6:禁止使用者登入ftp伺服器後切換目錄,是該使用者禁锢在自己的家目錄中:
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_134840590899zy.png"></a>
[root@lyt ftp]# echo "user1"&gt;/etc/vsftpd/chroot_list #将user1導入到建立的chroot_list檔案中
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_13484059125WpQ.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405916kzFT.png"></a>
7:禁止某些使用者登入:禁止使用者某些使用者登入的檔案有/etc/vsftpd/user_list和/etc/vsftpd/ftpusers,
user_list較ftpusers安全
[root@lyt ftp]# vim /etc/vsftpd/vsftpd.conf
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405918gY0W.png"></a>
[root@lyt ftp]# vim /etc/vsftpd/user_list #編輯該檔案,user_list檔案可以禁止使用者登入,不提示輸入密碼,更為安全。
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405920bubR.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405923A5sc.png"></a>
[root@lyt ftp]# vim /etc/vsftpd/ftpusers #ftpusers需要輸入使用者名和密碼才提示登入失敗,安全性較低
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405927ADQY.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405931lcoe.png"></a>
8:借助于簡易防火牆實作tcp_wrappers。也即需要編輯/etc/hosts.allow和/etc/hosts.deny檔案
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405935pacA.png"></a>
[root@lyt ftp]# vim /etc/hosts.allow
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405940GYwM.png"></a>
[root@lyt ftp]# vim /etc/hosts.deny
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405947gTOk.png"></a>
使用ip位址為192.168.101.66的主機通路ftp伺服器
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405954lrOc.png"></a>
使用其他ip位址的主機無法登陸:
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405961s4GW.png"></a>
如果不允許192.168.101.99通路ftp伺服器,其他的都可以通路,則可以作如下修改:
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405963j31w.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405966iIQ3.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405969VutV.png"></a>
二:磁盤配額:
建立ftp伺服器,在新硬碟上提供ftp所有的服務,本地賬号擁有自己的私有空間,限制為10M,同時線上使用者數量100,每使用者連接配接數2,本地速率
1M/S,匿名100k/s,ftp伺服器隻能在上班時間通路(08-20:00)。
1:使用者磁盤配額:
[root@mail Server]# fdisk –l #檢視磁盤分區
[root@mail Server]# fdisk /dev/sda
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405972os6M.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405974xkMo.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405978JMtD.png"></a>
[root@mail Server]# partprobe /dev/sda #重新讀取分區資訊
[root@mail Server]# mkfs -t ext3 /dev/sda4 #格式化sda4為ext3格式
[root@mail Server]# vim /etc/fstab #永久挂載分區
[root@mail Server]# mkdir /mnt/ftp #建立挂載點
[root@mail Server]# vim /etc/fstab #編輯該檔案,永久挂載
[root@mail Server]# mount –a
[root@mail Server]# mount
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405986yWGU.png"></a>
[root@mail Server]# quotacheck –augvc #檢查磁盤配額
[root@mail ftp]#edquota -u user1 #為user1配置設定磁盤空間
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348405998jyHS.png"></a>
[root@mail ftp]# edquota -p user1 user2 #将user1的磁盤配額複制給user2
[root@mail ftp]# edquota -u user2 #檢視user2磁盤配額
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406004Qut6.png"></a>
[root@mail ftp]# quotaon /dev/sda4 #啟用配額
[root@mail Server]# vim /etc/rc.d/rc.local #開機啟動選項
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406008QCN6.png"></a>
2:建立ftp使用者的公共目錄和新的家目錄:
[root@mail ftp]# mkdir public
[root@mail ftp]# cd public/
[root@mail public]# touch test1 #建立兩個檔案test1和test2
[root@mail public]# touch test2
[root@mail public]# cd ..
[root@mail ftp]# mkdir home
[root@mail ftp]# mv /home/* /mnt/ftp/home/
[root@mail ftp]# useradd -D -b /mnt/ftp/home #建立本地使用者更改目錄
[root@mail ftp]# useradd user3 #建立使用者user3
[root@mail ftp]# passwd user3
[root@mail ftp]# grep user /etc/passwd #檢視使用者的新的家目錄
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_134840601147E1.png"></a>
[root@mail ftp]# vim /etc/vsftpd/vsftpd.conf
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_13484060153OvS.png"></a>
[root@mail ftp]# service vsftpd restart #重新開機vsftpd伺服器
[root@mail home]# dd if=/dev/zero of=f1 bs=1M count=5 #建立一個大小為5M的檔案f1
[root@mail home]# dd if=/dev/zero of=f2 bs=1M count=7 #建立一個大小為7M的檔案f2
[root@mail home]# ftp 127.0.0.1 #登入本地ftp
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406018F7Mk.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406032pYQ7.png"></a>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406040Hzhk.png"></a>
[root@mail home]# vim /etc/vsftpd/vsftpd.conf
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406044I2NL.png"></a>
[root@mail home]# vim /etc/vsftpd/vsftpd.conf #重新開機vsftpd伺服器
<b>使用其他主機測試本地使用者下載下傳速度:</b>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_13484060487GHN.png"></a>
[root@mail home]# cp -p f1 ../public/
<b>使用其他主機測試匿名使用者下載下傳速度:</b>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406051rU1W.png"></a>
<b>使用其他主機測試一個ip位址的最大連接配接數:</b>
<a href="http://blog.51cto.com/attachment/201209/211819242.png" target="_blank"></a>
3:通過超級守護程序限制使用者通路ftp的時間:
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406072IXBR.png"></a>
[root@mail home]# cd /etc/xinetd.d/
[root@mail xinetd.d]# mv tftp vsftpd
[root@mail xinetd.d]# vim /etc/xinetd.d/vsftpd
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406074JJte.png"></a>
[root@mail xinetd.d]# service xinetd restart #使用超級守護程序xinetd啟動ftp
[root@mail xinetd.d]# date 092318002012 #設定系統時間在可以通路的時間段内
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406076UwJR.png"></a>
<b>使用其他主機測試(在規定的時間内可以通路ftp):</b>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406078OGoW.png"></a>
[root@mail xinetd.d]# date 092321002012 #設定時間不在可以通路的時間段内
<b>使用其他主機測試(不在規定的時間内不可以通路ftp):</b>
<a href="http://5493845.blog.51cto.com/attachment/201209/23/5493845_1348406081fZ6C.png"></a>
本文轉自 liuyatao666 51CTO部落格,原文連結:http://blog.51cto.com/5503845/1003972,如需轉載請自行聯系原作者