11.2.3 虛擬用戶模式

2023-05-12 11:07 更新

我們最后講解的虛擬用戶模式是這三種模式中最安全的一種認(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.
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)