一:FTP工做原理服務器
在一個FTP會話中,存在兩個獨立的網絡鏈接:控制鏈接和數據鏈接。一般狀況下,FTP服務器監聽端口號21,等待控制鏈接創建請求。當FTP控制鏈接創建以後,便可開始傳輸文件,傳輸文件的鏈接稱爲FTP「FTP數據鏈接」。FTP數據鏈接即FTP傳輸數據的過程,它有3種傳輸模式,即主動傳輸模式(PORT)、被動傳輸模式(PASSIVE,簡稱PASV)、單端口模式。網絡
主動傳輸模式:當FTP控制鏈接創建,客戶端提出目錄列表及傳輸文件時,客戶端發出PORT命令與服務器協商,FTP服務器使用端口20做爲服務器的數據鏈接端口與客戶端創建數據鏈接。端口20只用於鏈接源地址是服務器的狀況,別且端口20沒有監聽進程而是監聽客戶請求。在主動傳輸模式中,FTP服務器使用20端口與客戶端的臨時端口鏈接並傳輸數據,客戶端只是出於接受狀態。ide
被動傳輸模式:當FTP控制鏈接創建,客戶端提出目錄列表及傳輸文件時,客戶端發送PASV命令使服務器出於被動傳輸模式,FTP服務器等待客戶與其聯繫。FTP服務器在非20端口的其餘數據傳輸端口上監聽客戶請求。當FTP客戶在防火牆以外訪問FTP服務器時,須要使用被動傳輸模式。即FTP服務器打開一個臨時端口等待客戶端與其鏈接並傳輸數據。服務器並不參與數據的主動傳輸,只是被動接收。測試
單端口模式:使用該傳輸模式,客戶端的控制鏈接端口和數據鏈接端口一致。由於這種模式沒法在短期連續輸入數據並傳輸命令,所以並不經常使用。大數據
二:Linux服務器端主要FTP軟件:Wu-ftpd Vsftpd ProFTPDrest
有關軟件的詳細介紹這裏再也不贅述。日誌
三:配置Vsftpd服務器blog
Vsftpd配置文件進程
/usr/sbin/vsftpd Vsftpd的主程序ip
/etc/rc.d/init.d/vsftpd 啓動腳本
/etc/vsftpd/vsftpd.conf 主配置文件
/etc/pam.d/vsftpd PAM認證文件
/etc/vsftpd.ftpusers 禁止使用Vsftpd的用戶列表文件
/etc/vsftpd.user_list 禁止或容許使用Vsftpd的用戶列表文件
/var/ftp 匿名用戶主目錄
/var/ftp/pub 匿名用戶的下載目錄
/etc/logrotate.d/vsftpd.log Vsftpd的日誌文件
1. 快速搭建一個Vsftpd服務器
1.1:安裝軟件包
1.2:啓動vsftpd服務器
1.3:在/var/ftp/pub目錄下建立文件test1
#touch /var/ftp/pub/test1
1.4:在客戶端用Leapftp軟件測試
到此,一臺簡單的Vsftpd服務器就搭建好。這是一個專門提供下載服務的匿名FTP服務器,這是由於Red Hat已經配置一個默認的FTP服務器,不過在實際應用中並不適用大部分的需求。
2. 禁用匿名方式登陸FTP
1.1:修改主配置文件:/etc/vsftpd/vsftpd.conf
將第12行的YES改成NO,保存退出,重啓服務便可
3. 鎖定用戶的登陸目錄
3.1: 默認用戶登陸到FTP,除了看到本身的家目錄外,還能瀏覽其餘目錄,這裏讓用戶鎖定在本身家目錄下
3.2:修改主配置文件
添加117和118行,將鎖定用戶目錄的功能開啓,而後再指定鎖定用戶的列表文件
3.3:重啓服務,並將us1用戶添加到列表文件中
#service vsftpd restart
#echo us1 > /etc/vsftpd/chroot_list
3.4:驗證效果
能夠看到他的訪問目錄只能呆在本身家了。
4. 更改用戶默認的登陸目錄
4.1:改變用戶的訪問目錄爲:/tmp
默認每一個用戶登陸到FTP,都是登陸到他的家目錄
4.2:在/tmp下建一個文件:test2
#touch /tmp/test2
4.3:修改主配置文件,在主配置文件的最後一行添加:
# local_root=/tmp
4.4:重啓服務,並驗證效果
us1的登陸目錄已經改變爲/tmp
5. 配置用戶的我的配置文件
在主配置文件中,全部的參數對每一個用戶都是生效的,好比:local_max_rate=value(限制用戶最大的數據傳輸速度),定義在主配置文件中的此選項,則會對全部的用戶限制相同的速度,可是,若想對一些特色的用戶增長最大的數據傳輸速度,則要用到用戶我的配置文件
5.1:先定義用戶的我的配置文件目錄:在主配置文件中添加一行
#user_config_dir=/etc/vsftpd/userconf
5.2:建立這個目錄
#mkdir /etc/vsftpd/userconf
5.3:在這個目錄中建立跟用戶同名的文件,好比定義us1的我的配置文件
#touch /etc/vsftpd/userconf/us1
5.4:修改剛建立的文件us1,定義用戶us1一些我的配置參數(只對us1生效)。好比設置us1最大數據傳輸速度,則添加一行
local_max_rate=100000 #單位爲Bytes/s
6. 只容許特定的用戶可登錄FTP
6.1:修改主配置文件,添加下面三行
#userlist_deny=NO
#userlist_enable=YES
#userlist_file=/etc/vsftpd.user_list
第三行表示用戶的列表文件,第二行值爲YES,表示此選項被激活,當列表中的用戶登陸FTP服務器時,該用戶在提高輸入口令以前被禁止。即不容許該用戶登陸。可是第一行值爲NO,表示用戶列表文件的用戶能夠登陸FTP服務器,默認是YES,禁止文件中的用戶登陸。因此開啓了第二行和第三行,必定要將第一行的值改成NO,不然變成列表中的用戶被禁止登錄。
6.2:將容許登陸的用戶添加到列表文件中
#echo us2 /etc/vsftpd.user_list
6.3:重啓服務便可,則該FTP服務器只容許us2登陸了。
7. 設置用戶的操做權限
write_enable=YES/NO
是否有可寫權限
anon_umask=
設置匿名用戶新增文件的umask數值,默認是077
local_umask=
設置用戶新增文件時的umask數值,默認爲077
file_open_mode=
設置上傳檔案的全限,默認爲0666。若要是上傳的檔案有執行權限,則修改成0777