除了匿名使用者和本地使用者之外,我們還可以設定虛拟使用者來通路FTP。所謂虛拟使用者是指存放于獨立資料庫檔案中的FTP使用者賬号,可以将他們映射到某個不能登入的系統使用者賬号上,以進一步增強FTP伺服器的安全性。
(1)建立虛拟使用者資料庫檔案
vsftpd服務的虛拟使用者資料庫是使用Berkeley DB格式的資料庫檔案,建立資料庫檔案需要用到db_load指令工具,db_load工具是由db4-utils軟體包提供的,是以首先我們需要确認系統中已經安裝好了db4-utils元件。
<a href="http://blog.51cto.com/attachment/201306/081137848.jpg" target="_blank"></a>
然後我們先建立一個文本格式的使用者名/密碼清單檔案,用于存放虛拟使用者賬号。檔案名可以随意,檔案一般是儲存在/etc/vsftpd目錄中。
# vim /etc/vsftpd/logins.txt
<a href="http://blog.51cto.com/attachment/201306/081352743.jpg" target="_blank"></a>
檔案中的奇數行表示使用者名,偶數行為上一行使用者所對用的密碼。如上圖就表示建立了2個虛拟使用者:harry和natasha,密碼都是123.
有了文本格式的使用者名/密碼清單檔案以後,還要以此檔案為資料源通過db_load工具建立出Berkeley DB格式的資料庫檔案。
<a href="http://blog.51cto.com/attachment/201306/081440936.jpg" target="_blank"></a>
上圖中所執行的db_load指令是一種固定用法,其中的“-T”選項表示允許非Berkeley DB的應用程式使用從文本格式轉換的DB資料庫檔案,“-t hash”選項指定讀取資料檔案的基本方法,“-f”選項用于指定資料的源檔案。
最後為了提高虛拟使用者賬号的安全性,最好将這兩個存放虛拟使用者賬号的檔案的權限都設為600,即隻有root使用者具有讀取和寫入權限。
<a href="http://blog.51cto.com/attachment/201306/081531627.jpg" target="_blank"></a>
(2)建立虛拟使用者的映射賬号
vsftpd服務對虛拟使用者其實是采用了映射的控制方式,把所有的虛拟使用者賬号都對應到了同一個系統使用者賬号上,并将這個系統使用者的主目錄作為所有虛拟使用者登入後共用的FTP根目錄。
是以我們還必須要建立一個系統使用者賬号,當然這個使用者是無需設定密碼并且不允許登入系統。
<a href="http://blog.51cto.com/attachment/201306/081629848.jpg" target="_blank"></a>
在useradd指令中,利用-d選項指定了使用者的主目錄,利用-s選項禁止使用者登入。然後再修改目錄權限,使得其他使用者可以通路。
(3)建立PAM認證檔案
對虛拟使用者的身份認證是通過PAM機制來實作的,PAM是Linux系統中的一個獨立API(應用程式接口),它提供了各種驗證子產品以供其它程式調用。當這些程式需要進行使用者身份驗證的操作時,就可以直接調用PAM的相應子產品,而無需由自己來提供驗證功能。是以PAM在Linux系統中提供了統一的身份驗證機制。
PAM的認證檔案都統一存放在/etc/pam.d/目錄中,下面我們在這個目錄中建立一個FTP虛拟使用者的認證檔案:
# vim /etc/pam.d/vsftpd.vu
<a href="http://blog.51cto.com/attachment/201306/081822602.jpg" target="_blank"></a>
在檔案中,通過“db=/etc/vaftpd/logins”參數指定了要使用的虛拟使用者資料庫檔案的位置,注意這裡不需要寫“.db”的擴充名。
(4)修改vsftpd配置,添加虛拟使用者支援
在vsftpd.conf配置檔案中需要添加相應配置項,以支援虛拟使用者。
<a href="http://blog.51cto.com/attachment/201306/081945273.jpg" target="_blank"></a>
上圖中上半部分的設定項是原有的設定,下半部分(紅框部分)的設定項是我們這裡所要添加的。
guest_enable=YES ,表示啟用虛拟使用者映射功能;
guest_username=virtual ,表示指定所映射的系統使用者名稱;
pam_service_name=vsftpd.vu ,表示指定PAM認證檔案。
user_config_dir=/etc/vsftpd/vuser ,表示虛拟使用者配置檔案的存放目錄。關于虛拟使用者配置檔案将在下面介紹。
另外,其它原有的一些設定項目也必須要正确設定:
local_enable=YES ,由于需要映射本地使用者,是以此項必須啟用;
anon_umask=022 ,在vsftpd服務中,虛拟使用者被預設作為匿名使用者進行處理以降低權限,是以對應的配置項通常以anon_開頭。
write_enable=YES ,表示允許寫入。
(5)建立虛拟使用者配置檔案
經過前面的設定之後,将vsftpd服務重新開機,便可以使用虛拟使用者通路FTP了,但此時所有的虛拟使用者都隻具有下載下傳的權限而無法上傳。當然,如果在vsftpd.conf配置檔案中添加配置項“aono_upload_enable=YES”和“anon_mkdir_write_enable=YES”,便可以使虛拟使用者具備上傳權限,但這樣一來,所有的虛拟使用者又都可以上傳了。是以,為了對虛拟使用者進行精确控制,實作不同使用者擁有不同的權限,我們還需要為每個虛拟使用者建立獨立的配置檔案,在vsftpd.conf配置檔案中我們已經指定了虛拟使用者配置檔案的存放位置/etc/vsftpd/vuser。
下面我們首先建立虛拟使用者配置檔案存放目錄,然後為harry使用者建立配置檔案,檔案名即是使用者名:
<a href="http://blog.51cto.com/attachment/201306/082316906.jpg" target="_blank"></a>
然後設定允許harry使用者上傳,設定方法同匿名使用者:
<a href="http://blog.51cto.com/attachment/201306/082402644.jpg" target="_blank"></a>
然後我們再為natasha也建立一個配置檔案,如果natasha隻允許下載下傳,那麼隻需要有一個配置檔案即可,檔案内容保持空白。
重新開機服務:
# service vsftpd restart
這樣虛拟使用者便全部設定好了,harry使用者具有下載下傳和上傳的權限,而natasha隻能下載下傳不能上傳。
最後需要注意的是,如果在vsftpd.conf配置檔案中設定了“userlist_enable=YES userlist_deny=NO”,即隻允許userlist清單中的使用者通路FTP,那麼還需要将virtual使用者加入到/etc/vsftpd/user_list清單中去。
本文轉自 yttitan 51CTO部落格,原文連結:http://blog.51cto.com/yttitan/1219381