天天看點

FTP檔案傳輸伺服器(詳解)

FTP檔案傳輸伺服器

一實驗目标

 安裝配置VSFTP

 實戰匿名通路VSFTP

 實戰使用者名密碼方式通路VSFTP

 實戰ftp虛拟帳号方式通路VSFTP

二實驗環境

FTP服務端xuegod63.cn   IP192.168.1.63

FTP用戶端xuegod64.cn   IP192.168.1.64

三FTP服務概述

作用是在 Internet 上用來傳送檔案的協定。

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

模式 C/S 模式

端口20 (傳資料)   21 (傳指令)

常見FTP伺服器

windowsServ-U FTP Server

LinuxProFTPD:Professional FTP daemon一個Unix平台上或是類Unix平台上如Linux, FreeBSD等的FTP伺服器程式。  

FTP服務連接配接模式

以指令和資料流形式的主動連接配接---用戶端無防火牆

解析服務端主動連結用戶端----最後一道線

1指令形式

   服務端開啟21号端口主動與用戶端的某個端口進行連接配接用戶端進行回應指令通道建立完成。

2資料流形式

   用戶端通過指令通道告訴服務端“服務端對自己的連接配接方式以及自己所開放可以被其連接配接的端口号大于1024”服務端在收到用戶端發來的資料資訊之後會自動的開啟20端口資料流端口從資料流端口出發主動向用戶端所開放的端口進行連接配接。

以指令和資料流形式的主動連接配接---用戶端有防火牆

解析

   由于用戶端有防火牆是以服務端是主動連接配接不上用戶端的是以用戶端會主動連接配接服務端防火牆收到用戶端發來的資料之後轉發給服務端服務端在收到防火牆發來的資訊之後會主動的用21端口與用戶端進行建立連接配接。

   用戶端通過指令通道告訴服務端“服務端對自己的連接配接方式以及自己所開放可以被其連接配接的端口号大于1024”防火牆收到資訊之後将其轉發給服務端服務端在收到防火牆發來的資料資訊之後會自動的開啟22端口資料流端口從資料流端口出發主動向用戶端所開放的等待端口進行連接配接。

以指令和資料流形式的被動連接配接---用戶端無防火牆

解析用戶端主動連結服務端

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

用戶端通過指令通道告訴服務端“服務端對自己的連接配接方式“被動連接配接”服務端在收到用戶端發來的資料資訊之後會自動的開啟某一個固定端口或者某個端口的範圍等待用戶端來主動連接配接 用戶端收到之後主動連接配接服務端開放的端口範圍。

以指令和資料流形式的被動連接配接---用戶端有防火牆

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

   用戶端通過指令通道告訴服務端“服務端對自己的連接配接方式“被動連接配接”防火牆收到資訊之後将其轉發給服務端服務端在收到防火牆發來的資料資訊之後會自動的開啟某一個固定端口或者某個端口的範圍等待用戶端來主動連接配接 用戶端收到之後主動連接配接服務端開放的端口範圍。

四實驗代碼

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

1安裝vsftp伺服器端

[root@xuegod63 ~]# rpm -ivh /mnt/Packages/vsftpd-2.2.2-6.el6_0.1.x86_64.rpm

安裝用戶端

[root@xuegod64 ~]# 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主機通路控制

[root@xuegod63 vsftpd]vim  /etc/vsftpd/user_list

# 如果userlist_deny= YES預設絕不允許在這個檔案中的使用者登入ftp甚至不提示輸入密碼

3啟動服務

[root@xuegod63 ~]# service vsftpd restart

[root@xuegod63 ~]#chkconfig vsftpd on

[root@xuegod63 ~]# 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/

linux下

[root@xuegod64 ~]# 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修改配置檔案

[root@xuegod63 vsftpd]# pwd

/etc/vsftpd

[root@xuegod63 vsftpd]# cp vsftpd.conf vsftpd.conf.back

[root@xuegod63 vsftpd]# vim vsftpd.conf #修改以下内容

anonymous_enable=YES  #允許匿名使用者通路

anon_upload_enable=YES #允許匿名使用者上傳檔案并可以建立目錄

anon_mkdir_write_enable=YES  #允許匿名使用者建立并修改檔案夾或目錄

anon_other_write_enable=YES  #允許匿名使用者對檔案進行删除和修改權限

2啟動服務

[root@xuegod63 vsftpd]# service vsftpd reload

3修改使用者根目錄的屬主

[root@xuegod63 vsftpd]# ll -d /var/ftp/pub/

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

[root@xuegod63 vsftpd]# chown ftp /var/ftp/pub/

[root@xuegod63 vsftpd]# !l

ll -d /var/ftp/pub/

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

注意預設匿名使用者家目錄/var/ftp的權限是755這個權限是不能改變的。切記

4測試-可以建立檔案夾删除更改和上傳檔案夾

[root@xuegod64~]# lftp 192.168.1.63

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

lftp 192.168.1.63:/pub> mkdir test

mkdir 成功, 建立 `test'

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'

例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 并禁止本地登入然後設定其密碼

[root@xuegod63 ~]# useradd -s /sbin/nologin team1

[root@xuegod63 ~]# useradd -s /sbin/nologin team2

[root@xuegod63 ~]# echo "123456" | passwd --stdin team1

 [root@xuegod63 ~]# echo "123456" | passwd --stdin team2

2配置vsftpd.conf 主配置檔案并作相應修改

[root@xuegod63 vsftpd]# cp vsftpd.conf vsftpd.conf.back

[root@xuegod63 vsftpd]# vim vsftpd.conf

anonymous_enable=NO禁止匿名使用者登入

local_enable=YES允許本地使用者登入

local_root=/var/www/html設定本地使用者的根目錄為/var/www/html

chroot_list_enable=YES激chroot 功能

chroot_list_file=/etc/vsftpd/chroot_list設定鎖定使用者在根目錄中的清單檔案。此檔案存放要鎖定的使用者名

3建立/etc/vsftpd/chroot_list 檔案添加team1 和team2 帳号

[root@xuegod63 vsftpd]# touch /etc/vsftpd/chroot_list

 [root@xuegod63 ~]# vim /etc/vsftpd/chroot_list  #寫入以下内容一行一個使用者名

team1

team2

4重新開機vsftpd 服務使配置生效,并複制内容到之地檔案夾中

[root@xuegod63 ~]#service vsftpd restart

[root@xuegod63 ~]# cp /etc/passwd /var/www/html/

[root@xuegod63 ~]# cp install.log /var/www/html/

5修改本地權限

[root@xuegod63 ~]# ll -d /var/www/html/

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

[root@xuegod63 ~]# chmod -R o+w /var/www/html/

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

6測試

測試

<a href="ftp://192.168.1.63/" target="_blank">ftp://192.168.1.63/</a>

實體機測試

<a href="http://s4.51cto.com/wyfs02/M02/8A/A8/wKioL1g2v_2BP8q2AADBhjOrG_k368.png" target="_blank"></a>

<a href="http://s4.51cto.com/wyfs02/M00/8A/AC/wKiom1g2v_2g-Cs9AABdKuDRfJI458.png" target="_blank"></a>

#登入并建立檔案夾并且在linux 系統中進行删除

用戶端測試

[root@xuegod64 ~]# lftp [email protected]

密碼: 123456

lftp [email protected]:~&gt; 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]:/&gt; rm -rf passwd

]rm 成功, 删除 `passwd'

lftp [email protected]:/&gt; ls

lftp [email protected]:/&gt;

lftp [email protected]:/&gt; cd /var/www/

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

lftp [email protected]:/&gt; cd /etc

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

例3

要求ftp虛拟帳号

   公司為了宣傳最新的産品資訊計劃搭建FTP 伺服器為客戶提供相關文檔是以對所有網際網路開放共享目錄允許客戶下載下傳産品資訊但是禁止上傳檔案。與公司合作的相關機關能夠使用FTP伺服器進行上傳和下載下傳但不可以删除資料。

   需要保證伺服器的穩定性并做優化需考慮到伺服器的安全性是以關閉實體使用者登入使用虛拟帳号驗證機制并對不同虛拟帳号設定不同的權限保證伺服器的性能還需要根據使用者的等級限制用戶端的連接配接數及下載下傳速度。

1、建立使用者資料庫

1建立使用者文本檔案

   先建立使用者文本檔案vsftpd_virtualuser.txt添加兩個虛拟帳号公共客戶帳号ftp 及合作客戶帳号vip

[root@xuegod63 vsftpd]# vim /etc/vsftpd/vsftpd_virtualuser.txt  #寫入以下内容。

ftp  

123456  

vip 

123456 

#此檔案格式要示奇數行使用者名、偶數行密碼

2生成資料庫

   儲存虛拟帳号和密碼的文本檔案無法被系統帳号直接調用。我們需要使用db_load 指令生成db

資料庫檔案。

安裝

[root@xuegod63 vsftpd]# rpm -qf `which db_load `

db4-utils-4.7.25-16.el6.x86_64

[root@xuegod63 ~]# rpm -ivh /mnt/Packages/db4-utils-4.7.25-18.el6_4.x86_64.rpm

[root@xuegod63 ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt  /etc/vsftpd/vsftpd_virtualuser.db

選項

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

-f 指定包含使用者名和密碼文本檔案。

 [root@xuegod63 vsftpd]# rm -rf /etc/vsftpd/vsftpd_virtualuser.txt   #為了安全删除此檔案。後期不再使用此檔案。

3修改資料庫檔案通路權限

[root@xuegod63 vsftpd]# chmod 600 /etc/vsftpd/vsftpd_virtualuser.db

[root@xuegod63 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/目錄此

目錄下儲存着大量與認證有關的配置檔案并以服務名稱命名。

[root@xuegod63 ~]# 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。

[root@xuegod63 vsftpd]# useradd -d /var/ftp/public ftpuser

[root@xuegod63 vsftpd]# useradd -d /var/ftp/vip ftpvip

[root@xuegod63 vsftpd]# chmod -R 500 /var/ftp/public/  #修改權限

[root@xuegod63 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 主配置檔案

[root@xuegod63 vsftpd]# cp vsftpd.conf.back 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 的配置檔案

[root@xuegod63 ~]# grep vuserconfig /etc/vsftpd/vsftpd.conf   #檢視要建立的目錄名

user_config_dir=/etc/vsftpd/vuserconfig

[root@xuegod63 ~]# mkdir /etc/vsftpd/vuserconfig

[root@xuegod63 ~]# touch /etc/vsftpd/vuserconfig/ftp

[root@xuegod63 ~]# touch /etc/vsftpd/vuserconfig/vip

配置虛拟帳号配置檔案寫入以下内容

[root@xuegod63 ~]# 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

[root@xuegod63 ~]# vim /etc/vsftpd/vuserconfig/vip  #寫入以下内容

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 使配置生效

6、測試

1公共帳号ftp 測試--在公共帳号測試前我們先建立個測試檔案

[root@xuegod63 vsftpd]# cp /mnt/Packages/mysql-server-5.1.71-1.el6.x86_64.rpm /var/ftp/public/productinfo.xls #共享的檔案要大一些友善後期測試下載下傳速度。

[root@xuegod63 vsftpd]# cp -r /boot/grub/ /var/ftp/public/   #複制一個目錄

ftp用戶端指令

lftp  ftpIP   -u  username,passwd

lftp  ftpIP   -u  username

使用公共帳号ftp登入ftp 伺服器

 [root@xuegod64 ~]# lftp 192.168.1.63 -u ftp,123456

lftp [email protected]:~&gt; 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]:/&gt; get produtinfo.xls  #下載下傳單個檔案  。并測試限速50KB/s

lftp [email protected]:/&gt; mget *.txt  

lftp [email protected]:/&gt; mirror grub/  #下載下傳一個檔案夾

lftp [email protected]:/&gt; !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

測試 vip帳号

[root@xuegod63 vsftpd]# lftp 192.168.1.63 -u vip

Password:

lftp [email protected]:~&gt; ls      #這個是檢視vip客戶在FTP上分的的目錄    

lftp [email protected]:/&gt; !ls       #這個是檢視vip客戶在自己實體機上的目錄

chroot_list user_list   vsftpd_conf_migrate.sh

ftpusers vsftpd.conf   vsftpd_virtualuser.db

grub vsftpd.conf.anon  vuserconfig

productinfo.xls  vsftpd.conf.back

lftp [email protected]:/&gt; put chroot_list   #測試上傳

12 bytes transferred       

lftp [email protected]:/&gt; rm -rf chroot_list

rm ok, `chroot_list' removed

lftp [email protected]:/&gt; ls

-r--r--r--    1 0        0         8492640 Mar 09 14:21 a.zip

本文轉自 于學康 51CTO部落格,原文連結:http://blog.51cto.com/blxueyuan/1876335,如需轉載請自行聯系原作者