1. 程式人生 > 實用技巧 >linux服務之FTP服務

linux服務之FTP服務

一、FTP簡介

FTP:FileTransferProtocol(檔案傳輸協議),專門用來傳輸檔案的協議。工作在應用層。

1.FTP工作模式

FTP是僅基於TCP的服務,不支援UDP。與眾不同的是FTP使用2個埠,一個數據埠和一個命令埠(也可叫做控制埠)。通常來說這兩個埠是21(命令埠)和20(資料埠)。但FTP工作方式的不同,資料埠並不總是20。這就是主動與被動FTP的最大不同之處。主要有兩種工作模式:

1)主動FTP

Port模式,客戶端從一個任意的非特權埠NN>1024)連線到FTP伺服器的命令埠,也就是21埠。然後客戶端開始監聽埠N+1,併發送FTP命令“portN+1”到FTP伺服器。接著伺服器會從它自己的資料埠(

20)連線到客戶端指定的資料埠(N+1)。

 針對FTP伺服器前面的防火牆來說,必須允許以下通訊才能支援主動方式FTP

  <1>任何大於1024的埠到FTP伺服器的21埠。(客戶端初始化的連線)

  <2>FTP伺服器的21埠到大於1024的埠。(伺服器響應客戶端的控制埠)

  <3>FTP伺服器的20埠到大於1024的埠。(伺服器端初始化資料連線到客戶端的資料埠)

  <4>大於1024埠到FTP伺服器的20埠(客戶端傳送ACK響應到伺服器的資料埠)

2)被動FTP

為了解決伺服器發起到客戶的連線的問題,人們開發了一種不同的FTP連線方式。這就是所謂的被動方式,或者叫做

PASV,當客戶端通知伺服器它處於被動模式時才啟用。

  在被動方式FTP中,命令連線和資料連線都由客戶端發起,這樣就可以解決從伺服器到客戶端的資料埠的入方向連線被防火牆過濾掉的問題。

  當開啟一個FTP連線時,客戶端開啟兩個任意的非特權本地埠(N>1024N+1)。第一個埠連線伺服器的21埠,但與主動方式的FTP不同,客戶端不會提交PORT命令並允許伺服器來回連它的資料埠,而是提交PASV命令。這樣做的結果是伺服器會開啟一個任意的非特權埠(P>1024),併發送PORTP命令給客戶端。然後客戶端發起從本地埠N+1到伺服器的埠P的連線用來傳送資料。

  對於伺服器端的防火牆來說,必須允許下面的通訊才能支援被動方式的

FTP:

  <1>從任何大於1024的埠到伺服器的21(客戶端初始化的連線)

  <2>伺服器的21埠到任何大於1024的埠(伺服器響應到客戶端的控制埠的連線)

  <3>從任何大於1024埠到伺服器的大於1024(客戶端初始化資料連線到伺服器指定的任意埠)

  <4>伺服器的大於1024埠到遠端的大於1024的埠(伺服器傳送ACK響應和資料到客戶端的資料埠)

總結

在主動模式下:FTP伺服器的控制埠是21,資料埠是20,所以在做靜態對映的時候只需要開放21埠即可,他會用20埠和客戶端主動的發起連線。

在被動模式下:FTP伺服器的控制埠是21,資料埠是隨機的,且是客戶端去連線對應的資料埠,所以在做靜態的對映話只開放21埠是不可以的。此時需要做DMZ

注:

DMZDemilitarizedZone(隔離區、非軍事化區)。它是為了解決安裝防火牆後外部網路不能訪問內部網路伺服器的問題,而設立的一個非安全系統與安全系統之間的緩衝區,這個緩衝區位於企業內部網路和外部網路之間的小網路區域內,在這個小網路區域內可以放置一些必須公開的伺服器設施,如企業Web伺服器、FTP伺服器。此外,通過這樣一個DMZ區域,更加有效地保護了內部網路,因為這種網路部署,比起一般的防火牆方案,對***者來說又多了一道關卡。

常見的ftp軟體

伺服器端:

linux:wuftpd,proftpd,pureftp,vsftpd(verysecure),filezilla

Windows:Serv-U,IIS

客戶端:

Client:ftp,lftp,gftp(linux),filezilla,flashfxp,cuteftp,leapftp

二、VSFTP特點

VSFTP是一個基於GPL釋出的類Unix系統上使用的FTP伺服器軟體,它的全稱是VerySecureFTP從此名稱可以看出來,編制者的初衷是程式碼的安全。

安全性是編寫VSFTP的初衷,除了這與生俱來的安全特性以外,高速與高穩定性也是VSFTP的兩個重要特點。

<1>在速度方面,使用ASCII程式碼的模式下載資料時,VSFTP的速度是Wu-FTP的兩倍,如果Linux主機使用2.4.*的核心,在千兆乙太網上的下載速度可達86MB/S

<2>在穩定方面,VSFTP就更加的出色,VSFTP在單機(非叢集)上支援4000個以上的併發使用者同時連線,根據RedHatFtp伺服器的資料,VSFTP伺服器可以支援15000個併發使用者.

三、VSFTP安裝測試與簡單認識

1.實驗環境

系統環境RHEL-6.4-i386

伺服器端:yum–yinstallvsftpd(vsftp軟體包)

啟動服務:servicevsftpdstart

客戶端:yum–yinstallftp

yum–yinstalllftp

在客戶端連線測試:

152127751.png

2.協義響應碼:

1xx:伺服器資訊

2xx:正確響應資訊

3xx:正常響應,某操作過程尚未完成,需進一步補充完成;

4xx:客戶端錯誤;

5xx:伺服器端錯誤;

注:

<1>若請求伺服器端資訊,伺服器端不存在則會出現客戶端錯誤資訊,原因是由於客戶端做的錯誤請求導致的。

<2>由於伺服器自身問題導致請求無法完成的會顯示伺服器端錯誤。

<3>若使用者不存在會顯示為伺服器端錯誤。

3.finger服務

ftp伺服器端檔案路徑是使用者家目錄;檢視使用者家目錄可以使用命令:fingerUERNAME

finger:顯示使用者資訊。

使用finger命令需要安裝finger服務yum-yinstallfinger

4.vsftpd的使用者型別:

匿名使用者:事實上是伺服器端自動對映的一個系統使用者;

本地使用者:/etc/passwd中的使用者

預設rootid號小於500的使用者都禁止訪問ftp

虛擬使用者:事實上是伺服器端自動對映的一個系統使用者;

多個虛擬使用者同時被對映為同一個系統使用者,但不同的虛擬使用者可以具有不同的訪問許可權。

四、配置VSFTPD工作特性

1.Vsftpd主要檔案:

服務指令碼:/etc/rc.d/init.d/vsftpd

主配置檔案:/etc/vsftpd/vsftpd.conf

執行程式:/usr/sbin/vsftpd

2.vsftpd主配置檔案解析

vsftpd 配置檔案採用“#”作為註釋符,以“#”開頭的行和空白行在解析時將被忽略,
其餘的行被視為配置命令列,每個配置命令的“=”兩邊不要留有空格。對於每個
配置命令,在配置檔案中還列出了相關的配置說明,利用vim編輯器可實現對配
置檔案的編輯修改。方法如下:
#vi /etc/vsftpd/vsftpd.conf
1.登入和對匿名使用者的設定
write_enable=YES //是否對登入使用者開啟寫許可權。屬全域性性設定。預設NO
local_enable=YES //是否允許本地使用者登入FTP 伺服器。預設為NO
anonymous_enable=YES //設定是否允許匿名使用者登入FTP伺服器。預設為YES
ftp_username=ftp //定義匿名使用者的賬戶名稱,預設值為ftp。
no_anon_password=YES //匿名使用者登入時是否詢問口令。設定為YES,則不詢問。預設NO
anon_world_readable_only=YES //匿名使用者是否允許下載可閱讀的文件,默
認為YES。
anon_upload_enable=YES //是否允許匿名使用者上傳檔案。只有在write_enable 設定為YES 時,該配置項才有效。而且匿名使用者對相應的目錄必須有寫許可權。預設為NO。
anon_mkdir_write_enable=YES //是否允許匿名使用者建立目錄。只有在write_enable 設定為 YES 時有效。且匿名使用者對上層目錄有寫入的許可權。
預設為NO。
anon_other_write_enable=NO //若設定為YES,則匿名使用者會被允許擁有多於
上傳和建立目錄的許可權,還會擁有刪除和更名許可權。預設值為NO。
2.設定歡迎資訊
使用者登入FTP 伺服器成功後,伺服器可向登入使用者輸出預設定的歡迎資訊。
ftpd_banner=Welcome to my FTP server.
//該配置項用於設定比較簡短的歡迎資訊。若歡迎資訊較多,則可使用
banner_file 配置項。
banner_file=/etc/vsftpd/banner
//設定使用者登入時,將要顯示輸出的檔案。該設定項將覆蓋ftpd_banner的設定。
dirmessage_enable=YES
//設定是否顯示目錄訊息。若設定為YES,則當用戶進入特定目錄(比如
/var/ftp/linux)時,將顯示該目錄中的由message_file 配置項指定的檔案
(.message)中的內容。
message_file=.message //設定目錄訊息檔案。可將顯示資訊存入該
檔案。該檔案需要放在 相應的目錄(比如/var/ftp/linux)下
3.設定使用者登入後所在的目錄
local_root=/var/ftp
// 設定本地使用者登入後所在的目錄。預設配置檔案中沒有設定該項,此時使用者登
錄FTP 伺服器後,所在的目錄為該使用者的主目錄,對於root 使用者,則為/root 目錄。
anon_root=/var/ftp
//設定匿名使用者登入後所在的目錄。若未指定,則預設為/var/ftp 目錄。
4.控制使用者是否允許切換到上級目錄
在預設配置下,使用者可以使用“cd..”命名切換到上級目錄。比如,若用
戶登入後所在的目錄為/var/ftp,則在“ftp>”命令列下,執行“cd..”命令後,使用者將切換到其上級目錄/var,若繼續執行該命令,則可進入Linux系統的根目錄,從而可以對整個Linux的檔案系統進行操作。若write_enable=YES,則使用者還可對根目錄下的檔案進行改寫操作,會給系統帶來極大的安全隱患,因此,必須防止使用者切換到Linux的根目錄,相關的配置項如下:
chroot_list_enable=YES
// 設定是否啟用chroot_list_file 配置項指定的使用者列表檔案。設定為YES 則除了列在j/etc/vsftpd/chroot_list 檔案中的的帳號外,所有登入的使用者都可以進入ftp 根目錄之外的目錄。預設NO
chroot_list_file=/etc/vsftpd/chroot_list
// 用於指定使用者列表檔案,該檔案用於控制哪些使用者可以切換到FTP 站點根目
錄的上級目錄。
chroot_local_user=YES
// 用於指定使用者列表檔案中的使用者,是否允許切換到上級目錄。預設NO
注意:要對本地使用者檢視效果,需先設定local_root=/var/ftp
具體情況有以下幾種:
1)當chroot_list_enable=YES,chroot_local_user=YES 時,在
/etc/vsftpd/chroot_list檔案中列出的使用者,可以切換到上級目錄;未在檔案中列出的使用者,不能切換到站點根目錄的上級目錄。
2)當chroot_list_enable=YES,chroot_local_user=NO 時,在
/etc/vsftpd/chroot_list檔案中列出的使用者,不能切換到站點根目錄的上級目錄;未在檔案中列出的使用者,可以切換到上級目錄。
3)當chroot_list_enable=NO,chroot_local_user=YES 時,所有使用者均不能切
換到上級目錄。
4)當chroot_list_enable=NO,chroot_local_user=NO 時,所有使用者均可以切
換到上級目錄。
5)當用戶不允許切換到上級目錄時,登入後FTP 站點的根目錄“/”是該FTP 賬
戶的主目錄,即檔案的系統的/var/ftp 目錄。
5.設定訪問控制
(1)設定允許或不允許訪問的主機(見TBP14)
tcp_wrappers=YES 用來設定vsftpd 伺服器是否與tcp wrapper相結合,進行主
機的訪問控制。預設設定為YES,vsftpd 伺服器會檢查/etc/hosts.allow和
/etc/hosts.deny中的設定,以決定請求連線的主機是否允許訪問該FTP 伺服器。這兩個檔案可以起到簡易的防火牆功能。
比如,若要僅允許192.168.168.1~192.168.168.254 的使用者,可以訪問連線
vsftpd 伺服器,則可在/etc/hosts.allow檔案中新增以下內容:
vsftpd:192.168.168.0/255.255.255.0 :allow
all:all:deny
(2)設定允許或不允許訪問的使用者
對使用者的訪問控制由/etc/vsftpd/user_list 和/etc/vsftpd/ftpusers 檔案來控制實現。相關配置命令如下:
userlist_enable=YES
// 決定/etc/vsftpd/user_list 檔案是否啟用生效。YES 則生效,NO 不生效。
userlist_deny=YES
// 決定/etc/vsftpd/user_list 檔案中的使用者是允許訪問還是不允許訪問。若設定為YES,則/etc/vsftpd/user_list 檔案中的使用者將不允許訪問FTP 伺服器;若設定為NO,則只有vsftpd.user_list 檔案中的使用者,才能訪問FTP 伺服器。
6.設定訪問速度
anon_max_rate=0
//設定匿名使用者所能使用的最大傳輸速度,單位為b/s。若設定為0,則不受速度
限制,此為預設值。
local_max_rate=0
// 設定本地使用者所能使用的最大傳輸速度。預設為0,不受限制。
7.定義使用者配置檔案
在vsftpd 伺服器中,不同使用者還可使用不同的配置,這要通過使用者配置檔案
來實現。
user_config_dir=/etc/vsftpd/userconf //用於設定使用者配置檔案所在的目錄。
設定了該配置項後,當用戶登入FTP 伺服器時,系統就會到
/etc/vsftpd/userconf 目錄下讀取與當前使用者名稱相同的檔案,並根據檔案中的配置命令,對當前使用者進行更進一步的配置。比如,利用使用者配置檔案,可實現對不同使用者進行訪問的速度進行控制,在各使用者配置檔案中,定義local_max_rate配置,以決定該使用者允許的訪問速度。
8.與連線相關的設定
listen=YES
//設定vsftpd 伺服器是否以standalone 模式執行。以standalone模式執行是一
種較好的方式,此時listen 必須設定為YES,此為預設值,建議不要更改。很多
與伺服器執行相關的配置命令,需要此執行模式才有效。若設定為NO,則vsftpd
不是以獨立的服務執行,要受xinetd 服務的管理控制,功能上會受限制。
max_clients=0
//設定vsftpd 允許的最大連線數,預設為0,表示不受限制。若設定為150 時,
則同時允許有150 個連線,超出的將拒絕建立連線。只有在以standalone 模式
執行時才有效。
max_per_ip=0
// 設定每個IP 地址允許與FTP 伺服器同時建立連線的數目。預設為0,不受限
制。通常可對此配置進行設定,防止同一個使用者建立太多的連線。只有在以
standalone 模式執行時才有效。
listen_address=IP 地址
//設定在指定的IP 地址上偵聽使用者的FTP 請求。若不設定,則對伺服器所繫結
的所有IP 地址進行偵聽。只有在以standalone 模式執行時才有效。對於只繫結
了一個IP 地址的伺服器,不需要配置該項,預設情況下,配置檔案中沒有該配
置項。若伺服器同時綁定了多個IP 地址,則應通過該配置項,指定在哪個IP 地
址上提供FTP 服務,即指定FTP 伺服器所使用的IP 地址。
注意:設定此值前後,可以通過netstat -tnl對比埠的監聽情況
accept_timeout=60
//設定建立被動(PASV)資料連線的超時時間,單位為秒,預設值為60。
connect_timeout=60
// PORT 方式下建立資料連線的超時時間,單位為秒。
data_connection_timeout=300
//設定建立FTP 資料連線的超時時間,預設為300 秒。
idle_session_timeout=600
//設定多長時間不對FTP 伺服器進行任何操作,則斷開該FTP 連線,單位為秒,
預設為600 秒。即設定發呆的逾時時間,在這個時間內,若沒有資料傳送或指
令的輸入,則會強行斷開連線。
pam_service_name=vsftpd
//設定在PAM所使用的名稱,預設值為vsftpd。
setproctitle_enable=NO|YES
//設定每個與FTP 伺服器的連線,是否以不同的程序表現出來,預設值為NO,
此時只有一個名為vsftpd 的程序。若設定為YES,則每個連線都會有一個vsftpd
程序,使用“ps -ef|grep ftp”命令可檢視到詳細的FTP 連線資訊。安全起見,建議關閉。
9.FTP 工作方式與埠設定
(1)FTP 工作方式簡介
FTP 的工作方式有兩種,一種是PORT FTP,另一種是PASV FTP。下
面介紹其工作方式。
二者的區別在於PORT FTP的資料傳輸埠是由FTP伺服器指定的,而PASV
FTP 則是由FTP 客戶端指定的,而且每次資料連線所使用的埠號都不同。正
因為如此,所以在CuteFTP等FTP客戶端軟體中,其連線型別設定項中有PORT
和PASV 兩種選擇。
當FTP 伺服器設定為PASV 工作模式時,客戶端也必須設定為PASV
連線型別。若客戶端連線型別設定為PORT,則能建立FTP 連線,但在執行ls
或get 等需要資料請求的命令時,將會出現無響應並最終報告無法建立資料連
接。
(2)與埠相關的配置
listen_port=21
// 設定FTP 伺服器建立連線所偵聽的埠,預設值為21。
連線非標準埠示例:ftp www.sunflower.org 7000
connect_from_port_20=YES
// 預設值為YES,指定FTP 資料傳輸連線使用20 埠。若設定為NO,則進行
資料連線時,所使用的埠由ftp_data_port指定。
ftp_data_port=20
//設定PORT 方式下FTP 資料連線所使用的埠,預設值為20。
pasv_enable=YES|NO
//若設定為YES,則使用PASV 工作模式;若設定為NO,使用PORT 模式。默
認為YES,即使用PASV 模式。
pasv_max_port=0
//設定在PASV 工作方式下,資料連線可以使用的埠範圍的上界。預設值為0,
表示任意埠。
pasv_mim_port=0
//設定在PASV 工作方式下,資料連線可以使用的埠範圍的下界。預設值為0,
表示任意埠。
10.設定傳輸模式
FTP 在傳輸資料時,可使用二進位制(Binary)方式,也可使用ASCII模式來上傳
或下載資料。
ascii_download_enable=YES //設定是否啟用ASCII 模式下載資料。預設為
NO。
ascii_upload_enable=YES //設定是否啟用ASCII 模式上傳資料。預設為
NO。
11.設定上傳文件的所屬關係和許可權
(1)設定匿名上傳文件的屬主
chown_uploads=YES
//用於設定是否改變匿名使用者上傳的文件的屬主。預設為NO。若設定為YES,
則匿名使用者上傳的文件的屬主將被設定為chown_username 配置項所設定的用
戶名。
chown_username=whoever
//設定匿名使用者上傳的文件的屬主名。只有chown_uploads=YES 時才有效。建
議不要設定為root 使用者。 但系統默root
(2)新增文件的許可權設定
local_umask=022
//設定本地使用者新增文件的umask,預設為022,對應的許可權為755。umask 為
022,對應的二進位制數為000 010 010,將其取反為111 101 101,轉換成十進
制數,即為許可權值755,代表文件的所有者(屬主)有讀寫執行權,所屬組有讀
和執行權,其他使用者有讀和執行權。022 適合於大多數情況,一般不需要更改。
若設定為077,則對應的許可權為700。
anon_umask=022 //設定匿名使用者新增文件的umask。預設077
file_open_mode=0755 //設定上傳文件的許可權。許可權採用數字格式。
預設0666
12.日誌檔案
xferlog_enable=YES //是否啟用上傳/下載日誌記錄。預設為NO
xferlog_file=var/log/vsftpd.log //設定日誌檔名及路徑。需啟用
xferlog_enable 選項
xferlog_std_format=YES //日誌檔案是否使用標準的xferlog日誌文
件格式(與wu-ftpd 使用的格式相同) 。預設為NO
13.其他設定
text_userdb_names=NO
//設定在執行ls 命令時,是顯示UID、GID還是顯示出具體的使用者名稱或組名稱。
預設為NO,以UID和GID方式顯示,若希望顯示使用者名稱和組名稱,則設定為
YES。
ls_recurse_enable=YES
//若設定為YES,則允許執行“ls –R”這個命令,預設值為NO。在配置檔案中該
配置項被註釋掉了,與此類似的還有一些配置,需要啟用時,將註釋符去掉並進
行YES 或NO 的設定即可。

3.vsftpd的工作特性

(1)chroot:禁錮使用者於其家目錄中,實現方式有兩種:

<1>禁錮所有使用者:(本地使用者被鎖在家目錄下)

chroot_local_user=YES

<2>禁錮指定使用者,黑名單

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

154201656.png

yxm使用者被鎖定

154253375.png

jerry使用者未被鎖定

154343535.png

<3>不禁錮指定使用者,白名單

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

注:以上配置全部開啟

chroo_list中指定的使用者家目錄未被鎖定

未指定的使用者家目錄被鎖定

user_listftp使用者白名單和黑名單:/etc/vsftpd/user_list

<1>白名單:

userlist_enable=YES//是否啟用此檔案

userlist_deny=NO//檔案中的使用者是否可以登入

<2>黑名單:

userlist_enable=YES

userlist_deny=YES

(2)傳輸速率限定,預設單位為位元組:

anon_max_rate=#//匿名使用者最大傳輸速率

local_max_rate=#//本地使用者最大傳輸速率

user_config_dir=/etc/vsftpd/userconfs///限定指定使用者的最大傳輸速率

在指定的目錄下建立和使用者名稱同名的檔案使用local_max_rate=#l來限定

(3)連線數限定:

max_clients=100//限定最大的連線數

max_per_ip=5//每個IP最多同時建立連線數

(4)ftps:配置ssl功能

在主配置檔案中新增以下配置選項

ssl_enable=YES//開啟ssl功能

ssl_tlsv1=YES//協議版本

ssl_sslv2=YES

ssl_sslv3=YES

allow_anon_ssl=NO//匿名使用者是否使用ssl

force_local_data_ssl=YES//本地下載資料使用ssl

force_local_logins_ssl=YES//本地使用者登入

rsa_cert_file=/etc/vsftpd/ftpssl/vsftpd.crt//證書存放位置

rsa_private_key_file=/etc/vsftpd/ftpssl/vsftpd.key//私鑰存放位置

生成一個私鑰

155233363.png

證書請求

155318826.png

簽署一個證書

155410551.png

客戶連線驗證

155446871.png

轉載於:https://blog.51cto.com/dreamwolf/1282348