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服務連接模式
以命令和數據流形式的主動連接---客戶端無防火牆
解析服務端主動鏈接客戶端----最後一道線
1命令形式
服務端開啓21號端口主動與客戶端的某個端口進行連接客戶端進行迴應命令通道建立完成。
2數據流形式
客戶端通過命令通道告訴服務端「服務端對自己的連接方式以及自己所開放可以被其連接的端口號大於1024」服務端在收到客戶端發來的數據信息之後會自動的開啓20端口數據流端口從數據流端口出發主動向客戶端所開放的端口進行連接。
以命令和數據流形式的主動連接---客戶端有防火牆
解析
1命令形式
由於客戶端有防火牆因此服務端是主動連接不上客戶端的所以客戶端會主動連接服務端防火牆收到客戶端發來的數據之後轉發給服務端服務端在收到防火牆發來的信息之後會主動的用21端口與客戶端進行建立連接。
2數據流形式
客戶端通過命令通道告訴服務端「服務端對自己的連接方式以及自己所開放可以被其連接的端口號大於1024」防火牆收到信息之後將其轉發給服務端服務端在收到防火牆發來的數據信息之後會自動的開啓22端口數據流端口從數據流端口出發主動向客戶端所開放的等待端口進行連接。
以命令和數據流形式的被動連接---客戶端無防火牆
解析客戶端主動鏈接服務端
1命令形式
服務端等待客戶端主動請求連接。
2數據流形式
客戶端通過命令通道告訴服務端「服務端對自己的連接方式「被動連接」服務端在收到客戶端發來的數據信息之後會自動的開啓某一個固定端口或者某個端口的範圍等待客戶端來主動連接 客戶端收到之後主動連接服務端開放的端口範圍。
以命令和數據流形式的被動連接---客戶端有防火牆
解析
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
# 如果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/
linux下
[[email protected]4 ~]# 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測試-可以創建文件夾刪除更改和上傳文件夾
[[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=YES激chroot 功能
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測試
測試
物理機測試
#登錄並新建文件夾並且在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
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
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