Linux中ftp服務器搭建

1、FTP工做原理

(1)FTP使用端口linux

[root@localhost ~]# cat /etc/services | grep ftp
ftp-data 20/tcp   #數據鏈路:端口20
ftp 21/tcp        #控制鏈路:端口21

(2)FTP鏈接方式
     支持兩種鏈接模式:主動模式(Port)和被動模式(Pasv),這兩種模式都是針對數據鏈路進行的,與控制鏈路無關。瀏覽器

  • 主動模式工做過程:

1.客戶端從本身的一個任意端口(N > 1024)和FTP服務器的21端口創建控制鏈路
2.而後客戶端發出Port指令告訴服務器鏈接本身的N+1端口來創建一條數據通道
3.當FTP服務器接到這一指令時,會使用20端口鏈接用戶在Port指令中指定的端口號N+1來發送數據bash

  • 被動模式工做過程:

1.客戶端從本身的一個任意端口(N > 1024)和FTP服務器的21端口創建控制鏈路
2.而後客戶端發送Pasv指令,告訴服務器本身要鏈接服務器的某一個端口
3.若是服務器上的這個端口是空閒可用的,那麼服務器會返回確認信息,以後數據傳輸通道被創建;但若是服務器上的這個端口被另外一個資源所使用,那麼服務器返回不確認的信息,那麼這是客戶端會再次發送Pasv命令。服務器

注意:app

  • 在FTP客戶鏈接服務器的整個過程當中,控制信道是一直保持鏈接的,而數據傳輸通道是臨時創建的;
  • 主動模式創建數據傳輸通道是由服務器端發起的,服務器使用20端口鏈接客戶端某一個大於1024的端口;
  • 被動模式中創建數據傳輸通道是由客戶端發起的,它使用一個大於1024的端口鏈接服務器的1024端口以上的某一個端口。

2、ftp服務器搭建

需求:在Linux中搭建一個ftp服務器在存儲文件,建立一個ftp用戶:test,主目錄是:/home/test,設置該用戶不容許登陸服務器,並須要限制該用戶不能離開本身的主目錄。ssh

【實現步驟】tcp

1.查看系統有沒有安裝vsftpd
# rpm -qa | grep vsftpd
vsftpd-3.0.2-21.el7.x86_64
:vsftp(Very Secure FTP)是Linux系統下使用最多的FTP服務端。工具

2.查看vsftpd服務是否開機自啓
# chkconfig --list vsftpd
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off測試

3.創建一個新用戶帳戶test,-d 參數指定用戶登入時的主目錄,參數-m 表示若是主目錄不存在則自動建立
# useradd -d /home/test -m testspa

爲用戶設置密碼,輸入命令:
# passwd 密碼

4.vsftpd的配置
安裝完成後,執行命令【rpm -ql vsftpd】能夠查看與vsftpd相關的配置文件和文檔,其中在/etc/vsftpd目錄下有三個主要配置文件:

  • vsftpd.conf 主配置文件
  • ftpusers 指定哪些用戶不能訪問FTP服務器
  • user_list 指定的用戶是否能夠訪問ftp服務器

查看vsftpd.conf配置文件
內容以下:

 1 [root@localhost ~]# cat /etc/vsftpd/vsftpd.conf | grep -v '^#'
 2 #----匿名用戶設置----
 3 anonymous_enable=NO #禁止匿名用戶登陸
 4 
 5 #----本地用戶設置----
 6 local_enable=YES #容許本地用戶登陸ftp服務器
 7 write_enable=YES #容許用戶想服務器執行寫入操做
 8 local_umask=022 #設置服務器上本地用戶建立文件的權限掩碼
 9 
10 #----歡迎語設置----
11 dirmessage_enable=YES #啓用目錄提示消息
12 
13 #----日誌文件設置----
14 xferlog_enable=YES #啓用日誌文件功能,記錄於/var/log/xferlog
15 xferlog_std_format=YES #啓用標準的日誌格式
16 
17 #----FTP工做方式與端口設置----
18 connect_from_port_20=YES #主動模式下,是否啓用默認的20端口進行數據傳輸
19 
20 #----與鏈接相關的設置----
21 listen=NO            #vsftpd不是以獨立的服務運行,要受到xinetd服務的管控,功能上會受到限制
22 listen_ipv6=YES
23 
24 #----控制用戶是否容許切換到上級目錄----
25 chroot_list_enable=YES         #開啓限制用戶在主目錄的功能
26 chroot_list_file=/etc/vsftpd/chroot_list #在chroot_list文件中加入你要限制的用戶名,一行一個用戶
27 
28 #----虛擬用戶設置----
29 pam_service_name=vsftpd      #虛擬用戶使用PAM認證方式
30 
31 #----控制用戶訪問(經過vsftpd.user_list和ftpusers文件來實現)----
32 userlist_enable=YES #是否啓用userlist_file文件
33 userlist_file=/etc/vsftpd/user_list #容許user_list文件中加入的用戶訪問ftp服務器
34 
35 #----控制主機訪問----
36 tcp_wrappers=YES #vsftpd服務器檢查/etc/hosts.allow和/etc/hosts.deny中的設置,來決定請求鏈接的主機,是否容許訪問該FTP服務器
37 
38 #----其它設置----
39 allow_writeable_chroot=YES #去除用戶主目錄的寫權限

在上述vsftpd.conf的相關選項的配置下,對ftpuser文件和user_list文件的配置以下:

  • ftpusers文件:不添加test用戶,表示該用戶不能訪問ftp服務器
  • user_list文件:在/etc/vsftpd.conf主配置文件中設置了userlist_deny=YES(默認狀況),則不添加test用戶,表示該用戶不能訪問ftp服務器

5.開啓vsftpd服務
#service vsftpd start

6.訪問ftp服務器方法

  • 瀏覽器:ftp://ip地址
  • ftp客戶端軟件,好比FileZilla,輸入ftp服務器IP,用戶名,密碼,端口:21
  • 命令行終端:ftp 用戶名@ftp服務器IP,或 ftp 127.0.0.1

注意:關閉ftp服務器上的防火牆及Selinux(防止端口限制)

 

-------------------------------

補充知識點

  • FTP日誌功能配置

xferlog_enable=YES //開啓日誌功能
xferlog_file=/var/log/xferlog //日誌文件的存放位置
xferlog_std_format=YES //使用標準格式記錄日誌

xferlog該日誌文件記錄了FTP會話,能夠顯示出用戶向從FTP服務器拷貝了什麼文件。其中一條記錄以下:

Thu Feb 16 10:09:05 2017 1 10.10.10.9 990 ./home/ftpie.txt b _ o r test ftp 0 * c

含義:在某個時間test用戶向主機10.10.10.9上傳了哪些文件

數據參數說明

記錄數據 參數名稱 參數說明
Thu Feb 16 10:09:05 當前時間 當前服務器本地時間
1 傳輸時間 傳送文件所用時間,單位爲秒
10.10.10.9 遠程主機名稱/IP 遠程主機名稱/IP
990 文件大小 傳送文件的大小,單位爲byte
./home/ftpie.txt 文件名 傳輸文件名,包括路徑
b 傳輸類型

傳輸方式的類型,包括兩種:
a以ASCII傳輸 b以二進制文件傳輸

特殊處理標誌

特殊處理的標誌位,可能的值包括:
_ 不作任何特殊處理
C 文件是壓縮格式
U 文件是非壓縮格式
T 文件是tar格式

o 傳輸方向

文件傳輸方向,包括兩種:
o 從FTP服務器向客戶端傳輸
i 從客戶端向FTP服務器傳輸

r 訪問模式

用戶訪問模式,包括:
a 匿名用戶
g 來賓用戶
r 真實用戶,即系統中的用戶

test 用戶名 用戶名稱
ftp 服務名 所使用的服務名稱,通常爲FTP
0 認證方式

認證方式,包括:
0 無
1 RFC931認證

* 認證用戶id 認證用戶的id,若是使用*,則表示沒法得到該id
c 完成狀態

傳輸的狀態:
c 表示傳輸已完成
i 表示傳輸示完成

 

  • 匿名用戶ftp     

      服務器安裝完成vsftpd後是容許匿名用戶訪問的,匿名訪問的用戶名是ftp,密碼爲空。這個用戶能夠在/etc/passwd文件中找到

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

數據參數說明:
在ftp用戶這行中,一共有七個字段,每一個字段之間用冒號分割;

  • ftp 用戶名
  • x 密碼字段,是隱藏的
  • 14 用戶的UID字段,是惟一的
  • 50 用戶組的GID,是惟一的
  • FTP User 是用戶說明字段
  • /var/ftp 是ftp用戶的家目錄
  • /sbin/nologin 表示不能登陸系統;若是把/sbin/nologin改成/bin/bash,這樣ftp用戶能夠經過本地或遠程工具ssh或telnet以真實用戶身份登陸到系統。

 默認狀況下,匿名用戶登陸所訪問的文件夾通常是/var/ftp,固然也能夠由用戶自行添加或刪除。並且,匿名用戶的權限只能是下載,而不能上傳或是其它寫操做。

 

  • 配置vsftpd服務器在非標準端口(非21端口)工做

在/etc/vsftpd.conf中,將list_port=10034或者其它端口號選項加入該文件中便可,而後從新啓動vsftp守護進程。

# ftp 127.0.0.1 10034

注:此時測試之前使用的21端口,該端口已經再也不有用;若是要使用ftp默認的21端口工做,須要刪除或者使用#屏蔽掉前面加入的選項便可。
相關文章
相關標籤/搜索