W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
我們最后講解的虛擬用戶模式是這三種模式中最安全的一種認(rèn)證模式,當(dāng)然,因?yàn)榘踩暂^之于前面兩種模式有了提升,所以配置流程也會(huì)稍微復(fù)雜一些。
第1步:創(chuàng)建用于進(jìn)行FTP認(rèn)證的用戶數(shù)據(jù)庫(kù)文件,其中奇數(shù)行為賬戶名,偶數(shù)行為密碼。例如,我們分別創(chuàng)建出zhangsan和lisi兩個(gè)用戶,密碼均為redhat:
[root@linuxprobe ~]# cd /etc/vsftpd/
[root@linuxprobe vsftpd]# vim vuser.list
zhangsan
redhat
lisi
redhat
但是,明文信息既不安全,也不符合讓vsftpd服務(wù)程序直接加載的格式,因此需要使用db_load命令用哈希(hash)算法將原始的明文信息文件轉(zhuǎn)換成數(shù)據(jù)庫(kù)文件,并且降低數(shù)據(jù)庫(kù)文件的權(quán)限(避免其他人看到數(shù)據(jù)庫(kù)文件的內(nèi)容),然后再把原始的明文信息文件刪除。
[root@linuxprobe vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@linuxprobe vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@linuxprobe vsftpd]# chmod 600 vuser.db
[root@linuxprobe vsftpd]# rm -f vuser.list
第2步:創(chuàng)建vsftpd服務(wù)程序用于存儲(chǔ)文件的根目錄以及虛擬用戶映射的系統(tǒng)本地用戶。FTP服務(wù)用于存儲(chǔ)文件的根目錄指的是,當(dāng)虛擬用戶登錄后所訪問(wèn)的默認(rèn)位置。
由于Linux系統(tǒng)中的每一個(gè)文件都有所有者、所屬組屬性,例如使用虛擬賬戶“張三”新建了一個(gè)文件,但是系統(tǒng)中找不到賬戶“張三”,就會(huì)導(dǎo)致這個(gè)文件的權(quán)限出現(xiàn)錯(cuò)誤。為此,需要再創(chuàng)建一個(gè)可以映射到虛擬用戶的系統(tǒng)本地用戶。簡(jiǎn)單來(lái)說(shuō),就是讓虛擬用戶默認(rèn)登錄到與之有映射關(guān)系的這個(gè)系統(tǒng)本地用戶的家目錄中,虛擬用戶創(chuàng)建的文件的屬性也都?xì)w屬于這個(gè)系統(tǒng)本地用戶,從而避免Linux系統(tǒng)無(wú)法處理虛擬用戶所創(chuàng)建文件的屬性權(quán)限。
為了方便管理FTP服務(wù)器上的數(shù)據(jù),可以把這個(gè)系統(tǒng)本地用戶的家目錄設(shè)置為/var目錄(該目錄用來(lái)存放經(jīng)常發(fā)生改變的數(shù)據(jù))。并且為了安全起見(jiàn),我們將這個(gè)系統(tǒng)本地用戶設(shè)置為不允許登錄FTP服務(wù)器,這不會(huì)影響虛擬用戶登錄,而且還可以避免黑客通過(guò)這個(gè)系統(tǒng)本地用戶進(jìn)行登錄。
[root@linuxprobe ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@linuxprobe ~]# ls -ld /var/ftproot/
drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/
[root@linuxprobe ~]# chmod -Rf 755 /var/ftproot/
第3步:建立用于支持虛擬用戶的PAM文件。
PAM(可插拔認(rèn)證模塊)是一種認(rèn)證機(jī)制,通過(guò)一些動(dòng)態(tài)鏈接庫(kù)和統(tǒng)一的API把系統(tǒng)提供的服務(wù)與認(rèn)證方式分開(kāi),使得系統(tǒng)管理員可以根據(jù)需求靈活調(diào)整服務(wù)程序的不同認(rèn)證方式。要想把PAM功能和作用完全講透,至少要一個(gè)章節(jié)的篇幅才可以(對(duì)該主題感興趣的讀者敬請(qǐng)關(guān)注本書的進(jìn)階篇,里面會(huì)詳細(xì)講解PAM)。
通俗來(lái)講,PAM是一組安全機(jī)制的模塊,系統(tǒng)管理員可以用來(lái)輕易地調(diào)整服務(wù)程序的認(rèn)證方式,而不必對(duì)應(yīng)用程序進(jìn)行任何修改。PAM采取了分層設(shè)計(jì)(應(yīng)用程序?qū)?、?yīng)用接口層、鑒別模塊層)的思想,其結(jié)構(gòu)如圖11-2所示。
圖11-2 PAM的分層設(shè)計(jì)結(jié)構(gòu)
新建一個(gè)用于虛擬用戶認(rèn)證的PAM文件vsftpd.vu,其中PAM文件內(nèi)的“db=”參數(shù)為使用db_load命令生成的賬戶密碼數(shù)據(jù)庫(kù)文件的路徑,但不用寫數(shù)據(jù)庫(kù)文件的后綴:
[root@linuxprobe ~]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
第4步:在vsftpd服務(wù)程序的主配置文件中通過(guò)pam_service_name參數(shù)將PAM認(rèn)證文件的名稱修改為vsftpd.vu,PAM作為應(yīng)用程序?qū)优c鑒別模塊層的連接紐帶,可以讓應(yīng)用程序根據(jù)需求靈活地在自身插入所需的鑒別功能模塊。當(dāng)應(yīng)用程序需要PAM認(rèn)證時(shí),則需要在應(yīng)用程序中定義負(fù)責(zé)認(rèn)證的PAM配置文件,實(shí)現(xiàn)所需的認(rèn)證功能。
例如,在vsftpd服務(wù)程序的主配置文件中默認(rèn)就帶有參數(shù)pam_service_name=vsftpd,表示登錄FTP服務(wù)器時(shí)是根據(jù)/etc/pam.d/vsftpd文件進(jìn)行安全認(rèn)證的。現(xiàn)在我們要做的就是把vsftpd主配置文件中原有的PAM認(rèn)證文件vsftpd修改為新建的vsftpd.vu文件即可。該操作中用到的參數(shù)以及作用如表11-4所示。
表11-4 利用PAM文件進(jìn)行認(rèn)證時(shí)使用的參數(shù)以及作用
參數(shù) | 作用 |
---|---|
anonymous_enable=NO | 禁止匿名開(kāi)放模式 |
local_enable=YES | 允許本地用戶模式 |
guest_enable=YES | 開(kāi)啟虛擬用戶模式 |
guest_username=virtual | 指定虛擬用戶賬戶 |
pam_service_name=vsftpd.vu | 指定PAM文件 |
allow_writeable_chroot=YES | 允許對(duì)禁錮的FTP根目錄執(zhí)行寫入操作,而且不拒絕用戶的登錄請(qǐng)求 |
[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
1 anonymous_enable=NO
2 local_enable=YES
3 guest_enable=YES
4 guest_username=virtual
5 allow_writeable_chroot=YES
6 write_enable=YES
7 local_umask=022
8 dirmessage_enable=YES
9 xferlog_enable=YES
10 connect_from_port_20=YES
11 xferlog_std_format=YES
12 listen=NO
13 listen_ipv6=YES
14 pam_service_name=vsftpd.vu
15 userlist_enable=YES
16 tcp_wrappers=YES
第5步:為虛擬用戶設(shè)置不同的權(quán)限。雖然賬戶zhangsan和lisi都是用于vsftpd服務(wù)程序認(rèn)證的虛擬賬戶,但是我們依然想對(duì)這兩人進(jìn)行區(qū)別對(duì)待。比如,允許張三上傳、創(chuàng)建、修改、查看、刪除文件,只允許李四查看文件。這可以通過(guò)vsftpd服務(wù)程序來(lái)實(shí)現(xiàn)。只需新建一個(gè)目錄,在里面分別創(chuàng)建兩個(gè)以zhangsan和lisi命名的文件,其中在名為zhangsan的文件中寫入允許的相關(guān)權(quán)限(使用匿名用戶的參數(shù)):
[root@linuxprobe ~]# mkdir /etc/vsftpd/vusers_dir/
[root@linuxprobe ~]# cd /etc/vsftpd/vusers_dir/
[root@linuxprobe vusers_dir]# touch lisi
[root@linuxprobe vusers_dir]# vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
然后再次修改vsftpd主配置文件,通過(guò)添加user_config_dir參數(shù)來(lái)定義這兩個(gè)虛擬用戶不同權(quán)限的配置文件所存放的路徑。為了讓修改后的參數(shù)立即生效,需要重啟vsftpd服務(wù)程序并將該服務(wù)添加到開(kāi)機(jī)啟動(dòng)項(xiàng)中:
[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=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.vu
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vusers_dir
[root@linuxprobe ~]# systemctl restart vsftpd
[root@linuxprobe ~]# systemctl enable vsftpd
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service
第6步:設(shè)置SELinux域允許策略,然后使用虛擬用戶模式登錄FTP服務(wù)器。相信大家可以猜到,SELinux會(huì)繼續(xù)來(lái)?yè)v亂。所以,先按照前面實(shí)驗(yàn)中的步驟開(kāi)啟SELinux域的允許策略,以免再次出現(xiàn)操作失敗的情況:
[root@linuxprobe ~]# getsebool -a | grep ftp
ftp_home_dir –> off
ftpd_anon_write –> off
ftpd_connect_all_unreserved –> off
ftpd_connect_db –> off
ftpd_full_access –> off
ftpd_use_cifs –> off
ftpd_use_fusefs –> off
ftpd_use_nfs –> off
ftpd_use_passive_mode –> off
httpd_can_connect_ftp –> off
httpd_enable_ftp_server –> off
sftpd_anon_write –> off
sftpd_enable_homedirs –> off
sftpd_full_access –> off
sftpd_write_ssh_home –> off
tftp_anon_write –> off
tftp_home_dir –> off
[root@linuxprobe ~]# setsebool -P ftpd_full_access=on
此時(shí),不但可以使用虛擬用戶模式成功登錄到FTP服務(wù)器,還可以分別使用賬戶zhangsan和lisi來(lái)檢驗(yàn)他們的權(quán)限。當(dāng)然,讀者在生產(chǎn)環(huán)境中一定要根據(jù)真實(shí)需求來(lái)靈活配置參數(shù),不要照搬這里的實(shí)驗(yàn)操作。
[root@linuxprobe ~]# ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
220 (vsFTPd 3.0.2)
Name (192.168.10.10:root): lisi
331 Please specify the password.
Password:此處輸入虛擬用戶的密碼
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
550 Permission denied.
ftp> exit
221 Goodbye.
[root@linuxprobe ~]# ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
220 (vsFTPd 3.0.2)
Name (192.168.10.10:root): zhangsan
331 Please specify the password.
Password:此處輸入虛擬用戶的密碼
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
257 "/files" created
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir database
250 Remove directory operation successful.
ftp> exit
221 Goodbye.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: