新聞中心
我們最后講解的虛擬用戶模式是這三種模式中最安全的一種認證模式,當然,因為安全性較之于前面兩種模式有了提升,所以配置流程也會稍微復雜一些。

第1步:創(chuàng)建用于進行FTP認證的用戶數(shù)據(jù)庫文件,其中奇數(shù)行為賬戶名,偶數(shù)行為密碼。例如,我們分別創(chuàng)建出zhangsan和lisi兩個用戶,密碼均為redhat:
[root@linuxprobe ~]# cd /etc/vsftpd/
[root@linuxprobe vsftpd]# vim vuser.list
zhangsan
redhat
lisi
redhat但是,明文信息既不安全,也不符合讓vsftpd服務程序直接加載的格式,因此需要使用db_load命令用哈希(hash)算法將原始的明文信息文件轉換成數(shù)據(jù)庫文件,并且降低數(shù)據(jù)庫文件的權限(避免其他人看到數(shù)據(jù)庫文件的內容),然后再把原始的明文信息文件刪除。
[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服務程序用于存儲文件的根目錄以及虛擬用戶映射的系統(tǒng)本地用戶。FTP服務用于存儲文件的根目錄指的是,當虛擬用戶登錄后所訪問的默認位置。
由于Linux系統(tǒng)中的每一個文件都有所有者、所屬組屬性,例如使用虛擬賬戶“張三”新建了一個文件,但是系統(tǒng)中找不到賬戶“張三”,就會導致這個文件的權限出現(xiàn)錯誤。為此,需要再創(chuàng)建一個可以映射到虛擬用戶的系統(tǒng)本地用戶。簡單來說,就是讓虛擬用戶默認登錄到與之有映射關系的這個系統(tǒng)本地用戶的家目錄中,虛擬用戶創(chuàng)建的文件的屬性也都歸屬于這個系統(tǒng)本地用戶,從而避免Linux系統(tǒng)無法處理虛擬用戶所創(chuàng)建文件的屬性權限。
為了方便管理FTP服務器上的數(shù)據(jù),可以把這個系統(tǒng)本地用戶的家目錄設置為/var目錄(該目錄用來存放經(jīng)常發(fā)生改變的數(shù)據(jù))。并且為了安全起見,我們將這個系統(tǒng)本地用戶設置為不允許登錄FTP服務器,這不會影響虛擬用戶登錄,而且還可以避免黑客通過這個系統(tǒng)本地用戶進行登錄。
[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(可插拔認證模塊)是一種認證機制,通過一些動態(tài)鏈接庫和統(tǒng)一的API把系統(tǒng)提供的服務與認證方式分開,使得系統(tǒng)管理員可以根據(jù)需求靈活調整服務程序的不同認證方式。要想把PAM功能和作用完全講透,至少要一個章節(jié)的篇幅才可以(對該主題感興趣的讀者敬請關注本書的進階篇,里面會詳細講解PAM)。
通俗來講,PAM是一組安全機制的模塊,系統(tǒng)管理員可以用來輕易地調整服務程序的認證方式,而不必對應用程序進行任何修改。PAM采取了分層設計(應用程序層、應用接口層、鑒別模塊層)的思想,其結構如圖11-2所示。
圖11-2 PAM的分層設計結構
新建一個用于虛擬用戶認證的PAM文件vsftpd.vu,其中PAM文件內的“db=”參數(shù)為使用db_load命令生成的賬戶密碼數(shù)據(jù)庫文件的路徑,但不用寫數(shù)據(jù)庫文件的后綴:
[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服務程序的主配置文件中通過pam_service_name參數(shù)將PAM認證文件的名稱修改為vsftpd.vu,PAM作為應用程序層與鑒別模塊層的連接紐帶,可以讓應用程序根據(jù)需求靈活地在自身插入所需的鑒別功能模塊。當應用程序需要PAM認證時,則需要在應用程序中定義負責認證的PAM配置文件,實現(xiàn)所需的認證功能。
例如,在vsftpd服務程序的主配置文件中默認就帶有參數(shù)pam_service_name=vsftpd,表示登錄FTP服務器時是根據(jù)/etc/pam.d/vsftpd文件進行安全認證的。現(xiàn)在我們要做的就是把vsftpd主配置文件中原有的PAM認證文件vsftpd修改為新建的vsftpd.vu文件即可。該操作中用到的參數(shù)以及作用如表11-4所示。
表11-4 利用PAM文件進行認證時使用的參數(shù)以及作用
| 參數(shù) | 作用 |
|---|---|
| anonymous_enable=NO | 禁止匿名開放模式 |
| local_enable=YES | 允許本地用戶模式 |
| guest_enable=YES | 開啟虛擬用戶模式 |
| guest_username=virtual | 指定虛擬用戶賬戶 |
| pam_service_name=vsftpd.vu | 指定PAM文件 |
| allow_writeable_chroot=YES | 允許對禁錮的FTP根目錄執(zhí)行寫入操作,而且不拒絕用戶的登錄請求 |
[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步:為虛擬用戶設置不同的權限。雖然賬戶zhangsan和lisi都是用于vsftpd服務程序認證的虛擬賬戶,但是我們依然想對這兩人進行區(qū)別對待。比如,允許張三上傳、創(chuàng)建、修改、查看、刪除文件,只允許李四查看文件。這可以通過vsftpd服務程序來實現(xiàn)。只需新建一個目錄,在里面分別創(chuàng)建兩個以zhangsan和lisi命名的文件,其中在名為zhangsan的文件中寫入允許的相關權限(使用匿名用戶的參數(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主配置文件,通過添加user_config_dir參數(shù)來定義這兩個虛擬用戶不同權限的配置文件所存放的路徑。為了讓修改后的參數(shù)立即生效,需要重啟vsftpd服務程序并將該服務添加到開機啟動項中:
[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步:設置SELinux域允許策略,然后使用虛擬用戶模式登錄FTP服務器。相信大家可以猜到,SELinux會繼續(xù)來搗亂。所以,先按照前面實驗中的步驟開啟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此時,不但可以使用虛擬用戶模式成功登錄到FTP服務器,還可以分別使用賬戶zhangsan和lisi來檢驗他們的權限。當然,讀者在生產環(huán)境中一定要根據(jù)真實需求來靈活配置參數(shù),不要照搬這里的實驗操作。
[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. 網(wǎng)頁名稱:創(chuàng)新互聯(lián)linux教程:11.2.3虛擬用戶模式
轉載來于:http://fisionsoft.com.cn/article/coeipig.html


咨詢
建站咨詢
