4.3 vsftpd文件共享

 

vsftpdvery secure FTP的簡寫形式,是一款非常安全的FTP軟件。該軟件是基於GPL開發的,被設計爲Linux平臺下穩定、快速、安全的FTP軟件,它支持IPv6以及SSL加密。Vsftpd的安全性主要體現在三個方面:進程分離,處理不同任務的進程彼此是獨立運行的;進程運行時均以最小權限運行;多數進程都使用chroot進行了禁錮,防止客戶非法共享目錄,這裏的chroot是改變根的一種技術,如果我們通過vsftpd共享了/var/ftp目錄,則該目錄對客戶端而言就是共享的根目錄。

vsftpd雖然是一款FTP軟件,但FTP不同於其他的互聯網協議,它使用多端口通信。當客戶端連接服務器請求資源時,服務器會使用21端口與客戶端進行通信,該端口專門處理客戶端發送給服務器的請求命令,也就是俗稱的命令端口。而最終服務器與客戶端進行數據傳輸時,還需要使用另一個數據端口,數據端口號取決於服務器運行的模式是主動模式還是被動模式。

 

4.3.1 FTP工作模式

1. 主動(active modeFTP工作模式

第一步,客戶端隨機開啓大於1024X端口與服務器的21端口建立連接通道,通道建立後,客戶端隨時可以通過該通道發送上傳或下載的命令。

第二步,當客戶端需要與服務器進行數據傳輸時,客戶端會再開啓一個大於1024的隨機端口Y,並將Y端口號通過之前的命令通道傳送給服務器的21端口。

第三步,服務器獲取到客戶端的第二個端口後會主動連接客戶端的該端口,通過三次握手後,完成服務器與客戶端數據通道的建立,所有的數據均通過該數據通道進行傳輸。

2. 被動(passive modeFTP工作模式

第一步,客戶端隨意開啓大於1024X端口與服務器的21端口建立連接通道。

第二步,當客戶端需要與服務器進行數據傳輸時,客戶端從命令通道發送數據請求要求上傳或下載數據。

第三步,服務器收到數據請求後會隨機開啓一個端口Y,並通過命令通道將該端口信息傳送給客戶端。

第四步,客戶端在收到服務器發送過來的數據端口Y的信息後,將在客戶端本地開啓一個隨機端口Z,此時客戶端再主動通過本機的Z端口與服務器的Y端口進行連接,通過三次握手連接完成後,即可進行數據傳輸。

FTP協議最初使用主動模式工作,但現在客戶端主機多數都位於防火牆後面,而且防火牆策略一般不允許入站數據。也就是說,客戶端主機可以連接外網,但外網不可以直接接入客戶端主機。這樣採用主動模式FTP服務器最終將無法正常工作,所以就有了後來的被動模式的FTP服務。

 

4.3.2 安裝與管理vsftpd

安裝包:vsftpd

RPM格式的vsftpd軟件安裝完成後,該軟件的主程序是/usr/sbin/vsftpd,下面是vsftpd相關的核心文件與目錄列表說明。

/etc/logrotate.d/vsftpd(日誌輪轉)

/etc/pam.d/vsftpd(基於PAMvsftpd驗證配置文件)

/etc/rc.d/init.d/vsftpdvsftpd啓動腳本,可以使用service調用)

/etc/vsftpdvsftpd軟件主目錄)

/etc/vsftpd/ftpusers(默認的vsftpd黑名單)

/etc/vsftpd/user_list(可以通過只配置文件設置該文件爲黑名單或白名單)

/etc/vsftpd/vsftpd.confvsftpd主配置文件)

/usr/sbin/vsftpdvsftpd主程序)

/usr/share/doc/vsftpd-2.2.2vsftpd文檔資料路徑)

/var/ftp(默認vsftpd共享目錄)

 

4.3.3 配置文件解析

vsftpd配置文件默認位於/etc/vsftpd目錄下,vsftpd會自動尋找以.conf結尾的配置文件,並使用此配置文件啓動FTP服務。配置文件的格式爲:選項=值(中間不可以有任何空格符),以#開頭的行會被識別爲註釋行。表4-2給出了vsftpd的主要配置選項及其對應的含義。

4-2

賬戶類別

設置項

功能描述

全局配置

listen=YES

是否監聽端口,獨立運行守護進程

listen_port=21

監聽入站FTP請求的端口號

write_enable=YES

是否允許寫操作,全局開關

download_enable=YES

如果設置爲NO,則拒絕所有的下載請求

dirmessage_enable=YES

用戶進入目錄是否顯示消息

xferlog_enable=YES

是否開啓xferlog日誌功能

xferlog_std_format=YES

Xferlog日誌文件格式

connect_from_port_20=YES

使用主動模式連接,啓用20號端口

pasv_enable=YES

是否啓用被動模式連接,默認爲被動模式

pasv_max_port=24600

被動模式連接最大端口號

pasv_min_port=24500

被動模式連接最小端口號

userlist_enable=YES

是否啓用userlist用戶列表文件

userlist_deny=YES

是否禁止userlist文件中的賬戶訪問FTP

max_client=2000

最大允許同時2000客戶端連接,0代表無限制

max_per_ip=0

每個客戶端的最大連接限制,0代表無限制

tcp_wrappers=YES

是否啓用tcp_wrappers

guest_enable=YES

如果爲YES,則所有的非匿名登錄都映射爲guest_username指定的用戶

guest_username=ftp

設定來賓賬戶

user_config_dir=/etc/vsftpd/conf

指定目錄,在該目錄下可以爲賬戶設置獨立的配置文件與選項

dual_log_enable=NO

是否啓用雙日誌功能,生成兩個日誌文件

anonymous_enable=YES

是否開啓匿名訪問功能,默認爲開啓

匿名賬戶

anon_root=/var/ftp

匿名訪問FTP的根路徑,默認爲/var/ftp

anon_upload_enable=YES

是否允許匿名賬戶上傳,默認禁止

anon_mkdir_write_enable=YES

是否運行匿名賬戶創建目錄,默認禁止

anon_other_write_enable=YES

是否允許匿名賬戶進行其他所有的寫操作

anon_max_rate=0

匿名數據傳輸率(B/s

anon_umask=077

匿名上傳權限掩碼

本地賬戶

local_enable=YES

是否啓用本機賬戶FTP功能

local_max_rate=0

本機賬戶數據傳輸率(B/s

local_umask=077

本地賬戶權限掩碼

chroot_local_user=YES

是否禁錮本地賬戶根目錄,默認爲NO

local_root=/ftp/common

本地賬戶訪問FTP根路徑

 

4.3.4 賬戶權限

vsftpd支持的常用登錄方式有:匿名登錄、本地賬戶登錄、虛擬賬戶登錄三種方式。

匿名賬戶登錄一般應用於下載服務器,這種下載服務器往往是對外開放的。Vsftpd默認開啓的是匿名共享,默認共享路徑是/var/ftp

本地賬戶登錄則需要使用系統賬戶以及對應的系統密碼纔可以登錄使用FTP,默認的配置文件中,anonymous_enablelocal_enable均被設置爲YES,此時FTP爲匿名訪問模式,如果需要開啓本地賬戶FTP功能,需要將anonymous_enable設置爲NO,默認共享路徑問賬戶個人家目錄。需要注意的是,開啓本地賬戶登錄後,用戶可以離開家目錄,從而進入系統中的其他目錄,這樣是非常危險的,如果在配置文件中使用chroot_local_user,用戶將被禁錮在自己的家目錄下。由於SELinux默認不允許FTP共享家目錄,因此,在沒有完全掌握SELinux設置方法的情況下,建議關閉SELinux以完成下面的案例。

當有大量用戶需要使用FTP時,vsftpd支持虛擬賬戶模式登錄FTP,從而避免了創建大量的系統賬戶,通過guest_enable可以開啓vsftpd的虛擬賬戶功能,guest_username用來指定本地賬戶的虛擬映射名稱。

vsftpd有兩個文件(黑名單文件與白名單文件)可以對用戶進行ACL控制,/etc/vsftpd/ftpusers,默認是一個黑名單文件。/etc/vsftpd/user_list文件會根據主配置文件中配置項設定的不同,而成爲黑名單文件或白名單文件。此外。也可以禁用該文件。主配置文件中的userlist_enable決定了是否啓用user_list文件,如果啓用,還需要根據userlist_deny來決定該文件是黑名單還是白名單文件,如果user_deny=YES則該文件爲黑名單,如果user_deny=NO,則該文件爲白名單。需要注意的是,黑名單表示僅拒絕名單中的賬戶訪問FTP,也就是其他所有的賬戶默認允許訪問FTP。而白名單表示僅允許白名單中的賬戶訪問FTP,其他賬戶則默認拒絕訪問FTP

 

4.3.5 vsftpd應用案例

案例1:虛擬賬戶FTP,滿足大量賬戶的訪問需求

vsftpd虛擬賬戶的數據需要保存在Berkeley DB格式的數據文件中,所以需要安裝db4_utils工具來創建這樣的數據文件,具體步驟如下。

1)創建虛擬用戶數據庫

首先需要創建明文密碼文件,明文文件奇數行爲用戶名,偶數行爲密碼。然後使用db_load工具將其轉換爲數據庫文件,db_load工具需要通過安裝db4-utils軟件獲得,最後可以通過修改文件權限以增強數據資料的安全性。

[root@instructor ~]# yum -y install db4-utils
[root@instructor ~]# vim /etc/vsftpd/vlogin
tomcat
123456
jerry
123456
[root@instructor ~]# db_load -T -t hash -f /etc/vsftpd/vlogin /etc/vsftpd/vlogin.db
[root@instructor ~]# chmod 600 /etc/vsftpd/{vlogin,vlogin.db}

 

2)創建PAM文件,設置基於虛擬賬戶驗證

Linux一般通過PAM文件設置賬戶的驗證機制,然後通過創建新的PAM文件,使用新的數據文件進行登錄驗證,PAM文件中的db選項於指定並驗證賬戶和密碼的數據庫文件,數據庫文件無需.db的名稱後綴。注意,因爲本環境使用的是Centos6.4 64位操作系統,所以驗證模塊調用的是lib64目錄下文件。

[root@instructor ~]# vim /etc/pam.d/vsftpd.pam
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin

 

3)設置虛擬賬戶目錄共享

因爲所有的虛擬賬戶最終都需要映射到一個真實的系統用戶,所以這裏需要添加一個系統賬戶並設置家目錄,爲了進行測試,這裏複製一份測試文件。

[root@instructor ~]# useradd -s /sbin/nologin -d /home/ftp virtual
[root@instructor ~]# cp /etc/redhat-release /home/ftp/

 

4)修改主配置文件

與配置本地賬戶FTP一樣,我們需要修改vsftpd的主配置文件,使用guest_enable選項開啓虛擬賬戶功能,所有的虛擬賬戶都將被映射爲guest_username指定的一個系統真實賬戶。如果需要對虛擬賬戶進行權限設置,使用與匿名賬戶一樣的設置項即可,如anon_mkdir_write_enable=NO,就可以控制虛擬賬戶無法創建目錄。

[root@instructor ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.pam
user_config_dir=/etc/vsftpd_user_conf
user_sub_token=$USER

 

5)爲每個用戶設置獨立的共享路徑

通過在主配置文件中使用user_config_dir選項,設置一個基於賬戶的配置目錄,在該目錄下,可以創建若干個與賬戶名稱同名的文件,並在文件中爲此賬戶設置獨立的配置選項,包括權限與共享路徑等設置,這樣就可以爲每個賬戶做單獨的權限設置等操作。本例僅以tomcat爲例,其他賬戶參考模板文件即可。當然,如果你還需要對權限、限速、併發量等選項進行設置,可以參考匿名賬戶的設置選項添加至賬戶獨立的配置文件中。

[root@instructor ~]# mkdir /etc/vsftpd_user_conf
[root@instructor ~]# mkdir /home/ftp/tomcat
[root@instructor ~]# vim /etc/vsftpd_user_conf/tomcat
local_root=/home/ftp/$USER

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章