在網站的建設中,F(xiàn)TP是一項重要的服務,利用它可以更容易分享有限的軟件資源。Linux下有代表性的FTP服務器軟件是Wu-FTP、ProFTP及vsftpd。Wu-FTP(Washington University FTP)是由美國華盛頓大學開發(fā)的、以效率和穩(wěn)定性為參考量的FTP軟件。它的功能強大,配置較復雜,由于開發(fā)時間較早,應用十分廣泛,也因此成為黑客們主要的攻擊目標。Wu-FTP的早期各級版本不斷出現(xiàn)安全漏洞,系統(tǒng)管理員不得不因安全因素而經常對其進行升級。ProFTP針對Wu-FTP的弱項而開發(fā),除了在安全性方面進行了改進外,還具備設置簡單的特點,并提供了一些Wu-FTP沒有的功能,大大簡化了架設和管理FTP服務器的工作。vsftpd則憑借在安全性方面的出色表現(xiàn),被很多大型網站廣為采用。 關鍵詞標簽:服務器,安全,用戶,文件
vsftpd簡介
vsftpd在安全性、高性能及穩(wěn)定性三個方面有上佳的表現(xiàn)。它提供的主要功能包括虛擬IP設置、虛擬用戶、Standalone、inetd操作模式、強大的單用戶設置能力及帶寬限流等。在安全方面,它從原理上修補了大多數(shù)Wu-FTP、ProFTP,乃至BSD-FTP的安裝缺陷,使用安全編碼技術解決了緩沖溢出問題,并能有效避免"globbing"類型的拒絕服務攻擊。目前正在使用vsftpd的官方網站有Red Hat、SuSE、Debian、GNU、GNOME、KDE、Gimp和OpenBSD等。
安裝
本文以1.1.3版本為例進行介紹(這是2002年11月9日發(fā)布的最新正式發(fā)行版本)。下載地址為ftp://vsftpd.beasts.org/users/cevans/。
1.構建vsftpd
首先解壓縮包,代碼如下:
$ tar xzvf vsftpd-1.1.3.tar.gz
進入安裝目錄cd vsftpd-1.1.3。如果想在以后使用中啟用tcp_wrapper功能,可在編譯前修改"builddefs.h"文件中的語句,將"#undef VSF_BUILD_TCPWRAPPERS"改為"#define VSF_BUILD_TCPWRAPPERS"。tcp_wrapper功能主要應用于IP管理控制,比如可以為單獨的一個IP地址使用特殊優(yōu)先的FTP配置文件。然后,鍵入"make"生成一份可執(zhí)行二進制程序代碼。
2.前期準備
vsftpd的默認配置中需要用戶"nobody"。添加該用戶命令如下:
$ useradd nobody
vsftpd的默認配置中需要目錄"/usr/share/empty"。添加該目錄的命令如下:
$ mkdir /usr/share/empty/
匿名FTP需要用戶"ftp"的存在,并有一個有效的主目錄(不允許用戶"ftp"有擁有權和可寫權)。如沒有此目錄則建立它,命令如下:
$ mkdir /var/ftp/
$ useradd -d /var/ftp ftp
3.安裝相關配置文件、執(zhí)行文件、幫助手冊頁等
運行"make install",將源代碼、幫助手冊頁等復制到相關路徑。如果采用手工復制,命令如下:
$ cp vsftpd /usr/local/sbin/vsftpd
$ cp vsftpd.conf.5 /usr/local/man/man5
$ cp vsftpd.8 /usr/local/man/man8
另外,"make install"不能復制樣例配置文件,建議手工復制,命令如下:
$ cp vsftpd.conf /etc
整個安裝過程很簡單,下面來看看如何操縱vsftpd的強大功能,進行vsftpd.conf文件的配置。
兩種運行模式
像其它守護程序一樣,vsftpd提供了standalone和inetd(inetd或xinetd)兩種運行模式。簡單解釋一下,standalone一次性啟動,運行期間一直駐留在內存中,優(yōu)點是對接入信號反應快,缺點是損耗了一定的系統(tǒng)資源,因此經常應用于對實時反應要求較高的專業(yè)FTP服務器。inetd恰恰相反,由于只在外部連接發(fā)送請求時才調用FTP進程,因此不適合應用在同時連接數(shù)量較多的系統(tǒng)。此外,inetd模式不占用系統(tǒng)資源。除了反應速度和占用資源兩方面的影響外,vsftpd還提供了一些額外的高級功能,如inetd模式支持per_IP(單一IP)限制,而standalone模式則更有利于PAM驗證功能的應用。
1.inetd運行模式
從某種inetd運行vsftpd可以提供一種不錯的功能——per_IP連接限制。這也是vsftpd 1.1.3版本最新推出并推薦的一種運行模式。實現(xiàn)per_IP連接限制要依賴于vsftpd提供的tcp_wrappers支持。如果使用標準的"inetd",需編輯/etc/inetd.conf文件,并添加下面一行代碼:
$ ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd
確保刪除或注釋掉任何原存的FTP服務語句行。假如沒有安裝tcp_wrappers,或不需要使用它,可去掉"/usr/sbin/tcpd"部分。然后重載配置文件,命令如下:
$ kill -SIGHUP 'pidof inetd'
大多數(shù)較新的系統(tǒng)采用的是xinetd超級服務守護進程。使用"vi /etc/xinetd.d/vsftpd" 看一下它的內容,如下:
disable = no
socket_type = stream
wait = no
# 這表示設備是激活的,它正在使用標準的TCP Sockets。
user = root
server = /usr/local/sbin/vsftpd
# 說明服務程序/usr/local/sbin/vsftpd已被用來控制FTP接入請求,并且該程序是作為root身份運行的(可能瞬間擁有過大的特權)。請確信已經把vsftpd二進制執(zhí)行代碼安裝在了"/usr/local/sbin"目錄下。
per_source = 5
instances? = 200
# 由于安全原因,從一個單一IP地址聯(lián)入的最大允許數(shù)值是5。當前最大連接總數(shù)是200。
no_access? = 192.168.1.3
# 地址192.168.1.3將被拒絕訪問。
banner_fail = /etc/vsftpd.busy_banner
# 顯示給用戶當連接被禁止時的文件。不論因任何原因而被拒絕(太多用戶,IP被禁止)。
下面一行是產生的例子:
echo "421 Server busy, please try later." > /etc/vsftpd.busy_banner
log_on_success? += PID HOST DURATION
log_on_failure? += HOST
這將按照時間順序日志所有嘗試連接的IP地址,無論連接成功與否。假如連接啟動了一個FTP服務,其進程ID和使用期也將被載入日志。如果使用的是Red Hat,這個日志信息將出現(xiàn)在/var/log/secure文件中。
最后,重啟xinetd,命令如下:
$ /etc/rc.d/init.d/xinetd restart
需要注意的是,"/etc/xinetd.d"目錄中僅能開啟一個FTP服務。
2.standalone模式
standalone模式便于實現(xiàn)PAM驗證功能。進入這種模式首先要關閉xinetd下的vsftpd,設置"disable = yes",或者注銷掉"/etc/inetd.conf"中相應的行。然后修改"/etc/vsftpd.conf"中的選項為"listen=YES"。
配置vsftpd.conf
下面來了解一下核心配置文件vsftpd.conf。它的地址為"/etc/vsftpd.conf",控制語句格式為"語句=值",注意不要在格式間加入任何空格和標點符號。man手冊頁中把控制語句分為布爾類(值為YES或NO)、數(shù)字類(值為數(shù)字)和字符串類(值為字符串)三種。為了管理方便、思路清晰,按照訪問權(Access rights)、安全(Security)、功能(Features)和性能(Performance)分成四大類。下面是一個樣本配置文件內容,用來說明常用的控制語句:
# Access rights
anonymous_enable=YES?
/*若不想啟用匿名訪問請修改值為NO*/
local_enable=NO?
/*關閉本地用戶登陸服務,指所有非匿名用戶*/
write_enable=NO?
/*關閉任何用戶的寫權限*/
anon_upload_enable=NO?
/*關閉匿名用戶上傳數(shù)據(jù)的能力*/
anon_mkdir_write_enable=NO?
/*關閉匿名用戶建立目錄的能力*/
anon_other_write_enable=NO?
/*關閉匿名用戶執(zhí)行建立和上傳之外的寫入類命令的操作,比如更
改名字和刪除操作的能力*/
# Security
anon_world_readable_only=YES?
/*開啟匿名用戶只能使用許可權為全部可讀的資源*/
connect_from_port_20=YES?
/*從標準端口20觸發(fā)連接*/
hide_ids=YES?
/*隱藏FTP服務器中用戶的ID,用"FTP"取代*/
pasv_min_port=50000?
pasv_max_port=60000?
/*設置pasv傳輸模式下的端口范圍為50000-60000*/
# Features
xferlog_enable=YES?
/*開啟日志,記錄傳輸狀態(tài)到文件/var/log/vsftpd.log*/
ls_recurse_enable=NO?
/*關閉"ls -R"命令,該命令常被用于DoS攻擊,非常浪費系統(tǒng)資源,
但"mirror"鏡像工具會用到它*/
ascii_download_enable=NO?
/*關閉ASCII模式下載,防止被用于DoS攻擊,ASCII下載很消耗CPU負擔*/
async_abor_enable=YES?
/*開啟支持早期FTP客戶端"async ABOR"命令的能力*/
# Porformance
one_process_model=YES?
/*開啟每個IP單一進程模式,該模式僅支持具備一定能力的內核,
比如linux kernel 2.4*/
idle_session_timeout=120?
/*踢出空閑了兩分鐘后的用戶*/
data_connection_timeout=300?
/*踢出空閑了五分鐘后的下載*/
accept_timeout=60?
/*踢出掛起了一分鐘后的passive連接*/
connect_timeout=60?
/*踢出掛起了一分鐘后的活動連接*/
anon_max_rate=50000?
/*限止單個用戶的下載速度為不超過50kbytes每秒*/
至此,一個匿名服務器已經可以正常運行了,并且進行了安全方面的設置。實際中,根據(jù)FTP
相關閱讀
熱門文章 Linux下FTP的配置與應用 什么是ftp及ftp服務器 FTP出錯解決和分析 Windows內置FTP服務器高級配置
人氣排行 vsftp配置大全---超完整版 IIS6.0打造FTP服務器完全圖文詳解 使用Win 2003搭建安全文件服務器 圖解Windows xp—FTP服務器配置 linux服務samba的詳細配置 在Windows 2003下搭建FTP服務器 FTP登陸錯誤詳解 Windows內置FTP服務器高級配置