ftp簡介:
FTP是應用層的協議,它基於傳輸層,它們負責進行文件的傳輸。FTP是一個客戶端-服務器協議,能操作任何類型的文件而不需要進一步處理。但是,FTP有着極高的延時,這意味着,從開始請求到第一次接收需求數據之間的時間會非常長,並且不時的必需執行一些冗長的登陸進程。
FTP服務一般運行在20和21兩個端口。端口20用於在客戶端和服務器之間傳輸數據流,而端口21用於傳輸控制流,並且是命令通向ftp服務器的進口。當數據通過數據流傳輸時,控制流處於空閒狀態。而當控制流空閒很長時間後,客戶端的防火牆會將其會話置爲超時,這樣當大量數據通過防火牆時,會產生一些問題。此時,雖然文件可以成功的傳輸,但因爲控制會話會被防火牆斷開,傳輸會產生一些錯誤。
主動和被動模式 FTP有兩種使用模式:主動和被動。主動模式要求客戶端和服務器端同時打開並且監聽一個端口以建立連接。在這種情況下,客戶端由於安裝了防火牆會產生一些問題。所以,創立了被動模式。被動模式只要求服務器端產生一個監聽相應端口的進程,這樣就可以繞過客戶端安裝了防火牆的問題。一個主動模式的FTP連接建立要遵循以下步驟:
1.客戶端打開一個隨機的端口(端口號大於1024,在這裏,我們稱它爲x),同時一個FTP進程連接至服務器的21號命令端口。此時,源端口爲隨機端口x,在客戶端,遠程端口爲21,在服務器。
2.客戶端開始監聽端口(x+1),同時向服務器發送一個端口命令(通過服務器的21號命令端口),此命令告訴服務器客戶端正在監聽的端口號並且已準備好從此端口接收數據。這個端口就是我們所知的數據端口。
3.服務器打開20號源端口並且建立和客戶端數據端口的連接。此時,源端口爲20,遠程數據端口爲(x+1)。
4.客戶端通過本地的數據端口建立一個和服務器20號端口的連接,然後向服務器發送一個應答,告訴服務器它已經建立好了一個連接。
被動模式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響應和數據到客戶端的數據端口)
FTP和網頁瀏覽器大多數最新的網頁瀏覽器和文件管理器都能和FTP服務器建立連接。這使得在FTP上通過一個接口就可以操控遠程文件,如同操控本地文件一樣。這個功能通過給定一個FTP的URL實現,形如ftp://<服務器地址>。是否提供密碼是可選擇的,如果有密碼,則形如:@ftp://<login>:<password>@<ftpserveraddress>。大部分網頁瀏覽器要求使用被動FTP模式,然而並不是所有的FTP服務器都支持被動模式。
pure-ftpd 是一個快速、高效、輕便、安全的FTP服務器,它不象其他流行的FTP SERVER軟件。以安全和配置簡單爲設計目標,支持虛擬主機,IPV6,PAM等功能。
pureftp的案例配置:
所用拓撲:
一,安裝前的準備
1).配置本地yum服務器
[root@localhost ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo
2).安裝所需要的軟件包
[root@localhost Server]# yum install httpd php php-mysql mysql mysql-server mysql-devel –y
啓動服務
[root@localhost Server]#service httpd start
[root@localhost Server]# service mysqld start
把下面的兩種服務加入開機啓動
[root@localhost Server]# chkconfig httpd on
[root@localhost Server]# chkconfig mysqld on
3).確認所需的軟件組
[root@localhost Server]# yum grouplist
二,安裝並配置pure-ftp
1)編譯並安裝pure-ftp
[root@localhost ~]# tar zxvf pure-ftpd-1.0.36.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src
[[root@localhost src]# cd pure-ftpd-1.0.36/
[root@localhost pure-ftpd-1.0.36]#./configure \
--prefix=/usr/local/pureftpd \ //安裝目錄
--with-mysql \
--with-shadow \
--with-pam \
--with-welcomemsg \
--with-uploadscript \
--with-cookie \
--with-virtualchroot \
--with-virtualhosts \
--with-diraliases \
--with-quotas \
--with-puredb \
--with-sysquotas \
--with-ratios \
--with-ftpwho \
--with-throttling \
--with-language=simplified-chinese
編譯
[root@localhost pure-ftpd-1.0.36]# make
安裝
[root@localhost pure-ftpd-1.0.36]# make install
2)生成pure-ftpd的服務腳本
[root@localhost pure-ftpd-1.0.36]# cd configuration-file/
賦予pure-config.pl執行權限
[root@localhost configuration-file]# chmod a+x pure-config.pl
[root@localhost configuration-file]# cp pure-config.pl /usr/local/pureftpd/sbin/
創建pureftp配置文件存放的目錄
[root@localhost configuration-file]# mkdir /usr/local/pureftpd/etc
把配置文件複製到所建的目錄下
[root@localhost configuration-file]# cp pure-ftpd.conf /usr/local/pureftpd/etc/
3)配置用service管理 pure-ftpd服務
改變如下行:
fullpath=/usr/local/pureftpd/sbin/$prog
pureftpwho=/usr/local/pureftpd//sbin/pure-ftpwho
$fullpath /usr/local/pureftpd/etc/pure-ftpd.conf –daemonize
按照說明修改配置文件如下:
[root@localhost pure-ftpd-1.0.36]# cd contrib/
[root@localhost contrib]# cp redhat.init /etc/init.d/pureftpd
[root@localhost contrib]# vim /etc/init.d/pureftpd
改變啓動腳本的權限
[root@localhost contrib]# chmod 755 /etc/init.d/pureftpd
加入開機啓動隊列
[root@localhost etc]# chkconfig --add pureftpd
[root@localhost etc]# chkconfig pureftpd on
啓動ftp服務
[root@localhost etc]# service pureftpd restart
4)配置ftp用戶登錄環境
修改配置文件pure-ftpd.conf
所要修改內容如下:
chrootEveryone yes 限定在自己的家目錄
NoAnonymous yes 不允許匿名登錄
Bind 127.0.0.1,21 監聽本機迴環 <可選>
Bind 192.168.1.10,21 監聽本機IP <自行添加的,非必須>
CreateHomeDir yes 允許用戶登錄後自動創建家目錄 <必須>
按照上面的說明修改配置文件
[root@localhost contrib]# cd /usr/local/pureftpd/etc/
[root@localhost etc]# vim pure-ftpd.conf
5)配置虛擬用戶登錄環境
[root@localhost ~]# mkdir /ftproot
[root@localhost ~]# chmod -R 777 /ftproot //這不不做可以能會引起登錄時報421錯誤
[root@localhost ~]# useradd virtualftp -d /ftproot -s /sbin/nologin –M //創建虛擬用戶對應的系統用戶
改變用戶的所屬組及所用者
[root@localhost ~]# chown virtualftp:virtualftp /ftproot
6)設置環境變量
[root@localhost ~]# echo PATH=$PATH:/usr/local/pureftpd/bin/ >>/etc/profile[root@localhost ~]# cd /usr/local/pureftpd
[root@localhost pureftpd]# . /etc/profile
[root@localhost ~]# source /etc/profile
做完以上幾步後pure-pw命令就可在任何路徑下執行了
有關pure-pw 的命令用法如下:
# pure-pw show user 查看user這個用戶的詳細信息# pure-pw list 是看用戶列表的
# pure-pw passwd tony -m 修改user的密碼
# pure-pw mkdb /usr/local/pureftpd/etc/pureftpd.pdb 創建虛擬用戶數據庫。
# pure-pw usermod 修改用戶
7).添加虛擬賬號並與本地賬號virtual映射
[root@localhost ~]# pure-pw useradd xht2 -u virtualftp -g virtualftp -d /ftproot/xht2 –m
說明:
xht2是用戶名,-u virtualftp是其實際的linux用戶,-d指定起始目錄,並鎖定於該目錄。如果不鎖定,則用-D;如果需要不同的權限,可以建立新的linux用戶與組
如果用的系統自帶的ftp用戶,這樣的話還需修改配置文件pure-ftpd.conf中的MinUID爲ftp用戶的UID 14,否則登錄時會出現530錯誤;所以這裏建議創建另一個非系統自帶的用戶做映射
建立用戶數據庫:
[root@localhost ~]# pure-pw mkdb /usr/local/pureftpd/pureftpd.pdb
說明:今後每添加或修改用戶數據庫都應該執行一次mkdb
8)修改配置文件指定pureDB路徑
[root@localhost pureftpd]# vim /usr/local/pureftpd/etc/pure-ftpd.conf
([root@localhost ~]# vim /usr/local/pureftpd/etc/pure-ftpd.conf
9)指定mysqconfigfilel的路徑
[root@localhost pureftpd]#vim /usr/local/pureftpd/etc/pure-ftpd.conf
修改如下:
三,配置web管理程序pureadmin0.3
1)解壓壓縮包
[root@localhost ~]# tar -zxvf PureAdmin-0.3.tar.gz -C /var/www/html
[root@localhost ~]# cd /var/www/html
2)重命名PureAdmin-0.3
[root@localhost html]# mv PureAdmin-0.3/ pureadmin
3)生成配置文件
[root@localhost ~]# cp pureftpd-mysql.conf /usr/local/pureftpd/etc/
4)修改配置文件如下:
[root@localhost pureadmin]# cd pureadmin
[root@localhost etc]# vim pureftpd-mysql.conf
5)導入數據到mysql
爲mysql設置密碼:
[root@localhost ~]# mysqladmin -u root -p password "123"
導入ftpuser數據庫
[root@localhost ~]# mysql -u root -p <pureftp.sql;
6)登錄mysql查看ftpusers
[root@localhost ~]# mysql -u root -p ;
mysql>use ftpusers
mysql> grant all privileges on ftpusers.* to ftp@localhost identified by 'tmppasswd';
mysql> flush privileges;
6)修改pureadmin的配置文件
config.php文件的選項說明如下:
<?php
$cfg['dbhost']='localhost'; //mysql host
$cfg['dbname']='ftpusers'; //mysql db name 所用的庫<與前面導入的sql中要一致>
$cfg['dbuser']='ftp'; //mysql user 登錄mysql的帳號
$cfg['dbpasswd']='tmppasswd'; //mysql password 登錄mysql的密碼
//ftp config
$cfg['page']=10; 每頁顯示的用戶數量
//ftp passwd type : TEXT/CRYPT/MD5
$cfg['passwdtype']='MD5'; 認證模式<要與pureftpd-mysql.conf中一致>
//ftp default
$cfg['uid']=500; //uid 映射虛擬用戶的UID,即剛創建的virtualftp用戶
$cfg['gid']=500; //gid 同上
$cfg['dir']='/ftproot/'; //dir 默認家目錄
$cfg['qf']=0; //quotafiles 文件個數限制,0爲不限制
$cfg['qs']=100; //quotasize 總文件大小
$cfg['ul']=0; //ULBandwidth 上傳速率限制
$cfg['dl']=200; //DLBandwidth 下載速率限制
$cfg['ur']=0; //ULRatio 上傳比
$cfg['dr']=0; //DLRatio 下載比
$cfg['status']=1; //status 狀態,1爲激活;0爲禁止
$cfg['ip']= '*'; //ipaddress 可訪問IP,*爲所有
?>
[root@localhost ~]# cd /var/www/html
[root@localhost html]# cd pureadmin
[root@localhost pureadmin]# vim config.php
四,測試
登錄pureftpd後臺管理程序
創建虛擬賬號
登錄mysql查看xht1
[root@localhost ~]# mysql -u root -p ;
mysql>use ftpusers
用先前創建的虛擬賬號xht2登錄測試
在/ftproot下查看自動創建的目錄xht2
在瀏覽器上用xht1測試
測試結束!