玩轉vsftpd服務器的四大高級配置
原創【51CTO獨家特稿】vsftpd是一個基于GPL發布的類UNIX類操作系統上運行的服務器的名字(是一種守護進程),可以運行在諸如Linux、BSD、Solaris、HP-UX以及Irix上面。該服務器支持很多其他傳統的FTP服務器不支持的良好特征,本文將介紹該服務使用的一些高級配置方式。
51CTO推薦專題:vsftpd入門——安裝、配置、案例與常見問題
1、虛擬用戶使用vsftpd服務器
虛擬用戶是指在FTP服務器上擁有賬號,并且該賬號只能用于文件傳輸服務的用戶,也稱作Guest用戶。該類用戶可以通過輸入賬號以及口令來進行授權登錄。登錄入系統后,其登錄目錄為指定的目錄。一般情況下,該類用戶既可以下載也可以上傳文件。
vsftpd的虛擬用戶采用單獨的用戶名/口令保存方式,與系統賬號(passwd/shadow)分離,這大大增強了系統的安全性。vsftpd可以采用數據庫文件來保存用戶/口令,如hash;也可以將用戶/口令保存在數據庫服務器中,如MySQL等。vsftpd驗證虛擬用戶,則采用PAM方式。由于虛擬用戶的用戶名/口令被單獨保存,因此在驗證時,vsftpd須要用一個系統用戶的身份來讀取數據庫文件或數據庫服務器以完成驗證,這就是guest用戶,這正如同匿名用戶也需要有一個系統用戶ftp一樣。當然,guest用戶也可以被認為是用于映射虛擬用戶。
在虛擬用戶使用vsftpd服務器之前,要對服務器進行配置,主要包括如下幾個步驟:
(1)生成虛擬用戶口令庫文件。
(2)配置生成vsftpd的認證文件。
(3)建立虛擬用戶訪問所需要的目錄并且設定相應的訪問權限。
(4)建立配置文件。
(5)重新啟動vsftpd服務器。
下面是完成上述五個步驟的基本命令和過程,如下所示:
生成虛擬用戶口令庫文件
//生成虛擬用戶口令庫文件,按照格式編輯口令文件。單數行為用戶名,偶數行為用戶口令 #vi login.txt liyangsuper//用戶名 real//口令 patterson//用戶名 jef//口令 guest//用戶名 guest//口令 //存盤退出
配置生成vsftpd的認證文件
//使用db_load命令生成口令庫文件 #db_load –T –t hash –f login.txt /etc/vsftpd/vsftpd_login.db //修改該口令庫文件的權限 #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
建立虛擬用戶訪問所需要的目錄并且設定相應的訪問權限
#useradd –d /home/ftp virtual #chmod 700 /home/ftp
對vsftpd的主配置文件進行配置
//為了保證安全,首先生成該文件的一個備份,然后進行修改 #cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak #vi /etc/vsftpd/vsftpd.conf //配置相關選項如下所示 listen=YES tcp_wrappers=YES //支持tcp_wrappers,限制訪問 (/etc/hosts.allow,/etc/hosts.deny) listen=YES的意思是使用standalone啟動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 //采用虛擬用戶形式
重新啟動vsftpd服務器
#service vsftpd restart
經過上面幾個步驟的配置后,就可以使用虛擬用戶登錄vsftpd服務器了,如下所示:
使用創建的虛擬用戶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.
能夠瀏覽虛擬目錄/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.
測試是否能夠創建目錄
ftp> mkdir super 550 Permission denied.//操作被禁止 ftp> bye 221 Goodbye.
通過以上的測試可以知道,系統關于虛擬用戶的默認用戶權限與匿名用戶的用戶權限一致,都只有瀏覽以及下載的權限,而不具有上傳和創建目錄等寫操作權限。
#p#
2、配置vsftpd服務器中chroot
在vsftpd服務器的默認設置中,本地用戶可以切換到主目錄以外的目錄進行瀏覽訪問,這樣對于服務器來說是不太安全的,因為任何用戶可以隨時瀏覽到別的用戶的私有信息,下面介紹如何使用chroot選項來防止這種情況的發生。
與該功能相關的選項主要包括:
- chroot_local_user
- chroot_list_enable
- chroot_list_file
可以通過如下兩種方法來設置chroot,從而杜絕上述不安全的情況發生:
(1)設置所有的本地用戶執行chroot,只要將/etc/vsftpd/vsftpd.con文件中的chroot_local_ user值置為YES,即chroot_local_user=YES。
(2)設置指定的用戶執行chroot,按照如下方法進行設置:
chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
設置后,只有/etc/vsftpd.chroot_list文件中指定的用戶才能夠執行chroot命令。
3、配置vsftpd服務器在非標準端口工作
在使用FTP服務的過程中,可以使該服務在非標準端口(非21端口)工作,不過要完成這項工作,須要使vsftpd服務器運行在獨立啟動方式下,而且要配置vsftpd的主配置文件/etc/vsftpd/vsftpd.conf,將listen_port=10003或者是其他端口號的選項加入該文件即可,然后要重新啟動vsftpd守護進程:
#service vsftpd restart
下面是對該功能進行實例驗證:
使用匿名用戶登錄到服務器的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.
測試以前使用的21端口,該端口已經不再有用:
# ftp 127.0.0.1 ftp: connect: Connection refused
#p#
4、配置虛擬FTP服務器
所謂虛擬FTP服務器,是指一臺機器上有多個IP地址,并且可以向外提供多FTP服務,這些服務器在邏輯上是獨立的,有不同的訪問控制表和不同的下載內容。
配置虛擬FTP服務器的步驟如下所示:
(1)為一個服務器配置多個IP地址。假設原來的主機內部地址為210.77.27.222,可再綁定一個IP地址如下:
向接口添加一個新的IP210.77.27.223
#/sbin/ifconfig eth0:0 210.77.27.223 up
(2)創建虛擬FTP服務器的根目錄,并確保/var/newftp和/var/newftp/pub目錄的擁有者和組均為root,掩碼為755。
#mkdir -p /var/newftp/pub #chmod 755 /var/newftp #chmod 755 /var/new/ftp/pub
(3)增加虛擬FTP服務器的匿名用戶賬號。原先的FTP服務器使用系統用戶ftp作為其匿名用戶賬號。需要增加一個newftp用于虛擬FTP服務器。
useradd -d /var/newftp -M newftp
(4)創建虛擬FTP服務器的配置文件。復制原來的vsftpd.conf作為虛擬FTP服務器的配置文件,并修改相關參數。
#cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd2.conf
新添或修改以下參數:
listen=YES listen_address=210.77.27.223 ftp_username=newftp
此處需要特別注意:由于vsftpd默認是監聽所有的IP地址,當設定基于IP的虛擬FTP服務器時,為防止原來的FTP服務器與虛擬FTP服務器發生監聽上的沖突,原FTP服務器須要指定監聽的IP地址。在這里,原來的配置文件中就要設置listen_address=//向接口添加一個新的IP210.77.27.222。
(5)啟動和測試虛擬FTP服務器。
可以使用命令同時啟動或關閉原FTP服務器和新加的虛擬FTP服務器,如下:
#service vsftpd restart Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd2: [ OK ] Starting vsftpd for vsftpd: [ OK ]
啟動成功后,就可以對該虛擬服務器登錄進行測試,如下面所示:
測試以127.0.0.1登錄:
# ftp 127.0.0.1 ftp: connect: Connection refused ftp> bye //測試失敗,因為該服務器具有兩個不同的IP
連接原來的FTP服務器,其IP地址為210.77.27.222,端口號為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服務器,其IP地址為210.77.27.223,端口號為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.
進入該登錄文件夾:
ftp> cd pub 250 Directory successfully changed. ftp> ls //由于該虛擬服務器沒有加入任何文件,所以ls結果為空 227 Entering Passive Mode (210,77,27,223,170,40) 150 Here comes the directory listing. 226 Directory send OK. ftp> bye 221 Goodbye.
作者簡介:李洋,博士畢業于中科院計算所。10多年來一直從事計算機網絡信息安全研發工作,曾主持和參與多項國家重點項目以及信息安全系統和企業信息安全系統的研發工作。具有Linux系統應用、管理、安全及內核的研發經驗,擅長網絡安全技術、協議分析、Linux系統安全技術、Linux系統及網絡管理、Linux內核開發等。
【51CTO.com獨家特稿,轉載請注明原文作者和出處。】
【編輯推薦】