1、FTP的基本概念
1. FTP做用
FTP (文件傳輸協議)是TCP/IP協議棧所提供的一種子協議,該子協議具體能夠實如今如下功能:
從客戶向服務器發送一個文件;從服務器向客戶發送一個文件;
從服務器向客戶發送文件或目錄列表
2. FTP的工做體系
FTP工做在TCP/ip模型的第四層上,服務器與客戶機之間利用TCP的21號端口傳送信號指令;利用20號端口用於傳送數據;具體工做過程以下:
(1) 客戶機啓動客戶端程序,經過TCP的「三次握手」創建服務器的鏈接
(2) 服務器對客戶機進行身份驗證
(3) 進行相應目錄操做和數據傳輸
(4) 斷開鏈接
3. FTP的數據傳輸模式
主動傳輸模式:
在這種模式下,服務器向客戶端發起一個用於數據傳輸的鏈接,客戶端的鏈接端口是由服務器和客戶端經過協商經過的
被動傳輸模式:
在這種模式下,客戶端向服務器發起一個用於數據傳輸的鏈接,客戶端的鏈接端口是發起這個數據鏈接請求時使用的端口號
4. Linux下常見的FTP軟件
(1)wu-ftp
wu-ftp是歷史最久的非商業FTP服務器軟件之一,主要有如下特色:
能夠限制最高訪問人數,以維持系統的最佳運行效率
能夠記錄文件上傳和下載的全過程
能夠支持匿名FTP服務
能夠支持虛擬FTP主機
能夠控制不一樣網段及其對FTP服務器的存取權限和訪問時段
(2)proftp
proftpd是在乎圖修改wu-ftp一些不足狀況下產生的,具體有以下特色:
單配置文件,配置簡單
基於單個目錄的.ftpaccess設置文件,相似apache的.htaccess文件
能夠設置爲從xinetd啓動,或者是獨立ftp服務器兩種運行方式
強大的log功能
支持以非root身份運行,從而減小了安全隱患
支持匿名FTP功能
(3)vsftpd
是一個安全、高速、穩定的FTP服務器
可設定多個基於IP的虛擬FTP服務器
匿名FTP服務器更是十分容易
不執行任何外部程序,從而減小了安全隱患
支持虛擬用戶,且支持每一個虛擬用戶具備獨立的配置
能夠設置爲從xinetd啓動,或者是獨立FTP服務器兩種運行方式
支持PAM或xinetd/tcp_wrappers的認證方式
支持帶寬限制shell
二.vsftp安裝與配置apache
1.軟件包:vsftpd-x.x.x-x.i386.rpmvim
2./etc/vsftpd/vsftpd.conf 主配置文件
/etc/vsftpd.ftpusers 指定哪些用戶不能訪問FTP服務器
/etc/vsftpd.user_list 能夠根據vsftpd.conf文件中的設置來決定該文件中指定的用戶是否能夠訪問ftp服務器
/etc/rc.d/init.d/vsftpd vsftpd的啓動腳本文件安全
3.vim /etc/vsftp/vsftpd.conf 中一些基本配置選項服務器
anonymous_enable=YES|NO
控制是否容許匿名用戶登陸,YES容許,NO不容許,默認值爲YES。
ftp_username= username
匿名用戶所使用的系統用戶名。默認下,此參數在配置文件中不出現,值爲ftp
no_anon_password=YES|NO
控制匿名用戶登入時是否須要密碼,YES不須要,NO須要。默認值爲NO。
anon_root=path
設定匿名用戶的根目錄,即匿名用戶登入後,被定位到此目錄下。主配置文件中默認無此項,默認值爲/var/ftp/。
anon_world_readable_only=YES|NO
控制是否只容許匿名用戶下載可閱讀文檔。YES,只容許匿名用戶下載可閱讀的文件。NO,容許匿名用戶瀏覽整個服務器的文件系統。默認值爲YES。
anon_upload_enable=YES|NO
控制是否容許匿名用戶上傳文件,YES容許,NO不容許,默認是不設值,即爲NO。除了這個參數外,匿名用戶要能上傳文件,還須要兩個條件:一,write_enable參數爲YES;二,在文件系統上,FTP匿名用戶對某個目錄有寫權限。
anon_mkdir_write_enable=YES|NO
控制是否容許匿名用戶建立新目錄,YES容許,NO不容許,默認是不設值,即爲NO。固然在文件系統上,FTP匿名用戶必需對新目錄的上層目錄擁有寫權限。
anon_other_write_enable=YES|NO
控制匿名用戶是否擁有除了上傳和新建目錄以外的其餘權限,如刪除、改名等。YES擁有,NO不擁有,默認值爲NO。
chown_uploads=YES|NO
是否修改匿名用戶所上傳文件的全部權。YES,匿名用戶所上傳的文件的全部權將改成另一個不一樣的用戶全部,用戶由chown_username參數指定。此選項默認值爲NO。
chown_username=whoever
指定擁有匿名用戶上傳文件全部權的用戶session
local_enable=YES|NO
控制vsftpd所在的系統的用戶是否能夠登陸vsftpd。默認值爲YES。
local_root=
定義全部本地用戶的根目錄。當本地用戶登入時,將被更換到此目錄下。默認值爲無。
user_config_dir=
定義用戶我的配置文件所在的目錄。用戶的我的配置文件爲該目錄下的同名文件併發
chroot_list_enable=YES|NO
鎖定某些用戶在自家目錄中。即當這些用戶登陸後,不能夠轉到系統的其餘目錄,只能在自家目錄(及其子目錄)下。具體的用戶在chroot_list_file參數所指定的文件中列出。默認值爲NO。
chroot_list_file=/etc/vsftpd/chroot_list
指出被鎖定在自家目錄中的用戶的列表文件。文件格式爲一行一用戶。一般該文件是/etc/vsftpd/chroot_list。此選項默認不設置。
chroot_local_users=YES|NO
將本地用戶鎖定在自家目錄中。當此項被激活時,chroot_list_enable和chroot_local_users參數的做用將發生變化,chroot_list_file所指定文件中的用戶將不被鎖定在自家目錄。本參數被激活後,可能帶來安全上的衝突,特別是當用戶擁有上傳、shell訪問等權限時。所以,只有在確實瞭解的狀況下,才能夠打開此參數。默認值爲NO。
passwd_chroot_enable =YES|NO
當此選項激活時,與chroot_local_user選項配合,chroot()容器的位置能夠在每一個用戶的基礎上指定。每一個用戶的容器來源於/etc/passwd中每一個用戶的自家目錄字段。默認值爲NO。app
listen_address=ip address
定義了在主機的哪一個IP地址上監聽FTP請求socket
listen_port=port_value
指定FTP服務器監聽的端口號(控制端口),默認值爲21。此選項在standalone模式下生效tcp
port_enable=YES|NO
指定數據鏈接時模式,默認值爲YES(PORT模式,NO爲PASV模式)
connect_from_port_20=YES|NO
控制以PORT模式進行數據傳輸時是否使用20端口(ftp-data)
ftp_data_port=port number
設定ftp數據傳輸端口(ftp-data)值。默認值爲20。此參數用於PORT FTP模式。
pasv_enable=YES|NO
YES,容許數據傳輸時使用PASV模式。NO,不容許使用PASV模式。默認值爲YES。
pasv_min_port=port number
pasv_max_port=port number
設定在PASV模式下,創建數據傳輸所可使用port範圍的下界和上界,0 表 示任意。默認值爲0。把端口範圍設在比較高的一段範圍內,好比50000-60000,將有助於安全性的提升
pasv_address= ip address
此選項爲一個數字IP地址,做爲PASV命令的響應。默認值爲none,即地址是從呼入的鏈接套接字(incoming connectd socket)中獲取。
ascii_upload_enable=YES|NO
控制是否容許使用ascii模式上傳文件,YES容許,NO不容許,默認爲NO
ascii_download_enable=YES|NO
控制是否容許使用ascii模式下載文件,YES容許,NO不容許,默認爲NO。
idle_session_timeout= numerical value
空閒用戶會話的超時時間,如果超出這時間沒有數據的傳送或是指令的輸入,則會強迫斷線。單位爲秒,默認值爲300。
data_connection_timeout= numerical value
空閒的數據鏈接的超時時間。默認值爲300 秒。
accept_timeout=numerical value
接受創建聯機的超時設定,單位爲秒。默認值爲60。
connect_timeout=numerical value
響應PORT方式的數據聯機的超時設定,單位爲秒。默認值爲60
max_clients=numerical value
此參數在VSFTPD使用單獨(standalone)模式下有效。此參數定義了FTP服務器最大的併發鏈接數,當超過此鏈接數時,服務器拒絕客戶端鏈接。默認值爲0,表示不限最大鏈接數。
max_per_ip=numerical value
此參數在VSFTPD使用單獨(standalone)模式下有效。此參數定義每一個IP地址最大的併發鏈接數目。超過這個數目將會拒絕鏈接。此選項的設置將影響到象網際快車這類的多進程下載軟件。默認值爲0,表示不限制。
anon_max_rate=value
設定匿名用戶的最大數據傳輸速度value,以Bytes/s爲單位。默認無。
local_max_rate=value
設定用戶的最大數據傳輸速度value,以Bytes/s爲單位。默認無。
三.功能實現,以案例爲主
案例一:利用vsftpd配置一臺支持匿名用戶和本地用戶登陸,具體要求以下:
容許匿名用戶登陸和本地用戶登陸
禁止匿名用戶上傳
容許本地用戶上傳和下載,且鎖定本地用戶主目錄,容許用戶刪除用戶主目錄的文件
創建用戶組ftpusers,同時創建用戶ftp1,ftp2屬於ftpusers組,並設置用戶的主目錄爲/soft
設置/soft目錄容許ftpusers組中的用戶能夠寫入,但不能刪除目錄中的非本身擁有的文件
本地用戶的文件生成掩碼爲022
空閒的會話時間爲600秒,空閒數據鏈接時間爲60秒,自動中斷時間爲30秒,自動激活時間爲10秒
本地用戶的最大傳輸速率爲50000b/s,匿名用戶的最大傳輸速率爲30000b/s
客戶端的鏈接端口爲5000-6000(被動模式中使用)
使用獨佔啓動方式,偵聽192.168.5.1接口的21號端口
禁止192.168.5.128主機訪問FTP服務器
併發鏈接的客戶數爲300,每臺客戶機的最大鏈接爲5
1. 安裝相關軟件包
#yum install vsftpd
2.修改/etc/vsftpd/vsftpd.conf
#vim /etc/vsftpd/vsftpd.conf
修改以下:
anonymous_enable=yes
local_enable=yes
anon_upload_enable=no
write_enable=yes
local_mask=022
idle_session_timeout=600
data_connection_timeout=60
accept_timeout=30
connect_timeout=10
local_max_rate=50000
anon_max_rate=30000
pasv_min_port=5000
pasv_max_port=6000
chroot_local_user=yes
listen=yes
listen_address=192.168.5.1
listen_port=21
max_clients=300
max_per_ip=5
3.建立相關用戶組和用戶
#mkdir /soft
#chmod 1777 /soft
#groupadd ftpusers
#useradd -d /soft -g ftpusers ftp1
#passwd ftp1
#useradd -d /soft -g ftpusers ftp2
#passwd ftp2
4. 設置hosts.allow文件
#vi /etc/hosts.allow
vsftpd:192.168.5.128:DENY
5. 啓動服務
#service vsftpd start
6.進行實驗效果驗證,用新添加的用戶進行家目錄的訪問
案例二:利用VSFTPD配置一臺支持虛擬用戶登陸的FTP服務器,具體要求以下:
支持本地用戶和虛擬用戶登陸,不容許匿名用戶登陸
容許本地用戶任意寫入
鎖定本地用戶的用戶主目錄
創建虛擬用戶vftp1,vftp2都對應本地用戶guest,且虛擬用戶在用戶主目錄中能夠寫入,但不能刪除
設置客戶端鏈接時的端口爲5000-6000
最大空閒會話時間長度爲600秒
設置空閒數據鏈接的中斷時間爲200秒
設置客戶端空閒時的自動中斷時間爲100秒和激活鏈接的時間爲30秒
本地用戶的最大傳輸速率爲2MB/s
使用獨佔啓動方式,偵聽192.168.5.1接口的21號端口
設置服務器的併發鏈接總數爲200
每一個客戶機的併發鏈接總量爲5
容許192.168.5.0/24網段內的主機訪問
所謂虛擬用戶:與系統無關聯,不能登入系統,只能訪問FTP服務器
配置過程:
1. 安裝相關軟件
#yum install vsftpd
2. 修改/etc/vsftpd/vsftpd.conf文件
#vi m /etc/vsftpd/vsftpd.conf
修改內容以下:
anonymous_enable=no
local_enable=yes
guest_enable=yes
guest_username=guest
write_enable=yes
chroot_local_user=yes
pam_service_name=ftp
idle_session_timeout=600
data_connection_timeout=200
accept_timeout=100
connect_timeout=30
local_max_rate=20000
pasv_min_port=5000
pasv_max_port=6000
listen=yes
listen_address=192.168.5.1
listen_port=21
3. 創建相關用戶
#useradd guest
#passwd guest
#chmod 1777 /home/guest
//創建虛擬用戶所對應的本地用戶
#vi /etc/vsftpd/vlogin.txt //創建虛擬用戶文件
添加以下內容:
vftp1 (用戶名)
123 (密 碼)
vftp2
123
4.生成口令庫文件,運行db_load以前先安裝db4-utils的RPM包
#yum -y install db4 db4-tcl db4-utils
#db_load -T -t hash -f /etc/vsftpd/vlogin.txt /etc/vsftpd/vlogin.db
#chmod 600 /etc/vsftpd/vlogin.db
5. 設置PAM驗證
#cp /etc/pam.d/vsftpd /etc/pam.d/ftp
#vim /etc/pam.d/ftp
添加以下內容:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vlogin
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vlogin
6. 設置主機訪問控制
#vim /etc/hosts.allow
添加以下內容:
vsftpd:192.168.5.0/24:ALLOW
7. 啓動服務
#service vsftpd start
8.實驗效果驗證:用虛擬用戶進行登陸