本章向讀者介紹企業(yè)vsftpd服務(wù)器實(shí)戰(zhàn)、匿名用戶訪問、系統(tǒng)用戶訪問及虛擬用戶實(shí)戰(zhàn)等。
1 vsftpd服務(wù)器企業(yè)實(shí)戰(zhàn)
文件傳輸協(xié)議(File Transfer Protocol,F(xiàn)TP),基于該協(xié)議FTP客戶端與服務(wù)端可以實(shí)現(xiàn)共享文件、上傳文件、下載文件。 FTP基于TCP協(xié)議生成一個(gè)虛擬的連接,主要用于控制FTP連接信息,同時(shí)再生成一個(gè)單獨(dú)的TCP連接用于FTP數(shù)據(jù)傳輸。用戶可以通過(guò)客戶端向FTP服務(wù)器端上傳、下載、刪除文件,F(xiàn)TP服務(wù)器端可以同時(shí)提供給多人共享使用。
FTP服務(wù)是Client/Server(簡(jiǎn)稱C/S)模式,基于FTP協(xié)議實(shí)現(xiàn)FTP文件對(duì)外共享及傳輸?shù)能浖Q之為FTP服務(wù)器源端,客戶端程序基于FTP協(xié)議,則稱之為FTP客戶端,F(xiàn)TP客戶端可以向FTP服務(wù)器上傳、下載文件。
1.1 FTP傳輸模式
FTP基于C/S模式,F(xiàn)TP客戶端與服務(wù)器端有兩種傳輸模式,分別是FTP主動(dòng)模式、FTP被動(dòng)模式,主被動(dòng)模式均是以FTP服務(wù)器端為參照。主被動(dòng)模式如圖(a)、(b)所示,主被動(dòng)模式詳細(xì)區(qū)別如下:
- FTP主動(dòng)模式:客戶端從一個(gè)任意的端口N(N>1024)連接到FTP服務(wù)器的port 21命令端口,客戶端開始監(jiān)聽端口N+1,并發(fā)送FTP命令“port N+1”到FTP服務(wù)器,F(xiàn)TP服務(wù)器以數(shù)據(jù)端口(20)連接到客戶端指定的數(shù)據(jù)端口(N+1)。
- FTP被動(dòng)模式:客戶端從一個(gè)任意的端口N(N>1024)連接到FTP服務(wù)器的port 21命令端口,客戶端開始監(jiān)聽端口N+1,客戶端提交 PASV命令,服務(wù)器會(huì)開啟一個(gè)任意的端口(P >1024),并發(fā)送PORT P命令給客戶端??蛻舳税l(fā)起從本地端口N+1到服務(wù)器的端口P的連接用來(lái)傳送數(shù)據(jù)。
在企業(yè)實(shí)際環(huán)境中,如果FTP客戶端與FTP服務(wù)端均開放防火墻,F(xiàn)TP需以主動(dòng)模式工作,這樣只需要在FTP服務(wù)器端防火墻規(guī)則中,開放20、21端口即可。關(guān)于防火墻配置后面章節(jié)會(huì)講解。

圖1-1(a) FTP主動(dòng)模式

圖1-1(b) FTP被動(dòng)模式
1.2 vsftpd服務(wù)器安裝配置
vsftpd服務(wù)器端安裝有兩種方法,一是基于YUM方式安裝,而是基于源碼編譯安裝,最終實(shí)現(xiàn)效果完全一致,本文采用yum安裝vsftpd,步驟如下:
1.2.1 yum安裝vsftpd
在命令行執(zhí)行如下命令
# yum install vsftpd* -y

圖1-2 yum安裝vsftpd
1.2.2 檢查vsftpd安裝后的配置文件路徑
# rpm -ql vsftpd|more

圖1-3 檢查vsftpd安裝后的配置文件路徑
1.2.3 啟動(dòng)vsftpd服務(wù)
# systemctl restart vsftpd.service

圖1-4 啟動(dòng)vsftpd服務(wù)
1.2.4 查看進(jìn)程是否啟動(dòng)
# ps -ef |grep vsftpd

圖1-5 查看vsftp進(jìn)程
1.2.5 vsftpd.conf默認(rèn)配置文件詳解
anonymous_enable=YES 開啟匿名用戶訪問;
local_enable=YES 啟用本地系統(tǒng)用戶訪問;
write_enable=YES 本地系統(tǒng)用戶寫入權(quán)限;
local_umask=022 本地用戶創(chuàng)建文件及目錄默認(rèn)權(quán)限掩碼;
dirmessage_enable=YES 打印目錄顯示信息,通常用于用戶第一次訪問目錄時(shí),信息提示;
xferlog_enable=YES 啟用上傳/下載日志記錄;
connect_from_port_20=YES FTP使用20端口進(jìn)行數(shù)據(jù)傳輸;
xferlog_std_format=YES 日志文件將根據(jù)xferlog的標(biāo)準(zhǔn)格式寫入;
listen=NO vsftpd不以獨(dú)立的服務(wù)啟動(dòng),通過(guò)xinetd服務(wù)管理,建議改成YES;
listen_ipv6=YES 啟用IPV6監(jiān)聽;
pam_service_name=vsftpd 登錄FTP服務(wù)器,依據(jù)/etc/pam.d/vsftpd中內(nèi)容進(jìn)行認(rèn)證;
userlist_enable=YES vsftpd.user_list和ftpusers配置文件里用戶禁止訪問FTP;
tcp_wrappers=YES 設(shè)置vsftpd與tcp wrapper結(jié)合進(jìn)行主機(jī)的訪問控制,vsftpd服務(wù)器檢查/etc/hosts.allow 和/etc/hosts.deny中的設(shè)置,來(lái)決定請(qǐng)求連接的主機(jī),是否允許訪問該FTP服務(wù)器。
1.2.6 通過(guò)Windows客戶端資源管理器訪問Vsftp服務(wù)器端
ftp://192.168.1.181

圖1-6 匿名用戶訪問FTP默認(rèn)目錄
1.2.7 FTP設(shè)置為被動(dòng)模式使用端口方法
FTP主被動(dòng)模式,默認(rèn)為主動(dòng)模式,設(shè)置為被動(dòng)模式使用端口方法如下:
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100
1.3 vsftpd服務(wù)器簡(jiǎn)介
目前主流的FTP服務(wù)器軟件包括:vsftpd、ProFTPD、PureFTPd、Wuftpd、Server-U FTP、 FileZilla Server等軟件,其中Unix/Linux使用較為廣泛的FTP服務(wù)器軟件為vsftpd 。
非常安全的FTP服務(wù)進(jìn)程(Very Secure FTP daemon,vsftpd),vsftpd在Unix/Linux發(fā)行版中最主流的FTP服務(wù)器程序,優(yōu)點(diǎn)小巧輕快,安全易用、穩(wěn)定高效、滿足企業(yè)跨部門、多用戶的使用(1000用戶)等。
vsftpd基于GPL開源協(xié)議發(fā)布,在中小企業(yè)中得到廣泛的應(yīng)用,vsftpd可以快速上手,基于vsftpd虛擬用戶方式,訪問驗(yàn)證更加安全。vsftpd還可以基于MYSQL數(shù)據(jù)庫(kù)做安全驗(yàn)證,多重安全防護(hù)。
1.4 FTP客戶端簡(jiǎn)介
windows和Linux系統(tǒng)默認(rèn)都自帶有ftp命令程序,可以連接到FTP服務(wù)器進(jìn)行交互式的上傳,下載通信。除此以外,還有大量的圖形化FTP客戶端工具。
windows中常用FTP客戶端軟件包括CuteFTP、FlashFXP、LeapFTP、Filezilla等。
1.5 vsftpd匿名用戶配置
vsftpd默認(rèn)以匿名用戶訪問,匿名用戶默認(rèn)訪問的FTP服務(wù)器路徑為:/var/ftp/pub,匿名用戶只有查看權(quán)限,無(wú)法創(chuàng)建、刪除、修改。如需關(guān)閉FTP匿名用戶訪問,需修改配置文件/etc/vsftpd/vsftpd.conf,將anonymous_enable=YES修改為anonymous_enable=NO,重啟vsftpd服務(wù)即可。
1、設(shè)置允許匿名用戶能夠上傳、下載、刪除文件
如果允許匿名用戶能夠上傳、下載、刪除文件,需在/etc/vsftpd/vsftpd.conf配置文件中加入如下:
anon_upload_enable=YES 允許匿名用戶上傳文件;
anon_mkdir_write_enable=YES 允許匿名用戶創(chuàng)建目錄;
匿名用戶完整vsftpd.conf配置文件如下:
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
2、修改目錄權(quán)限
由于默認(rèn)vsftpd匿名用戶有兩種:anonymous、ftp,所以匿名用戶如果需要上傳文件、刪除及修改等權(quán)限,需要ftp用戶對(duì)/var/ftp/pub目錄有寫入權(quán)限,使用如下chown和chmod任意一種即可,設(shè)置命令如下:
方法一:
# chown -R ftp /var/ftp/pub
方法二:
# chmod o+w /var/ftp/pub

圖1-6 (a)更改/var/ftp/pub目錄屬主

圖1-6(b)更改/var/ftp/pub目錄寫入權(quán)限
如上vsftpd.conf配置文件配置完畢,同時(shí)權(quán)限設(shè)置完
4、重啟vsftpd服務(wù)
# systemctl restart vsftpd.service

5、通過(guò)Windows客戶端訪問,能夠上傳文件、刪除文件、創(chuàng)建目錄等操作,如圖1-7所示:

圖1-7 匿名用戶訪問上傳文件
1.6 vsftpd系統(tǒng)用戶配置
vsftpd匿名用戶設(shè)置完畢,匿名用戶,任何人都可以查看FTP服務(wù)器的文件、目錄,甚至可以修改、刪除,此方案不適合存放私密文件在FTP服務(wù)器,如何保證文件或者目錄專屬擁有者呢,vsftpd系統(tǒng)用戶可以實(shí)現(xiàn)該需求。
實(shí)現(xiàn)vsftpd系統(tǒng)用戶方式驗(yàn)證,只需在Linux系統(tǒng)中創(chuàng)建多個(gè)用戶即可,創(chuàng)建用戶使用useradd,同時(shí)給用戶設(shè)置密碼,即可通過(guò)用戶和密碼登錄FTP,進(jìn)行文件上傳、下載、刪除等操作。vsftpd系統(tǒng)用戶實(shí)現(xiàn)方法步驟如下:
1、Linux系統(tǒng)中創(chuàng)建系統(tǒng)用戶superman1、superman2,分別設(shè)置密碼為123456:
# useradd superman1
# useradd superman2
# echo 123456|passwd --stdin superman1
# echo 123456|passwd --stdin superman2

圖1-8 創(chuàng)建用戶并設(shè)置密碼
2、修改vsftpd.conf配置文件如下:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
3、重啟vsftpd服務(wù)
# systemctl restart vsftpd.service

4、通過(guò)Windows資源客戶端驗(yàn)證,使用superman1、superman2用戶登錄FTP服務(wù)器,即可上傳文件、刪除文件、下載文件,superman1、superman2系統(tǒng)用戶上傳文件的家目錄在/home/superman1、/home/superman2下,如圖1-9(a)、1-9(b)所示:

圖1-9(a) superman1用戶登錄FTP服務(wù)器

圖1-9(b) superman1登錄FTP服務(wù)器上傳文件
1.7 vsftpd虛擬用戶配置
注意:當(dāng)允許虛擬用戶登錄時(shí),就不能實(shí)現(xiàn)實(shí)體用戶登錄?。烧卟还泊?!
如果基于vsftpd系統(tǒng)用戶訪問FTP服務(wù)器,系統(tǒng)用戶越多越不利于管理,而且不利于系統(tǒng)安全管理,鑒于此,為了能更加的安全使用vsftpd,需使用vsftpd虛擬用戶方式。
vsftpd虛擬用戶原理:虛擬用戶就是沒有實(shí)際的真實(shí)系統(tǒng)用戶,而是通過(guò)映射到其中一個(gè)真實(shí)用戶以及設(shè)置相應(yīng)的權(quán)限來(lái)實(shí)現(xiàn)訪問驗(yàn)證,虛擬用戶不能登錄Linux系統(tǒng),從而讓系統(tǒng)更加的安全可靠。
vsftpd虛擬用戶企業(yè)案例配置步驟如下:
1、安裝vsftpd虛擬用戶需用到的軟件及認(rèn)證模塊;
# yum install pam* libdb-utils libdb* --skip-broken -y

圖1-10 安裝vsftpd虛擬用戶需用到的軟件及認(rèn)證模塊
2、創(chuàng)建虛擬用戶臨時(shí)文件/etc/vsftpd/ftpusers.txt,新建虛擬用戶和密碼,其中superman001、superman002為虛擬用戶名,123456為密碼,如果有多個(gè)用戶,依次格式填寫即可;
# echo "superman001
123456
superman002
123456" > /etc/vsftpd/ftpusers.txt

圖1-11 創(chuàng)建虛擬用戶臨時(shí)文件
3、生成vsftpd虛擬用戶數(shù)據(jù)庫(kù)認(rèn)證文件,設(shè)置權(quán)限700;
# db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db
# chmod 700 /etc/vsftpd/vsftpd_login.db

圖1-12 生成vsftpd虛擬用戶數(shù)據(jù)庫(kù)認(rèn)證文件
4、配置PAM認(rèn)證文件,/etc/pam.d/vsftpd文件配置成如下兩行;
# echo "auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login" > /etc/pam.d/vsftpd

圖1-13 配置PAM認(rèn)證文件
5、所有vsftpd虛擬用戶需要映射到一個(gè)系統(tǒng)用戶,該系統(tǒng)用戶不需要密碼,也不需要登錄,主要用于虛擬用戶映射使用,創(chuàng)建命令如下;
# useradd -s /sbin/nologin ftpuser

圖1-14 創(chuàng)建虛擬用戶需要映射到的一個(gè)系統(tǒng)用戶
6、完整vsftpd.conf配置文件如下;
#global config Vsftpd
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
userlist_enable=YES
tcp_wrappers=YES
#config virtual user FTP
pam_service_name=vsftpd
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YES
allow_writeable_chroot=YES
如上vsftpd虛擬用戶配置文件參數(shù)詳解:
#config virtual user FTP
pam_service_name=vsftpd 虛擬用戶啟用pam認(rèn)證;
guest_enable=YES 啟用虛擬用戶;
guest_username=ftpuser 映射虛擬用戶至系統(tǒng)用戶ftpuser;
user_config_dir=/etc/vsftpd/vsftpd_user_conf 設(shè)置虛擬用戶配置文件所在的目錄;
virtual_use_local_privs=YES 虛擬用戶使用與本地用戶相同的權(quán)限;
allow_writeable_chroot=YES 所有的用戶都將擁有chroot權(quán)限。
7、至此,所有虛擬用戶共同基于/home/ftpuser主目錄實(shí)現(xiàn)文件上傳與下載,可以在/etc/vsftpd/vsftpd_user_conf目錄創(chuàng)建虛擬用戶各自的配置文件,創(chuàng)建虛擬用戶配置文件主目錄;
# mkdir -p /etc/vsftpd/vsftpd_user_conf

圖1-15 創(chuàng)建虛擬用戶配置文件主目錄
8、如下分別為虛擬用戶superman001、superman002用戶創(chuàng)建配置文件;
為superman001用戶創(chuàng)建配置文件,同時(shí)創(chuàng)建私有的虛擬目錄,配置如下:
# echo "local_root=/home/ftpuser/superman001
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES" > /etc/vsftpd/vsftpd_user_conf/superman001

圖1-16 為superman001用戶創(chuàng)建配置文件,同時(shí)創(chuàng)建私有的虛擬目錄
為superman002用戶創(chuàng)建配置文件,同時(shí)創(chuàng)建私有的虛擬目錄,配置如下:
# echo "local_root=/home/ftpuser/superman002
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES" > /etc/vsftpd/vsftpd_user_conf/superman002

圖1-17 為superman002用戶創(chuàng)建配置文件,同時(shí)創(chuàng)建私有的虛擬目錄
虛擬用戶配置文件內(nèi)容詳解:
local_root=/home/ftpuser/superman002 superman002虛擬用戶配置文件路徑;
write_enable=YES 允許登陸用戶有寫權(quán)限;
anon_world_readable_only=YES 允許匿名用戶下載,然后讀取文件;
anon_upload_enable=YES 允許匿名用戶上傳文件權(quán)限,只有在write_enable=YES時(shí)該參數(shù)才生效;
anon_mkdir_write_enable=YES 允許匿名用戶創(chuàng)建目錄,只有在write_enable=YES時(shí)該參數(shù)才生效;
anon_other_write_enable=YES 允許匿名用戶其他權(quán)限,例如刪除、重命名等。
9、創(chuàng)建虛擬用戶各自虛擬目錄;
# mkdir -p /home/ftpuser/{superman001,superman002}
# chown -R ftpuser:ftpuser /home/ftpuser

圖1-18 創(chuàng)建虛擬用戶各自虛擬目錄
10、重啟vsftpd服務(wù);
# systemctl restart vsftpd.service

圖1-19 啟動(dòng)vsftpd服務(wù)
11、通過(guò)Windows客戶端資源管理器登錄vsftpd服務(wù)端,測(cè)試結(jié)果如圖1-20(a)、1-20(b)所示:

圖1-20(a) superman001虛擬用戶登錄FTP服務(wù)器

圖1-20(b) superman001虛擬用戶上傳下載文件