----------------------------------------------
大綱:
FTP服務:(文件傳輸協議---> File Transfer Protocol)
常見FTP 服務
名稱:
功能和特點
工作模式
工作原理
安裝
服務開啟和關閉
服務端口
服務配置文件
1. 實戰:匿名登錄vsftp服務
2. 實戰: 修改配置文件,允許匿名用戶上傳文件
實戰: 偽用戶登錄FTP服務器,不能登錄系統,只允許team1和team2登錄和上傳,鎖定在某個3. 目錄中
4. 實戰: 虛擬帳號
5. 實戰: vip帳號 刪除文件
----------------------------------------------
FTP服務:(文件傳輸協議---> File Transfer Protocol)
FTP服務器(File Transfer Protocol Server)是在互聯網上提供文件存儲和訪問服務的計算機,它們依照FTP協議提供服務.
FTP(File Transfer Protocol: 文件傳輸協議)作用: Internet 上用來傳送文件的協議
常見FTP服務:
Windows---常用---> Serv-U Ftp Server
Linux ---常用---> ProFTPD(Professional FTP daemon)
Red Hat Linux(推薦) ---> vsftp ( Very Secure FTP )
今天的主角:VSFTP
VSFTP是一個基於GPL發布的類Unix系統上使用的FTP服務器軟件,它的全稱是Very Secure FTP 從此名稱可以看出來,編制者的初衷是代碼的安全.
特點:它是一個安全、高速、穩定的FTP服務器;
VSFTP服務:
名稱:Very Secure FTP Server
功能和特點:
實現局域網或公網中,文件共享和傳輸的協議.
FTP服務有兩種模式(1. 主動模式; 2. 被動模式) 以FTPServer 為參照物
FTP服務有兩個傳輸通道(1. 數據通道; 2. 控制通道)
工作模式:C/S模式
服務端口:(cat /etc/services | grep ftp)
Port 20 ---> 數據端口(數據通道)
Port 21 ---> 指令端口(控制通道)
工作原理:##面試經常會遇到這樣問題,大家需要注意下
一. 主動模式---> (默認)
1). Client連接到Server的21端口,並發送用戶名,密碼,一個隨機的port1端口(1024以上)及PORT命令給Server,告訴Server采用主動模式,並開放端口port1
2). Server收到Client發來的PORT主動模式命令和端口號后,會通過Server的20端口與Client開放的port1端口連接,然后就可以開始傳送數據了
原理如圖:
二. 被動模式--->
1). Client連接Server的21端口,發送用戶名和密碼以及Pasv命令給Server,告知Server采用被動模式
2). Server收到Client發來的Pasv被動模式命令后,隨機開放port2端口(1024以上),然后把開放的端口告訴客戶端,客戶端的收到Server發來的port2端口后,以20端口與Server的port2連接,然后進行數據傳輸.
原理如圖:
安裝:
[root@xiaogan100 ~]# yum -y install vsftpd lftp #安裝服務端和客戶端
vsftpd為服務端軟件包
lftp為客戶端軟件包 ---> Sophisticated file transfer program
Usage:lftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]
lftp -f script_file
lftp -c commands
lftp --version
lftp --help
注:從RHEL6開始,系統鏡像中默認沒有FTP客戶端命令,取而代之的是lftp命令
Linux客戶端--->lftp命令是一個功能強大的下載工具
支持ftp,ftps,http,https,hftp,fish.
(其中ftps和https需要在編譯的時候包含openssl庫)
lftp的界面非常友好,支持命令補全,歷史記錄,允許多個后台任務執行等功能.
使用非常方便.還有書簽,排隊,鏡像,斷點續傳,多進程下載等功能
服務的使用:
1). 添加開機啟動項
chkconfig --add vsftpd #添加vsftpd開機啟動項
chkconfig vsftpd on #設置vsftpd開機自啟動
chkconfig --list vsftpd #查看vxftpd啟動級別
2). 啟動和關閉vsftpd服務
#開啟start 重啟restart 關閉 stop 查看狀態status
/etc/init.d/vsftdp start/restart/stop/status
或
service vsftpd start/restart/stop/status
netstat -anlpt | grep vsftpd #查看監聽端口
#沒有連接時,值監聽21端口--->控制通道
#有鏈接時,兩個端口(20,21)都在監聽
客戶端訪問Vsftpd Server
Linux: (192.168.171.100為Server端IP地址,客戶端需和Server在一個網段)
lftp 192.168.171.100 #匿名方式訪問 Server需開啟匿名訪問支持
Windows:
資源管理器地址欄:ftp://192.168.171.100
服務配置文件:
rpm -ql vsftpd
/etc/vsftpd/vsftpd.conf ---> 核心配置文件
(建議修改前,先備份,一定要養成習慣)
/etc/vsftpd/user_list #黑白名單
# userlist_deny=NO 白名單,指定允許使用VSFTP 的用戶列表
# userlist_deny=YES 黑名單,絕不允許這個文件中的用戶登錄ftp,甚至不提示輸入密碼
/etc/vsftpd/ftpusers #黑名單,用於指定哪些用戶不能訪問FTP 服務器
/etc/vsftpd/vsftpd_conf_migrate.sh #是vsftpd 操作的一些變量和設置腳本
/var/ftp #默認情況下,匿名用戶登錄的根目錄
環境搭建:
Linux服務端:192.168.171.100
Windows客戶端:192.168.171.1
Linux客戶端:192.168.171.120
在Linux服務端安裝vsftpd和lftp軟件包
yum -y install vsftpd lftp
在Linux客戶端安裝lftp軟件包
yum -y install lftp
在Windows客戶端安裝FileZilla(也可以不安裝)
1. 實戰:匿名登錄vsftp服務
背景:公司技術部准備搭建一台功能簡單的FTP 服務器,允許所有員工上傳和下載文件,並允許創建用戶自己的目錄。
分析:允許所有員工上傳和下載文件需要設置成允許匿名用戶登錄並且需要將允許匿名用戶上傳功能開啟,
anon_mkdir_write_enable #字段可以控制是否允許匿名用戶創建目錄。
anonymous_enable=YES #允許匿名用戶訪問
anon_upload_enable=YES #允許匿名用戶上傳文件
anon_mkdir_write_enable=YES #允許匿名用戶創建目錄
anon_other_write_enable=YES #允許匿名用戶重命名或刪除
1). Linux服務端:安裝vsftp服務,並運行(因為vsftp默認開啟匿名用戶登錄,不需配置)
yum -y install vsftpd lftp && /etc/init.d/vsftpd start
2). Windows客戶端:在資源管理器中的地址欄輸入:ftp://192.168.171.100
3). Linux客戶端:
lftp 192.168.171.100
2. 實戰: 修改配置文件,允許匿名用戶創建目錄
1). 嘗試創建目錄和文件情況如下(使用Windows客戶端FileZllia登錄)
2). 備份配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
3). 修改配置文件
vim /etc/vsftpd/vsftpd.conf
#修改如下行:修改前--->
#anon_mkdir_write_enable=YES
#修改后--->(即去掉前面的#號)
anon_mkdir_write_enable=YES
4). 重啟服務
/etc/init.d/vsftpd restart
5). 修改文件訪問權限
# 注意: 有兩個權限,一個是系統權限(即我們剛才配置的服務權限),另一個是訪問權限
系統權限和訪問權限必須同時滿足,才可對文件夾寫入數據
chmod o+w /var/ftp
6). 使用windows客戶端FileZilla連接,並嘗試創建文件夾
擴展:怎么實現匿名用戶上傳和刪除數據呢?
1). 修改配置文件如下:
anon_upload_enable=YES # 去掉注釋符號#即可
anon_other_write_enable=YES #允許匿名賬戶刪除和重命名操作!
2). 重啟服務后,即可實現匿名用戶上傳文件#不推薦
/etc/init.d/vsftpd restart
3. 實戰: 使用用戶名和密碼登錄FTP服務器,不能登錄系統,只允許gan1和gan2登錄和上傳,鎖定在某個目錄中
背景:公司內部現在有一台FTP 和WEB 服務器,FTP 的功能主要用於維護公司的網站內容,包括上傳文件、創建目錄、更新網頁等等。公司現有兩個部門負責維護任務,他們分別適用team1 和team2帳號進行管理。先要求僅允許team1 和team2 帳號登錄FTP 服務器,但不能登錄本地系統,並將這兩個帳號的根目錄限制為/var/www/html,不能進入該目錄以外的任何目錄。
ftp 和www web服務器相結合。
www web服務器根目錄: /var/www/html
只允許:team1和team2兩用戶 可以上傳。 vsftp禁止匿名。
分析:
將FTP 和WEB 服務器做在一起是企業經常采用的方法,這樣方便實現對網站的維護,為了增強安全性,首先需要使用僅允許本地用戶訪問,並禁止匿名用戶登錄。其次使用chroot 功能將team1和team2 鎖定在/var/www/html 目錄下。如果需要刪除文件則還需要注意本地權限
解決方案:
1). 恢復默認配置文件
cp /etc/vsftpd/vsftdp.conf.bak /etc/vsftdp/vsftpd.conf
2). 修改配置文件/etc/vsftpd/vsftpd.conf #開啟及下列參數,並設置成對應的值
anonymous_enable=NO #不允許匿名用戶登錄
local_enable=YES #開啟本地用戶登錄
local_root=/var/www/html #設置用戶登錄根目錄
chroot_local_enable=YES #鎖定用戶在根目錄中
chroot_list_enable=YES #開啟鎖定用戶列表
chroot_list_file=/etc/vsftpd/chroot_list #保存鎖定用戶列表的文件
write_enable=YES #開啟FTP 寫入功能
anon_mkdir_write_enable=YES #開啟匿名用戶創建文件夾下功能
anon_upload_enable=YES #開啟匿名用戶上傳文件功能
3). 配置chroot_list 鎖定用戶的列表,輸入如下兩行
gan1
gan2
4). 創建本地賬戶gan1,gan2
#創建不可登陸賬戶,並設置賬戶密碼
useradd -s /sbin/nologin gan1 && echo “123456” | passwd --stdin gan1
useradd -s /sbin/nologin gan2 && echo “123456” | passwd --stdin gan2
5). 重啟服務
service vsftpd restart #重啟vsftpd服務
6). Linux客戶端遠程連接Server
lftp 192.168.171.100 -u gan1,123456
4. 實戰: 虛擬帳號
企業環境
公司為了宣傳最新的產品信息,計划搭建FTP 服務器,為客戶提供相關文檔的下載。對所有互聯網開放共享目錄,允許下載產品信息,禁止上傳。公司的合作單位能夠使用FTP 服務器進行上傳和下載,但不可以刪除數據。需要保證服務器的穩定性並做優化。
創建ftp虛擬帳號。允許客戶使用ftp帳號下載文件。 但是,你們自己的合作伙伴帳號:vip可以上傳一內部文件。
需求分析
根據企業的需求,對於不同用戶進行不同的權限限制,FTP 服務器需要實現用戶的審核。需考慮到服務器的安全性,所以關閉實體用戶登錄,使用虛擬帳號驗證機制,並對不同虛擬帳號設置不同的權限。為了保證服務器的性能,還需要根據用戶的等級,限制客戶端的連接數及下載速度。
1). 恢復默認配置文件:
cp /etc/vsftpd/vsftdp.conf.bak /etc/vsftdp/vsftpd.conf
2). 修改配置文件如下:
anonymous_enable=NO #禁止匿名帳戶登錄
local_enable=YES #開始用戶名和密碼登錄
write_enable=YES #開啟服務可寫模式
chroot_local_enable=YES #鎖定用戶在登陸目錄下
並在pam_service_name=vsftpd行下添加如下行:
user_config_file=/etc/vsftpd/vuserconfig #設置用戶配置文件目錄地址
max_clients=300 #設置做多同時有300個客戶端
max_per_ip=10 #設置每個IP最大連接數為10
3). 添加本地用戶ftpuser,vipuser
對於公共帳號和客戶帳號,因為需要配置不同的權限,所以可以將兩個帳號的目錄進行隔離,控制用戶的文件訪問。
公共帳號ftp 對應系統帳號ftpuser,並指定其主目錄為/var/ftp/share,
而客戶帳號vip 對應系統帳號ftpvip,指定主目錄為/var/ftp/vip。
useradd -d /var/ftp/share ftpuser #創建用戶ftpuser並指定用戶目錄
useradd -d /var/ftp/vip ftpuser #創建用戶vipuser並指定用戶目錄
公共帳號ftp 只允許下載,修改share 目錄其他用戶權限為rx 可讀可執行。客戶帳號vip 允許上傳和下載,所以對vip 目錄權限設置為rwx,可讀可寫可執行。
chmod -R 500 /var/ftp/share #變更目錄權限只有擁有者可以進行可讀和執行操作
chmod -R 700 /var/ftp/vip #變更目錄權限
注:如果不設置可執行用戶登錄會出不能更改目錄錯誤。
4). 建立用戶配置文件
互動:如何設置多個虛擬帳號的不同權限? 以前都配置好服務后,對所有用戶有效。現在需要對不同用戶配置不同的權限。 怎么辦?
一個配置文件無法實現此功能,需要為每個虛擬帳號建立獨立的配置文件,並根據需要進行相應的設置。
在user_config_dir 指定路徑下,建立與虛擬帳號同名的配置文件並添加相應的配置字段
vim /etc/vsftpd/vuserconfig/ftp
配置如下:
guest_enable=yes #開啟虛擬賬戶登錄模式
guest_username=ftpuser #設置ftp對應本地用戶名ftpuser
anon_world_readable_only=no #用於匿名用戶瀏覽整個服務器文件系統
anon_max_rate=50000 #限定傳輸速度為50kb/s
vim /etc/vsftpd/vuserconfig/vip
配置如下:
guest_enable=yes #開啟虛擬賬戶登錄模式
guest_username=vipuser #設置vip對應本地用戶名vipuser
anon_world_readable_only=no #用於匿名用戶瀏覽整個服務器文件系統
anon_max_rate=1000000 #限定傳輸速度為1Mb/s
anon_mkdir_write_enable=yes #允許匿名用戶創建文件夾
anon_upload_enable=yes #開啟匿名帳號的上傳功能
注意:vsftpd 對於文件傳輸速度限制並不是絕對鎖定在一個數值上哈,而是在80%~120%之間變化比如設置100KB/s 則實際是速度在80KB/s~120KB/s 之間變化
5). 配置ftp虛擬賬戶
vim /etc/vsftpd/virtualuser.txt #編輯虛擬賬戶信息
輸入如下四行:(奇數行用戶名,偶數行密碼)
ftp
123456
vip
123456
db_load -T -t hash -f /etc/vsftpd/virtualuser.txt /etc/vsftpd/virtualuser.db #生成數據庫文件
rm -rf /etc/vsftpd/virtualuser.txt #刪除賬戶文件
數據庫文件中保存着虛擬帳號的密碼信息,為了防止非法用戶盜取哈,我們可以修改該文件的訪問權限。生成的認證文件的權限應設置為只對root 用戶可讀可寫,即600
chmod 600 /etc/vsftpd/virtualuser.db #變更數據庫文件權限為擁有者可讀寫
6). 配置pam文件
vim /etc/pam.d/vsftpd
為了使服務器能夠使用數據庫文件,對客戶端進行身份驗證,需要調用系統的PAM 模塊.
PAM概述:
PAM(Plugable Authentication Module)為可插拔認證模塊,不必重新安裝應用系統,通過修改指定的配置文件,調整對該程序的認證方式。PAM 模塊配置文件路徑為/etc/pam.d/目錄,此目錄下保存着大量與認證有關的配置文件,並以服務名稱命名。
修改vsftpd 對應的PAM 配置文件/etc/pam.d/vsftpd。將默認配置使用“#”全部注釋,添加如下兩行對應字段。
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtualuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtualuser
7). 重啟服務
/etc/init.d/vsftpd restart
8). 嘗試使用客戶端進行測試,分別測試下載速度
lftp 192.168.171.100 -u ftp,123456
get dic.tar.bz2
lftp 192.168.171.100 -u vip,123456
get dic.tar.bz2
5. 實戰: vip帳號 刪除文件
對修改vip賬戶配置文件
vim /etc/vsftpd/vuserconfig/vip
添加如下行:
anon_other_write_enable=YES #允許匿名賬戶刪除和重命名操作!
重啟服務
/etc/init.d/vsftpd restart
測試刪除數據
lftp 192.168.171.100 -u vip,123456
rm -rf dic.tar.bz2
互動:你認為哪一種更好?為什么?
lftp [OPTS]
-u [,] 使用指定的用戶名/口令進行驗證
-p 連接指定的端口
lftp 192.168.1.63 -u vip 后,可以執的命令:
* 下載單個文件和一組文件,斷點續傳用-c參數
lftp ................:/> get -c ls-lR.txt #下載單個文件
lftp ...............:/> mget *.txt #下載多個文件
lftp ................:/> mirror dir # 鏡像一個目錄。下載一個目錄時用。
查看數據傳輸過程中,vsftp服務器端傳輸數據端口:
沒有看20端口。
回顧配置文件參數:
anonymous_enable=YES #啟用匿名用戶(anonymous、ftp)
local_enable=YES #本地用戶、啟用
write_enable=YES #本地用戶、可寫
#anon_upload_enable=YES #匿名用戶可寫
#anon_mkdir_write_enable=YES #匿名用戶可以創建目錄
#idle_session_timeout=600 #超時時間
#data_connection_timeout=120 #超時時間
listen=YES #是否監聽
pam_service_name=vsftpd #開啟pam支持
userlist_enable=YES #用戶列表功能開啟
tcp_wrappers=YES #開始tcp_wrappers支持
黑白名單:
userlist_deny=NO #黑名單變白名單
鎖定用戶訪問的目錄:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #寫誰鎖誰
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #寫誰不鎖誰
其他功能:
匿名用戶可以重命名和刪除:
anon_other_write_enable=YES
bind IP(幫定監聽IP):
listen_address=IP
local_max_rate=N
anon_max_rate=N
max_client=N
max_per_ip=N