Linux:使用vsftpd構(gòu)建安全的FTP服務(wù)(圖)
FTP協(xié)議的安全隱患不能成為拒絕使用FTP的原因,本文介紹一種構(gòu)建安全FTP服務(wù)的方法。
文件傳輸協(xié)議(FTP)是互聯(lián)網(wǎng)上用戶使用頻率很高的一種協(xié)議,它基于客戶機(jī)/服務(wù)器(client/server)架構(gòu),主要用來(lái)提供用戶的文件傳輸以及上傳下載功能。然而,由于該協(xié)議在最初的設(shè)計(jì)過(guò)程當(dāng)中沒(méi)有充分考慮到網(wǎng)絡(luò)日益發(fā)展的今天可能存在的諸多安全性問(wèn)題,因而存在著很大的安全隱患。本文將對(duì)該文件傳輸協(xié)議進(jìn)行原理介紹,并講述如何在Linux環(huán)境下,使用vsftpd(very secure FTP daemon)來(lái)構(gòu)建安全的FTP應(yīng)用。
vsftpd的特性
vsftpd 是一個(gè)基于GPL發(fā)布的類Unix類操作系統(tǒng)上運(yùn)行的服務(wù)器的名字(是一種守護(hù)進(jìn)程),它可以運(yùn)行在諸如Linux、BSD、Solaris、HP-UX以及IRIX上面。它支持很多其他傳統(tǒng)的FTP服務(wù)器所不支持的特征。它具有如下特點(diǎn):非常高的安全性、帶寬限制、良好的擴(kuò)展性 、支持創(chuàng)建虛擬用戶、支持IPv6、支持虛擬IP、高速、穩(wěn)定。
vsftpd的名字代表“very secure FTP daemon”,它的開(kāi)發(fā)者Chris Evans考慮的首要問(wèn)題就是數(shù)據(jù)傳輸?shù)陌踩浴K?,在上述所有的特性?dāng)中,較高的安全性是處于最重要的地位。vsftpd比其他諸如Wu-ftpd和Proftpd之類的FTP服務(wù)器更加優(yōu)越。另外,在速度方面,據(jù)統(tǒng)計(jì),使用ASCⅡ模式下載數(shù)據(jù)的速度是Wu-ftpd的兩倍。在Linux2.4系列版本的內(nèi)核下,千兆以太網(wǎng)的下載速度可以達(dá)到86MB/S;在穩(wěn)定性方面,根據(jù)ftp.redhat.com的數(shù)據(jù),它可以支持15000個(gè)并發(fā)用戶,所以其總體性能也是非常高的。
vsftpd的安裝過(guò)程
vsftpd 守護(hù)程序的安裝相當(dāng)簡(jiǎn)單,在每個(gè)主要發(fā)行版中都可以找到vsftpd的RPM包,很多情況下,它已經(jīng)被裝上了。如果沒(méi)有的話,源代碼可以在網(wǎng)站:http://vsftpd.beasts.org/上找到,下載后執(zhí)行手工安裝。目前***的版本為:vsftpd2.0.3。
得到源代碼并解開(kāi)tar包后,進(jìn)入新建的目錄,并運(yùn)行make。下面是進(jìn)行手工安裝的示例:
# tar xzvf vsftpd-2.0.3.tar.gz
# cd vsftpd-2.0.3
# make
這之前我們應(yīng)該看看用戶“nobody”和目錄“/usr/share/empty”是否存在,如果需要的話我們就新建這一對(duì)用戶和目錄。如果我們?cè)试S用戶匿名訪問(wèn),用戶“ftp”和目錄“var/ftp”也需要?jiǎng)?chuàng)建。使用如下兩個(gè)命令完成:
# mkdir /var/ftp
# useradd -d /var/ftp ftp
由于安全原因,目錄 “/var/ftp” 不應(yīng)該屬于用戶 “ftp”,也不應(yīng)該有寫(xiě)權(quán)限。如果用戶已經(jīng)存在的話,用下面的兩個(gè)命令,我們可以改變目錄的所有者并去掉其他用戶的寫(xiě)權(quán)限:
# chown root.root /var/ftp
# chmod og-w /var/ftp
達(dá)到了所有的先決條件后,我們可以安裝 vsftp-daemon 了。
# make install
這樣,就完成了vsftpd的安裝,當(dāng)然,這個(gè)安裝過(guò)程比較復(fù)雜,在我們現(xiàn)在使用的Linux系統(tǒng)當(dāng)中,很多都是使用RPM包來(lái)安裝的,這樣簡(jiǎn)單快捷,下面介紹如何通過(guò)使用RPM包來(lái)安裝vsftpd。
在RedHat Linux9中自帶了vsftpd,下面是安裝的步驟:
1. 首先查看是否安裝了vsftpd,如果已經(jīng)安裝,則可以直接使用。
# rpm - q|grep vsftpd
2. 沒(méi)有安裝的話,將下載來(lái)的vsftpd-1.1.3-8.i386.rpm的RPM包進(jìn)行安裝。
# rpm - vh vsftpd-1.1.3-8.i386.rpm
通過(guò)以上兩步,就能順利地完成安裝過(guò)程。
配置文件介紹
配置文件的路徑為 /etc/vsftpd.conf。和Linux系統(tǒng)中的大多數(shù)配置文件一樣,vsftpd的配置文件中以#開(kāi)始注釋,下面對(duì)配置文件的重要內(nèi)容選項(xiàng)進(jìn)行詳細(xì)的介紹,合理的使用配置文件是保證FTP安全傳輸?shù)那疤帷?/P>
查看配置文件:
#vi /etc/vsftpd.conf
設(shè)置是否允許匿名訪問(wèn):
# Anonymus FTP-access permitted? YES/NO
anonymous_enable=NO
設(shè)置是否允許匿名上傳文件:
# Permit anonymus upload? YES/NO
anon_upload_enable=NO
設(shè)置是否運(yùn)允許匿名建立目錄:
# Permission for anonymus users to make new directories? YES/NO
anon_mkdir_write_enable=NO
設(shè)置是否允許匿名用戶進(jìn)行刪除或者改名等操作:
# 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è)置是否允許通常的寫(xiě)操作:
# 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è)置是否對(duì)所有的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è)置無(wú)任何操作的超時(shí)時(shí)間:
# Timeout during idle sessions
idle_session_timeout=600
設(shè)置數(shù)據(jù)連接的超時(shí)時(shí)間:
# Data connection timeout
data_connection_timeout=120
設(shè)置訪問(wèn)所使用的PAM:
# Access through Pluggable Authentication Modules (PAM)
pam_service_name=vsftpd
設(shè)置工作模式是否為獨(dú)立模式:
# 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作為主機(jī)訪問(wèn)控制方式:
tcp_wrappers =YES
啟動(dòng) FTP 服務(wù)
啟動(dòng)vsftpd可以采用三種方式:inetd、xinetd和standalone(獨(dú)立)工作模式。由于目前使用的xinetd擴(kuò)展了inetd,它比inetd更加高效和實(shí)用,包括諸如請(qǐng)求記錄、訪問(wèn)控制、將業(yè)務(wù)與網(wǎng)絡(luò)接口綁定等改進(jìn),所以通常使用xinetd,本文將介紹xinetd以及standalone兩種啟動(dòng)方式。
1. xinetd方式啟動(dòng)
使用該啟動(dòng)方式,在上述的配置文件當(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即可。一個(gè)關(guān)于該啟動(dòng)方式的的配置文件如下所示:
# 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)在,就可以使用如下命令來(lái)啟動(dòng)vsftpd了。
停止獨(dú)立運(yùn)行的vsftpd:
# service vsftpd stop
重新啟動(dòng)xinetd守護(hù)進(jìn)程:
# service xinetd restart
另外一點(diǎn)需要說(shuō)明的是:如果想在系統(tǒng)啟動(dòng)時(shí)就自動(dòng)運(yùn)行該服務(wù),那么需要使用setup命令,在網(wǎng)絡(luò)服務(wù)配置的項(xiàng)目中,選中vsftpd守護(hù)進(jìn)程即可。
2. 獨(dú)立工作模式啟動(dòng)
vsftpd也可以工作在獨(dú)立工作模式下。這樣,我們需要再次打開(kāi)“/etc/vsftpd.conf”做如下修改:
# Shall the vsftp daemon run in standalone ope