玩轉(zhuǎn)vsftpd服務(wù)器的四大高級(jí)配置
原創(chuàng)【51CTO獨(dú)家特稿】vsftpd是一個(gè)基于GPL發(fā)布的類UNIX類操作系統(tǒng)上運(yùn)行的服務(wù)器的名字(是一種守護(hù)進(jìn)程),可以運(yùn)行在諸如Linux、BSD、Solaris、HP-UX以及Irix上面。該服務(wù)器支持很多其他傳統(tǒng)的FTP服務(wù)器不支持的良好特征,本文將介紹該服務(wù)使用的一些高級(jí)配置方式。
51CTO推薦專題:vsftpd入門——安裝、配置、案例與常見問題
1、虛擬用戶使用vsftpd服務(wù)器
虛擬用戶是指在FTP服務(wù)器上擁有賬號(hào),并且該賬號(hào)只能用于文件傳輸服務(wù)的用戶,也稱作Guest用戶。該類用戶可以通過輸入賬號(hào)以及口令來進(jìn)行授權(quán)登錄。登錄入系統(tǒng)后,其登錄目錄為指定的目錄。一般情況下,該類用戶既可以下載也可以上傳文件。
vsftpd的虛擬用戶采用單獨(dú)的用戶名/口令保存方式,與系統(tǒng)賬號(hào)(passwd/shadow)分離,這大大增強(qiáng)了系統(tǒng)的安全性。vsftpd可以采用數(shù)據(jù)庫(kù)文件來保存用戶/口令,如hash;也可以將用戶/口令保存在數(shù)據(jù)庫(kù)服務(wù)器中,如MySQL等。vsftpd驗(yàn)證虛擬用戶,則采用PAM方式。由于虛擬用戶的用戶名/口令被單獨(dú)保存,因此在驗(yàn)證時(shí),vsftpd須要用一個(gè)系統(tǒng)用戶的身份來讀取數(shù)據(jù)庫(kù)文件或數(shù)據(jù)庫(kù)服務(wù)器以完成驗(yàn)證,這就是guest用戶,這正如同匿名用戶也需要有一個(gè)系統(tǒng)用戶ftp一樣。當(dāng)然,guest用戶也可以被認(rèn)為是用于映射虛擬用戶。
在虛擬用戶使用vsftpd服務(wù)器之前,要對(duì)服務(wù)器進(jìn)行配置,主要包括如下幾個(gè)步驟:
(1)生成虛擬用戶口令庫(kù)文件。
(2)配置生成vsftpd的認(rèn)證文件。
(3)建立虛擬用戶訪問所需要的目錄并且設(shè)定相應(yīng)的訪問權(quán)限。
(4)建立配置文件。
(5)重新啟動(dòng)vsftpd服務(wù)器。
下面是完成上述五個(gè)步驟的基本命令和過程,如下所示:
生成虛擬用戶口令庫(kù)文件
//生成虛擬用戶口令庫(kù)文件,按照格式編輯口令文件。單數(shù)行為用戶名,偶數(shù)行為用戶口令 #vi login.txt liyangsuper//用戶名 real//口令 patterson//用戶名 jef//口令 guest//用戶名 guest//口令 //存盤退出
配置生成vsftpd的認(rèn)證文件
//使用db_load命令生成口令庫(kù)文件 #db_load –T –t hash –f login.txt /etc/vsftpd/vsftpd_login.db //修改該口令庫(kù)文件的權(quán)限 #chmod 600 /etc/vsftpd/vsftpd_login.db //編輯虛擬用戶所需的PAM配置文件 #vi /etc/pam.d/vsftpd //在該文件中加入如下兩行,并且保存后退出 auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login.db account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login.db
建立虛擬用戶訪問所需要的目錄并且設(shè)定相應(yīng)的訪問權(quán)限
#useradd –d /home/ftp virtual #chmod 700 /home/ftp
對(duì)vsftpd的主配置文件進(jìn)行配置
//為了保證安全,首先生成該文件的一個(gè)備份,然后進(jìn)行修改 #cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak #vi /etc/vsftpd/vsftpd.conf //配置相關(guān)選項(xiàng)如下所示 listen=YES tcp_wrappers=YES //支持tcp_wrappers,限制訪問 (/etc/hosts.allow,/etc/hosts.deny) listen=YES的意思是使用standalone啟動(dòng)vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推薦使用standalone方式) anonymous_enable=NO local_enable=YES //PAM方式此處必須為YES write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO chroot_local_user=YES guest_enable=YES guest_username=vsftpd //采用虛擬用戶形式
重新啟動(dòng)vsftpd服務(wù)器
#service vsftpd restart
經(jīng)過上面幾個(gè)步驟的配置后,就可以使用虛擬用戶登錄vsftpd服務(wù)器了,如下所示:
使用創(chuàng)建的虛擬用戶liyangsuper,登錄成功:
#ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 Welcome to virtual FTP service. Name (127.0.0.1:root): liyangsuper 331 Please specify the password. Password: 230 Login successful. Have fun. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (127,0,0,1,119,210) 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Jul 09 15:26 ftp 226 Directory send OK.
能夠?yàn)g覽虛擬目錄/home/ftp里的文件和目錄
ftp> cd ftp 250 Directory successfully changed. ftp> ls 227 Entering Passive Mode (127,0,0,1,149,3) 150 Here comes the directory listing. -rw-r--r-- 1 0 0 10 Jul 09 15:26 test.c 226 Directory send OK.
測(cè)試是否能夠創(chuàng)建目錄
ftp> mkdir super 550 Permission denied.//操作被禁止 ftp> bye 221 Goodbye.
通過以上的測(cè)試可以知道,系統(tǒng)關(guān)于虛擬用戶的默認(rèn)用戶權(quán)限與匿名用戶的用戶權(quán)限一致,都只有瀏覽以及下載的權(quán)限,而不具有上傳和創(chuàng)建目錄等寫操作權(quán)限。
#p#
2、配置vsftpd服務(wù)器中chroot
在vsftpd服務(wù)器的默認(rèn)設(shè)置中,本地用戶可以切換到主目錄以外的目錄進(jìn)行瀏覽訪問,這樣對(duì)于服務(wù)器來說是不太安全的,因?yàn)槿魏斡脩艨梢噪S時(shí)瀏覽到別的用戶的私有信息,下面介紹如何使用chroot選項(xiàng)來防止這種情況的發(fā)生。
與該功能相關(guān)的選項(xiàng)主要包括:
- chroot_local_user
- chroot_list_enable
- chroot_list_file
可以通過如下兩種方法來設(shè)置chroot,從而杜絕上述不安全的情況發(fā)生:
(1)設(shè)置所有的本地用戶執(zhí)行chroot,只要將/etc/vsftpd/vsftpd.con文件中的chroot_local_ user值置為YES,即chroot_local_user=YES。
(2)設(shè)置指定的用戶執(zhí)行chroot,按照如下方法進(jìn)行設(shè)置:
chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
設(shè)置后,只有/etc/vsftpd.chroot_list文件中指定的用戶才能夠執(zhí)行chroot命令。
3、配置vsftpd服務(wù)器在非標(biāo)準(zhǔn)端口工作
在使用FTP服務(wù)的過程中,可以使該服務(wù)在非標(biāo)準(zhǔn)端口(非21端口)工作,不過要完成這項(xiàng)工作,須要使vsftpd服務(wù)器運(yùn)行在獨(dú)立啟動(dòng)方式下,而且要配置vsftpd的主配置文件/etc/vsftpd/vsftpd.conf,將listen_port=10003或者是其他端口號(hào)的選項(xiàng)加入該文件即可,然后要重新啟動(dòng)vsftpd守護(hù)進(jìn)程:
#service vsftpd restart
下面是對(duì)該功能進(jìn)行實(shí)例驗(yàn)證:
使用匿名用戶登錄到服務(wù)器的10003端口,成功:
#ftp 127.0.0.1 10003 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 1.1.3) Name (127.0.0.1:root): anonymous 331 Please specify the password. Password: 230 Login successful. Have fun. Remote system type is UNIX. Using binary mode to transfer files. ftp> bye 221 Goodbye.
測(cè)試以前使用的21端口,該端口已經(jīng)不再有用:
# ftp 127.0.0.1 ftp: connect: Connection refused
#p#
4、配置虛擬FTP服務(wù)器
所謂虛擬FTP服務(wù)器,是指一臺(tái)機(jī)器上有多個(gè)IP地址,并且可以向外提供多FTP服務(wù),這些服務(wù)器在邏輯上是獨(dú)立的,有不同的訪問控制表和不同的下載內(nèi)容。
配置虛擬FTP服務(wù)器的步驟如下所示:
(1)為一個(gè)服務(wù)器配置多個(gè)IP地址。假設(shè)原來的主機(jī)內(nèi)部地址為210.77.27.222,可再綁定一個(gè)IP地址如下:
向接口添加一個(gè)新的IP210.77.27.223
#/sbin/ifconfig eth0:0 210.77.27.223 up
(2)創(chuàng)建虛擬FTP服務(wù)器的根目錄,并確保/var/newftp和/var/newftp/pub目錄的擁有者和組均為root,掩碼為755。
#mkdir -p /var/newftp/pub #chmod 755 /var/newftp #chmod 755 /var/new/ftp/pub
(3)增加虛擬FTP服務(wù)器的匿名用戶賬號(hào)。原先的FTP服務(wù)器使用系統(tǒng)用戶ftp作為其匿名用戶賬號(hào)。需要增加一個(gè)newftp用于虛擬FTP服務(wù)器。
useradd -d /var/newftp -M newftp
(4)創(chuàng)建虛擬FTP服務(wù)器的配置文件。復(fù)制原來的vsftpd.conf作為虛擬FTP服務(wù)器的配置文件,并修改相關(guān)參數(shù)。
#cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd2.conf
新添或修改以下參數(shù):
listen=YES listen_address=210.77.27.223 ftp_username=newftp
此處需要特別注意:由于vsftpd默認(rèn)是監(jiān)聽所有的IP地址,當(dāng)設(shè)定基于IP的虛擬FTP服務(wù)器時(shí),為防止原來的FTP服務(wù)器與虛擬FTP服務(wù)器發(fā)生監(jiān)聽上的沖突,原FTP服務(wù)器須要指定監(jiān)聽的IP地址。在這里,原來的配置文件中就要設(shè)置listen_address=//向接口添加一個(gè)新的IP210.77.27.222。
(5)啟動(dòng)和測(cè)試虛擬FTP服務(wù)器。
可以使用命令同時(shí)啟動(dòng)或關(guān)閉原FTP服務(wù)器和新加的虛擬FTP服務(wù)器,如下:
#service vsftpd restart Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd2: [ OK ] Starting vsftpd for vsftpd: [ OK ]
啟動(dòng)成功后,就可以對(duì)該虛擬服務(wù)器登錄進(jìn)行測(cè)試,如下面所示:
測(cè)試以127.0.0.1登錄:
# ftp 127.0.0.1 ftp: connect: Connection refused ftp> bye //測(cè)試失敗,因?yàn)樵摲?wù)器具有兩個(gè)不同的IP
連接原來的FTP服務(wù)器,其IP地址為210.77.27.222,端口號(hào)為10003:
# ftp 210.77.27.222 10003 Connected to 210.77.27.222 (210.77.27.222). 220 Welcome to virtual FTP service.
使用匿名用戶登錄,成功:
Name (210.77.27.222:root): anonymous 331 Please specify the password. Password: 230 Login successful. Have fun. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (210,77,27,222,51,224) 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Jul 09 15:26 pub 226 Directory send OK. ftp> cd pub 250 Directory successfully changed. ftp> ls 227 Entering Passive Mode (210,77,27,222,223,123) 150 Here comes the directory listing. -rw-r--r-- 1 0 0 10 Jul 09 15:26 test.c 226 Directory send OK. ftp> bye 221 Goodbye.
連接虛擬FTP服務(wù)器,其IP地址為210.77.27.223,端口號(hào)為10004:
# ftp 210.77.27.223 10004 Connected to 210.77.27.223 (210.77.27.223). 220 Welcome to virtual FTP service.
使用匿名用戶登錄,成功:
Name (210.77.27.223:root): anonymous 331 Please specify the password. Password: 230 Login successful. Have fun. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (210,77,27,223,102,119) 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Jul 10 13:23 pub 226 Directory send OK.
進(jìn)入該登錄文件夾:
ftp> cd pub 250 Directory successfully changed. ftp> ls //由于該虛擬服務(wù)器沒有加入任何文件,所以ls結(jié)果為空 227 Entering Passive Mode (210,77,27,223,170,40) 150 Here comes the directory listing. 226 Directory send OK. ftp> bye 221 Goodbye.
作者簡(jiǎn)介:李洋,博士畢業(yè)于中科院計(jì)算所。10多年來一直從事計(jì)算機(jī)網(wǎng)絡(luò)信息安全研發(fā)工作,曾主持和參與多項(xiàng)國(guó)家重點(diǎn)項(xiàng)目以及信息安全系統(tǒng)和企業(yè)信息安全系統(tǒng)的研發(fā)工作。具有Linux系統(tǒng)應(yīng)用、管理、安全及內(nèi)核的研發(fā)經(jīng)驗(yàn),擅長(zhǎng)網(wǎng)絡(luò)安全技術(shù)、協(xié)議分析、Linux系統(tǒng)安全技術(shù)、Linux系統(tǒng)及網(wǎng)絡(luò)管理、Linux內(nèi)核開發(fā)等。
【51CTO.com獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明原文作者和出處。】
【編輯推薦】