FTP協(xié)議的安全隱患不能成為拒絕使用FTP的原因,本文介紹一種構(gòu)建安全FTP服務(wù)的方法。
文件傳輸協(xié)議(FTP)是互聯(lián)網(wǎng)上用戶使用頻率很高的一種協(xié)議,它基于客戶機/服務(wù)器(client/server)架構(gòu),主要用來提供用戶的文件傳輸以及上傳下載功能。然而,由于該協(xié)議在最初的設(shè)計過程當(dāng)中沒有充分考慮到網(wǎng)絡(luò)日益發(fā)展的今天可能存在的諸多安全性問題,因而存在著很大的安全隱患。本文將對該文件傳輸協(xié)議進行原理介紹,并講述如何在Linux環(huán)境下,使用vsftpd(very secure FTP daemon)來構(gòu)建安全的FTP應(yīng)用。
vsftpd的特性
vsftpd 是一個基于GPL發(fā)布的類Unix類操作系統(tǒng)上運行的服務(wù)器的名字(是一種守護進程),它可以運行在諸如Linux、BSD、Solaris、HP-UX以及IRIX上面。它支持很多其他傳統(tǒng)的FTP服務(wù)器所不支持的特征。它具有如下特點:非常高的安全性、帶寬限制、良好的擴展性 、支持創(chuàng)建虛擬用戶、支持IPv6、支持虛擬IP、高速、穩(wěn)定。
vsftpd的名字代表“very secure FTP daemon”,它的開發(fā)者Chris Evans考慮的首要問題就是數(shù)據(jù)傳輸?shù)陌踩?。所以,在上述所有的特性?dāng)中,較高的安全性是處于最重要的地位。vsftpd比其他諸如Wu-ftpd和Proftpd之類的FTP服務(wù)器更加優(yōu)越。另外,在速度方面,據(jù)統(tǒng)計,使用ASCⅡ模式下載數(shù)據(jù)的速度是Wu-ftpd的兩倍。在Linux2.4系列版本的內(nèi)核下,千兆以太網(wǎng)的下載速度可以達到86MB/S;在穩(wěn)定性方面,根據(jù)ftp.redhat.com的數(shù)據(jù),它可以支持15000個并發(fā)用戶,所以其總體性能也是非常高的。
vsftpd的安裝過程
vsftpd 守護程序的安裝相當(dāng)簡單,在每個主要發(fā)行版中都可以找到vsftpd的RPM包,很多情況下,它已經(jīng)被裝上了。如果沒有的話,源代碼可以在網(wǎng)站:http://vsftpd.beasts.org/上找到,下載后執(zhí)行手工安裝。目前最新的版本為:vsftpd2.0.3。
得到源代碼并解開tar包后,進入新建的目錄,并運行make。下面是進行手工安裝的示例:
# tar xzvf vsftpd-2.0.3.tar.gz
# cd vsftpd-2.0.3
# make
這之前我們應(yīng)該看看用戶“nobody”和目錄“/usr/share/empty”是否存在,如果需要的話我們就新建這一對用戶和目錄。如果我們允許用戶匿名訪問,用戶“ftp”和目錄“var/ftp”也需要創(chuàng)建。使用如下兩個命令完成:
# mkdir /var/ftp
# useradd -d /var/ftp ftp
由于安全原因,目錄 “/var/ftp” 不應(yīng)該屬于用戶 “ftp”,也不應(yīng)該有寫權(quán)限。如果用戶已經(jīng)存在的話,用下面的兩個命令,我們可以改變目錄的所有者并去掉其他用戶的寫權(quán)限:
# chown root.root /var/ftp
# chmod og-w /var/ftp
達到了所有的先決條件后,我們可以安裝 vsftp-daemon 了。
# make install
這樣,就完成了vsftpd的安裝,當(dāng)然,這個安裝過程比較復(fù)雜,在我們現(xiàn)在使用的Linux系統(tǒng)當(dāng)中,很多都是使用RPM包來安裝的,這樣簡單快捷,下面介紹如何通過使用RPM包來安裝vsftpd。
在RedHat Linux9中自帶了vsftpd,下面是安裝的步驟:
1. 首先查看是否安裝了vsftpd,如果已經(jīng)安裝,則可以直接使用。
# rpm - q|grep vsftpd
2. 沒有安裝的話,將下載來的vsftpd-1.1.3-8.i386.rpm的RPM包進行安裝。
# rpm - vh vsftpd-1.1.3-8.i386.rpm
通過以上兩步,就能順利地完成安裝過程。
配置文件介紹
配置文件的路徑為 /etc/vsftpd.conf。和Linux系統(tǒng)中的大多數(shù)配置文件一樣,vsftpd的配置文件中以#開始注釋,下面對配置文件的重要內(nèi)容選項進行詳細的介紹,合理的使用配置文件是保證FTP安全傳輸?shù)那疤帷?/p>
查看配置文件:
#vi /etc/vsftpd.conf
設(shè)置是否允許匿名訪問:
# Anonymus FTP-access permitted? YES/NO
anonymous_enable=NO
設(shè)置是否允許匿名上傳文件:
# Permit anonymus upload? YES/NO
anon_upload_enable=NO
設(shè)置是否運允許匿名建立目錄:
# Permission for anonymus users to make new directories? YES/NO
anon_mkdir_write_enable=NO
設(shè)置是否允許匿名用戶進行刪除或者改名等操作:
# Permission for anonymus users to do other write operations - like renaming or deleting? YES/NO
anon_other_write_enable=NO
設(shè)置是否允許本地用戶登錄:
# Log on by local users permitted? YES/NO
local_enable=YES
設(shè)置是否將本地用戶鎖定在主目錄:
# Shall local users be locked into their home directory? YES/NO
chroot_local_user=YES
設(shè)置最高傳輸速度:
# Highest permitted data transfer rate in bytes per second for local logged on users. Default = 0 (unlimited)
local_max_rate=7200
設(shè)置是否允許通常的寫操作:
# General write permission? YES/NO
write_enable=YES
設(shè)置是否在改變目錄后發(fā)送消息:
# Enable messages when changing directories? YES/NO
dirmessage_enable=YES
設(shè)置服務(wù)器向登錄客戶端發(fā)送的歡迎信息:
# Welcome banner at users logon.
ftpd_banner="Welcome to neo5k's FTP service."
設(shè)置是否激活日志功能:
# Activate logging? YES/NO
xferlog_enable=YES
設(shè)置是否對所有的FTP操作作日志,如果設(shè)置是,則可能產(chǎn)生巨大的數(shù)據(jù):
# Logging of all FTP activities? YES/NO
# Careful! This can generate large quantities of data.
log_ftp_protocol=NO
設(shè)置是否只允許在端口20建立連接:
# Confirm connections are established on port 20 (ftp data) only. YES/NO
connect_from_port_20=YES
設(shè)置無任何操作的超時時間:
# Timeout during idle sessions
idle_session_timeout=600
設(shè)置數(shù)據(jù)連接的超時時間:
# Data connection timeout
data_connection_timeout=120
設(shè)置訪問所使用的PAM:
# Access through Pluggable Authentication Modules (PAM)
pam_service_name=vsftpd
設(shè)置工作模式是否為獨立模式:
# Standalone operation? YES/NO - depending on operation mode (inetd, xinetd, Standalone)
# The author's FTP service is being startet with xinetd, therefore the value here is NO.
listen=YES
設(shè)置是否使用tcp_wrappers作為主機訪問控制方式:
tcp_wrappers =YES
啟動 FTP 服務(wù)
啟動vsftpd可以采用三種方式:inetd、xinetd和standalone(獨立)工作模式。由于目前使用的xinetd擴展了inetd,它比inetd更加高效和實用,包括諸如請求記錄、訪問控制、將業(yè)務(wù)與網(wǎng)絡(luò)接口綁定等改進,所以通常使用xinetd,本文將介紹xinetd以及standalone兩種啟動方式。
1. xinetd方式啟動
使用該啟動方式,在上述的配置文件當(dāng)中,應(yīng)該將listen=YES設(shè)為list=NO,并且將tcp_wrappers=YES設(shè)為tcp_wrappers=NO,并且使用如下命令將vsftpd的文檔目錄拷貝到/etc/xinetd.d目錄下:
# cp /usr/share/doc/vsftpd-1.1.3/vsftpd.xinetd /etc/xinetd.d/vsftpd
# vi /etc/xinetd.d/vsftpd
將disable=yes設(shè)為disable=no即可。一個關(guān)于該啟動方式的的配置文件如下所示:
# cat /etc/xinetd.d/vsftpd
# default: on
# description: The vsftpd FTP server serves FTP connections. It uses
# normal, unencrypted usernames and passwords for authentication.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
nice = 10
disable = no
flags = IPv4
}
現(xiàn)在,就可以使用如下命令來啟動vsftpd了。
停止獨立運行的vsftpd:
# service vsftpd stop
重新啟動xinetd守護進程:
# service xinetd restart
另外一點需要說明的是:如果想在系統(tǒng)啟動時就自動運行該服務(wù),那么需要使用setup命令,在網(wǎng)絡(luò)服務(wù)配置的項目中,選中vsftpd守護進程即可。
2. 獨立工作模式啟動
vsftpd也可以工作在獨立工作模式下。這樣,我們需要再次打開“/etc/vsftpd.conf”做如下修改:
# Shall the vsftp daemon run in standalone ope
4>重啟vsftp服務(wù)
$ /etc/init.d/vsftpd restart