FTP文件傳輸服務器(詳解)

FTP文件傳輸服務器

一實驗目標

 安裝配置VSFTP

 實戰匿名訪問VSFTP

 實戰用戶名密碼方式訪問VSFTP

 實戰ftp虛擬帳號方式訪問VSFTP

 

二實驗環境

FTP服務端xuegod63.cn   IP192.168.1.63

FTP客戶端xuegod64.cn   IP192.168.1.64

 

FTP服務概述

    FTP服務器File Transfer Protocol Server是在互聯網上提供文件存儲和訪問服務的計算機它們依照FTP協議提供服務。VSFTP是一個基於GPL發佈的類Unix系統上使用的FTP服務器軟件它的全稱是Very Secure FTP 從此名稱可以看出來編制者的初衷是代碼的安全。

作用是在 Internet 上用來傳送文件的協議。

特點安全、高速、穩定的FTP服務器

模式 C/S 模式

端口20 (傳數據)   21 (傳指令)

 

常見FTP服務器

windowsServ-U FTP Server

LinuxProFTPD:Professional FTP daemon一個Unix平臺上或是類Unix平臺上如Linux, FreeBSD等的FTP服務器程序。  

 

FTP服務連接模式

以命令和數據流形式的主動連接---客戶端無防火牆

wKioL1g2v5OiXTLKAAD1fpfB6QI819.png 

解析服務端主動鏈接客戶端----最後一道線

1命令形式

   服務端開啓21號端口主動與客戶端的某個端口進行連接客戶端進行迴應命令通道建立完成。

2數據流形式

   客戶端通過命令通道告訴服務端「服務端對自己的連接方式以及自己所開放可以被其連接的端口號大於1024」服務端在收到客戶端發來的數據信息之後會自動的開啓20端口數據流端口從數據流端口出發主動向客戶端所開放的端口進行連接。

 

以命令和數據流形式的主動連接---客戶端有防火牆

 

wKiom1g2v6SgXy2AAAGHpsbnshs640.png 

解析

1命令形式

   由於客戶端有防火牆因此服務端是主動連接不上客戶端的所以客戶端會主動連接服務端防火牆收到客戶端發來的數據之後轉發給服務端服務端在收到防火牆發來的信息之後會主動的用21端口與客戶端進行建立連接。

2數據流形式

   客戶端通過命令通道告訴服務端「服務端對自己的連接方式以及自己所開放可以被其連接的端口號大於1024」防火牆收到信息之後將其轉發給服務端服務端在收到防火牆發來的數據信息之後會自動的開啓22端口數據流端口從數據流端口出發主動向客戶端所開放的等待端口進行連接。

 

以命令和數據流形式的被動連接---客戶端無防火牆

wKioL1g2v7HibjA_AAEeGkqvmpo749.png 

解析客戶端主動鏈接服務端

1命令形式

服務端等待客戶端主動請求連接。

2數據流形式

客戶端通過命令通道告訴服務端「服務端對自己的連接方式「被動連接」服務端在收到客戶端發來的數據信息之後會自動的開啓某一個固定端口或者某個端口的範圍等待客戶端來主動連接 客戶端收到之後主動連接服務端開放的端口範圍。

 

 

以命令和數據流形式的被動連接---客戶端有防火牆

 

 

wKiom1g2v77h5fWmAAGUx-MS4qo543.png 

解析

1命令形式

   服務端等待客戶端主動請求連接。

2數據流形式

   客戶端通過命令通道告訴服務端「服務端對自己的連接方式「被動連接」防火牆收到信息之後將其轉發給服務端服務端在收到防火牆發來的數據信息之後會自動的開啓某一個固定端口或者某個端口的範圍等待客戶端來主動連接 客戶端收到之後主動連接服務端開放的端口範圍。

 

四實驗代碼

1FTP服務安裝啓動與測試:

1安裝vsftp服務器端

[[email protected] ~]# rpm -ivh /mnt/Packages/vsftpd-2.2.2-6.el6_0.1.x86_64.rpm

安裝客戶端

[[email protected]4 ~]# rpm -ivh /mnt/Packages/lftp-4.0.9-1.el6.x86_64.rpm

注從RHEL6開始系統鏡像中默認沒有ftp客戶端命令。取而代之的是lftp命令

Linux客戶端

   lftp 是一個功能強大的下載工具它支持訪問文件的協議: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在編譯的時候包含openssl庫)。lftp的界面一個非常shell: 有命令補全歷史記錄允許多個後臺任務執行等功能使用起來非常方便。它還有書籤、排隊、鏡像、斷點續傳、多進程下載等功能。

 

 

2服務器配置文件位置

Vsftpd.conf常見配置項及含義說明

作用範圍

配置項及示例

含義說明

 

 

 

匿名用戶

anonymous_enable=YES

是否允許匿名用戶訪問

anon_upload_enable=YES

是否允許匿名用戶的上傳功能

anon_mkdir_write_enable=YES

是否允許匿名用戶有創建文件的寫入權限

anon_other_write_enable=YES

是否允許匿名用戶有其他權限如刪除更名覆蓋

anon _umask=022

設置匿名用戶上傳文件默認權限的掩碼值

anon _root=/var/ftp/

設置匿名用戶的FTP根目錄默認的根目錄就是/var/ftp/

anon _max_rate=YES

設置匿名用戶上傳文件的最大速率0表示無限制單位爲字節/秒

 

 

本地用戶

local_enable=YES

是否本地用戶訪問

local _umask=022

設置本地用戶上傳文件默認權限的掩碼值

local _root=/var/ftp/

設置本地用戶的FTP根目錄默認的根目錄就是/var/ftp/

chroot_local_user=YES

是否將FTP本地用戶禁錮在宿主目錄中

local _max_rate=YES

設置本地用戶上傳文件的最大速率0表示無限制單位爲字節/秒

 

 

 

 

 

 

 

 

 

全局配置

 

 

 

listen=YES

是否以獨立運行的方式監聽服務

listen_address=0.0.0.0

設置監聽FTP服務的IP地址

listen_ports=21

設置監聽FTP服務的端口號

write_enable=YES

啓用任何形式的寫入權限

download_enable=YES

是否允許下載文件

connect_from_port_20=YES

允許服務器主動模式從20端口建立數據連接

pasv_enable=YES

允許被動模式連接

pasv_max_port=24600

設置用於被動模式的服務器最大端口號

pasv_min_port=24500

設置用於被動模式的服務器最小端口號

Pam_service_name=vsftpd

設置用於用戶認證的PAM文件位置/etc/pam.d/目錄中對應的文件名

userlist_enable=YES

是否啓用user_list用戶列表文件

userlist_deny=YES

是否啓用user_list用戶列表文件中的用戶賬號

max_clients=0

設置最多允許多少個客戶端同時連接0爲無限制

max_per_ip=0

對來自同一個IP地址的客戶端最多允許多少個併發連接0爲無限制

tcp_wrappers=YES

是否啓用tcp_wrappers主機訪問控制

 

[[email protected] vsftpd]vim  /etc/vsftpd/user_list

wKioL1g2v8zjVYswAABDfKWw8g4335.png 

# 如果userlist_deny= YES默認絕不允許在這個文件中的用戶登錄ftp甚至不提示輸入密碼

 

3啓動服務

[[email protected] ~]# service vsftpd restart

[[email protected] ~]#chkconfig vsftpd on

[[email protected] ~]# netstat -antup | grep ftp

tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      11725/vsftpd

   

4此服務的使用方法

windows

通過瀏覽器訪問或 打開文件夾在地址欄輸入地址ftp://192.168.1.63/

wKiom1g2v9rQaTbJAAA7hfKkB30554.png 

 

linux下

[[email protected]~]# lftp 192.168.1.63

lftp 192.168.1.63:~> ls

drwxr-xr-x    2 0        0            4096 Mar 04  2011 pub

lftp 192.168.1.63:/> cd pub/

lftp 192.168.1.63:/pub> ls

lftp 192.168.1.63:/pub> exit         

 

2修改配置文件實戰舉例

1

要求公司技術部準備搭建一臺功能簡單的FTP 服務器允許匿名員工上傳和下載文件並允許創建自己的目錄。

 

1修改配置文件

[[email protected] vsftpd]# pwd

/etc/vsftpd

[[email protected] vsftpd]# cp vsftpd.conf vsftpd.conf.back

[[email protected] vsftpd]# vim vsftpd.conf #修改以下內容

anonymous_enable=YES  #允許匿名用戶訪問

anon_upload_enable=YES #允許匿名用戶上傳文件並可以創建目錄

anon_mkdir_write_enable=YES  #允許匿名用戶創建並修改文件夾或目錄

anon_other_write_enable=YES  #允許匿名用戶對文件進行刪除和修改權限

2啓動服務

[[email protected] vsftpd]# service vsftpd reload

 

3修改用戶根目錄的屬主

[[email protected] vsftpd]# ll -d /var/ftp/pub/

drwxr-xr-x 2 root root 4096 Feb 12  2013 /var/ftp/pub/

[[email protected] vsftpd]# chown ftp /var/ftp/pub/

[[email protected] vsftpd]# !l

ll -d /var/ftp/pub/

drwxr-xr-x 2 ftp root 4096 Feb 12  2013 /var/ftp/pub/

注意默認匿名用戶家目錄/var/ftp的權限是755這個權限是不能改變的。切記

 

4測試-可以創建文件夾刪除更改和上傳文件夾

wKioL1g2v-fgWmAqAAA1qjE4N_M054.png 

[[email protected]xuegod64~]# lftp 192.168.1.63

lftp 192.168.1.63:~> ls

drwxr-xr-x    3 14       0            4096 Sep 20 04:33 pub

lftp 192.168.1.63:/> cd pub/

lftp 192.168.1.63:/pub> mkdir test

mkdir 成功, 建立 `test'

lftp 192.168.1.63:/pub> ls

drwx------    2 14       50           4096 Sep 20 04:34 test

drwx------    2 14       50           4096 Sep 20 04:33 新文件夾

lftp 192.168.1.63:/pub> rm -rf test  

rm 成功, 刪除 `test'

lftp 192.168.1.63:/pub> ls

drwx------    2 14       50           4096 Sep 20 04:33 新文件夾

 

2

要求公司內部現在有一臺FTP WEB 服務器FTP 的功能主要用於維護公司的網站內容包括上傳文

件、創建目錄、更新網頁等等。公司現有兩個部門負責維護任務他們分別使用team1 team2

帳號進行管理。先要求僅允許team1 team2 帳號登錄FTP 服務器但不能登錄本地系統並將

這兩個帳號的根目錄限制爲/var/www/html不能進入該目錄以外的任何目錄。

 

分析

ftp 和www web服務器相結合。

www web服務器根目錄  /var/www/html

只允許team1和team2兩用戶 可以上傳。 vsftp禁止匿名。

其次使用chroot 功能將team1 team2 鎖定在/var/www/html 目錄下

 

1建立維護網站內容的本地帳號team1 team2 並禁止本地登錄然後設置其密碼

[[email protected] ~]# useradd -s /sbin/nologin team1

[[email protected] ~]# useradd -s /sbin/nologin team2

[[email protected] ~]# echo "123456" | passwd --stdin team1

 [[email protected] ~]# echo "123456" | passwd --stdin team2

 

2配置vsftpd.conf 主配置文件並作相應修改

[[email protected] vsftpd]# cp vsftpd.conf vsftpd.conf.back

[[email protected] vsftpd]# vim vsftpd.conf

anonymous_enable=NO禁止匿名用戶登錄

local_enable=YES允許本地用戶登錄

local_root=/var/www/html設置本地用戶的根目錄爲/var/www/html

chroot_list_enable=YESchroot 功能

chroot_list_file=/etc/vsftpd/chroot_list設置鎖定用戶在根目錄中的列表文件。此文件存放要鎖定的用戶名

 

3建立/etc/vsftpd/chroot_list 文件添加team1 team2 帳號

[[email protected] vsftpd]# touch /etc/vsftpd/chroot_list

 [[email protected] ~]# vim /etc/vsftpd/chroot_list  #寫入以下內容一行一個用戶名

team1

team2

 

4重啓vsftpd 服務使配置生效,並複製內容到之地文件夾中

[[email protected] ~]#service vsftpd restart

[[email protected]xuegod63 ~]# cp /etc/passwd /var/www/html/

[[email protected] ~]# cp install.log /var/www/html/

 

5修改本地權限

[[email protected] ~]# ll -d /var/www/html/

drwxr-xr-x. 2 root root 4096 Oct  6  2011 /var/www/html/

[[email protected] ~]# chmod -R o+w /var/www/html/

[[email protected] ~]# ll -d /var/www/html/

drwxr-xrwx. 2 root root 4096 Oct  6  2011 /var/www/html/

 

6測試

測試

ftp://192.168.1.63/

物理機測試

 

wKioL1g2v_2BP8q2AADBhjOrG_k368.png

wKiom1g2v_2g-Cs9AABdKuDRfJI458.png

 

#登錄並新建文件夾並且在linux 系統中進行刪除

 

客戶端測試

[[email protected] ~]# lftp [email protected]68.1.63

口令123456

lftp [email protected]:~> ls          

-rw-r--rw-    1 0        0           56422 Sep 20 04:45 install.log

-rw-r--rw-    1 0        0            1800 Sep 20 04:44 passwd

drwxr-xr-x    2 500      500          4096 Sep 20 04:56 新文件夾

lftp [email protected]:/> rm -rf passwd

]rm 成功, 刪除 `passwd'

lftp [email protected]:/> ls

-rw-r--rw-    1 0        0           56422 Sep 20 04:45 install.log

drwxr-xr-x    2 500      500          4096 Sep 20 04:56 新文件夾

lftp [email protected]:/>

lftp [email protected]:/> cd /var/www/

cd: Access failed: 550 Failed to change directory. (/var/www) #被鎖住了

lftp [email protected]:/> cd /etc

cd: Access failed: 550 Failed to change directory. (/etc)

 

 

3

要求ftp虛擬帳號

   公司爲了宣傳最新的產品信息計劃搭建FTP 服務器爲客戶提供相關文檔因此對所有互聯網開放共享目錄允許客戶下載產品信息但是禁止上傳文件。與公司合作的相關單位能夠使用FTP服務器進行上傳和下載但不可以刪除數據。

 

分析

   需要保證服務器的穩定性並做優化需考慮到服務器的安全性所以關閉實體用戶登錄使用虛擬帳號驗證機制並對不同虛擬帳號設置不同的權限保證服務器的性能還需要根據用戶的等級限制客戶端的連接數及下載速度。

 

1、創建用戶數據庫

1創建用戶文本文件

   先建立用戶文本文件vsftpd_virtualuser.txt添加兩個虛擬帳號公共客戶帳號ftp 及合作客戶帳號vip

[[email protected] vsftpd]vim /etc/vsftpd/vsftpd_virtualuser.txt  #寫入以下內容。

ftp  

123456  

vip 

123456 

#此文件格式要示奇數行用戶名、偶數行密碼

 

2生成數據庫

   保存虛擬帳號和密碼的文本文件無法被系統帳號直接調用。我們需要使用db_load 命令生成db

數據庫文件

安裝

[[email protected] vsftpd]# rpm -qf `which db_load `

db4-utils-4.7.25-16.el6.x86_64

[[email protected] ~]# rpm -ivh /mnt/Packages/db4-utils-4.7.25-18.el6_4.x86_64.rpm

[[email protected] ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt  /etc/vsftpd/vsftpd_virtualuser.db

選項

-T允許應用程序能夠文本文件轉譯載入進數據庫

-t hash使用類型爲hash算法進行碼加密

-f 指定包含用戶名和密碼文本文件

 [[email protected] vsftpd]# rm -rf /etc/vsftpd/vsftpd_virtualuser.txt   #爲了安全刪除此文件。後期不再使用此文件。

 

3修改數據庫文件訪問權限

[[email protected] vsftpd]# chmod 600 /etc/vsftpd/vsftpd_virtualuser.db

[[email protected] vsftpd]# ll !$

ll /etc/vsftpd/vsftpd_virtualuser.db

-rw------- 1 root root 12288 Nov 10 21:16 /etc/vsftpd/vsftpd_virtualuser.db

 

2、配置PAM 文件

   爲了使服務器能夠使用數據庫文件對客戶端進行身份驗證需要調用系統的PAM 模塊.

PAM概述

   PAM(Plugable Authentication Module)爲可插拔認證模塊不必重新安裝應用系統通過修

改指定的配置文件調整對該程序的認證方式。PAM 模塊配置文件路徑爲/etc/pam.d/目錄此

目錄下保存着大量與認證有關的配置文件並以服務名稱命名。

 

[[email protected] ~]# vim  /etc/pam.d/vsftpd #修改vsftpd 對應的PAM 配置文件/etc/pam.d/vsftpd將默認配置使用#全部註釋添加兩行應字段。

auth required/lib64/security/pam_userdb.so  db=/etc/vsftpd/vsftpd_virtualuser

accountrequired/lib64/security/pam_userdb.so  db=/etc/vsftpd/vsftpd_virtualuser

註釋/lib64 表示64位系統

 

3、創建虛擬帳號對應的系統用戶及ftp共享的目錄

   於公共客戶帳號和合作客戶帳號因爲需要配置不同的權限所以可以將兩個帳號的目錄進行隔離並且控制用戶的文件訪問。公共客戶帳號ftp 對應系統帳號ftpuser並指定其主目錄爲/var/ftp/public

而客戶帳號vip 對應系統帳號ftpvip指定主目錄爲/var/ftp/vip

[[email protected] vsftpd]# useradd -d /var/ftp/public ftpuser

[[email protected] vsftpd]# useradd -d /var/ftp/vip ftpvip

[[email protected] vsftpd]# chmod -R 500 /var/ftp/public/  #修改權限

[[email protected] vsftpd]# chmod -R 700 /var/ftp/vip/

 

chmod -R 500 /var/ftp/public公共帳號ftp 只允許下載修改share 目錄其他用戶權限爲

rx 可讀可執行。

chmod -R 700 /var/ftp/vip/ 客戶帳號vip 允許上傳和下載所以對vip 目錄權限設置爲rwx

可讀可寫可執行。

 

4、建立配置文件

一個配置文件無法實現此功能需要爲每個虛擬帳號建立獨立的配置文件並根據需要進行相應的設置。

 

1修改vsftpd.conf 主配置文件

[[email protected] vsftpd]# cp vsftpd.conf.back vsftpd.conf

禁用匿名用戶登錄並啓用本地用戶登錄設置

[[email protected] vsftpd]# vim vsftpd.conf

anonymous_enable=NO

local_enable=YES   #確認此選項打開允許本地用戶登錄。

chroot_local_user=YES   #確認此選項打開。將所有本地用戶限制在家目錄中NO 則不限制

pam_service_name=vsftpd  #確認在文件的最後有選項。配置vsftpd 使用的PAM 模塊爲vsftpd

user_config_dir=/etc/vsftpd/vuserconfig設置虛擬帳號的主目錄爲 vuserconfig

max_clients=300設置FTP 服務器最大接入客戶端數爲300 

max_per_ip=10設置每個IP 地址最大連接數爲10 

 

2建立虛擬帳號配置文件

   user_config_dir 指定路徑下建立與虛擬帳號同名的配置文件並添加相應的配置字段

首先建立公共帳號ftp 的配置文件

[[email protected] ~]# grep vuserconfig /etc/vsftpd/vsftpd.conf   #查看要創建的目錄名

user_config_dir=/etc/vsftpd/vuserconfig

[[email protected] ~]# mkdir /etc/vsftpd/vuserconfig

[[email protected] ~]# touch /etc/vsftpd/vuserconfig/ftp

[[email protected] ~]# touch /etc/vsftpd/vuserconfig/vip

 

配置虛擬帳號配置文件寫入以下內容

[[email protected] ~]# vim /etc/vsftpd/vuserconfig/ftp

guest_enable=yes開啓虛擬帳號登錄

guest_username=ftpuser設置ftp 對應的系統帳號爲ftpuser

anon_world_readable_only=no不許匿名用戶瀏覽整個服務器的文件系統

anon_max_rate=50000限定傳輸速率爲50KB/s

#對於虛擬用戶默認就是可以下載的默認是不能上傳的

 

注意

vsftpd 對於文件傳輸速度限制並不是絕對鎖定在一個數值上哈而是在80%~120%之間變化

比如設置100KB/s 則實際是速度在80KB/s~120KB/s 之間變化

 

下面是合作伙伴帳號的配置文件vip

[[email protected] ~]# vim /etc/vsftpd/vuserconfig/vip  #寫入以下內容

guest_enable=yes開啓虛擬帳號登錄

guest_username=ftpvip設置ftp 對應的系統帳號爲ftpvip

anon_world_readable_only=no不允許匿名用戶瀏覽整個服務器的文件系統

write_enable=yes允許在文件系統寫入權限

anon_mkdir_write_enable=yes允許創建文件夾

anon_upload_enable=yes開啓匿名帳號的上傳功能

anon_max_rate=100000限定傳輸速度爲100KB/s

anon_other_write_enable=YES    # 允許刪除重命名等

 

5、重啓vsftpd 使配置生效

[[email protected] ~]# service vsftpd restart

 

6、測試

1公共帳號ftp 測試--在公共帳號測試前我們先建立個測試文件

[[email protected] vsftpd]# cp /mnt/Packages/mysql-server-5.1.71-1.el6.x86_64.rpm /var/ftp/public/productinfo.xls #共享的文件要大一些方便後期測試下載速度。

[[email protected] vsftpd]# cp -r /boot/grub/ /var/ftp/public/   #複製一個目錄

 

 

ftp客戶端命令

lftp  ftpIP   -u  username,passwd

lftp  ftpIP   -u  username

 

使用公共帳號ftp登錄ftp 服務器

 

 [[email protected] ~]# lftp 192.168.1.63 -u ftp,123456

lftp [email protected]:~> ls

drwxr-xr-x    2 0        0            4096 Nov 28 08:40 grub

-r--r--r--    1 0        0         9029932 Nov 28 08:40 productinfo.xlslftp [email protected]:/> get produtinfo.xls  #下載單個文件  。並測試限速50KB/s

wKioL1g2wBSgTWLOAADqVBhrooI318.png 

 

ftp客戶端命令

lftp  ftpIP   -u  username,passwd

lftp  ftpIP   -u  username

 

使用公共帳號ftp登錄ftp 服務器

 

 [[email protected] ~]# lftp 192.168.1.63 -u ftp,123456

lftp [email protected]:~> ls

drwxr-xr-x    2 0        0            4096 Nov 28 08:40 grub

-r--r--r--    1 0        0         9029932 Nov 28 08:40 productinfo.xlslftp [email protected]:/> get produtinfo.xls  #下載單個文件  。並測試限速50KB/s

wKioL1g2wBSgTWLOAADqVBhrooI318.png 

 

lftp [email protected]:/> mget *.txt  

lftp [email protected]:/> mirror grub/  #下載一個文件夾

lftp [email protected]:/> !ls grub #這個是查看vip客戶下載的文件在自己的物理機上出現的內容

device.map     iso9660_stage1_5  reiserfs_stage1_5  ufs2_stage1_5

e2fs_stage1_5  jfs_stage1_5 splash.xpm.gz    vstafs_stage1_5

fat_stage1_5   menu.lst stage1    xfs_stage1_5

ffs_stage1_5   minix_stage1_5 stage2

相關文章
相關標籤/搜索