爲什麼要使用虛擬用戶:
匿名帳戶可以很好的保證FTP服務器的安全性,但是,對匿名用戶的權限管理不夠靈活.如果想對訪問FTP的帳戶給予更多的權限,就可以用本地帳戶來 實現.但是,本地帳戶默認情況下是可以登陸Linux系統的,這樣對Linux系統來說是一個安全隱患.那麼怎麼能在靈活的賦予FTP用戶權限的前提下, 保證FTP服務器乃至整個Linux系統的安全呢?使用虛擬用戶就是一種解決辦法.
FTP虛擬用戶的工作原理:
虛擬用戶,顧名思義,並不是一個合法的Linux系統帳戶,但是他可以用來登陸該系統上運行的FTP服務器.
當用戶在連接上FTP服務器後,會被要求輸入用戶名和密碼.FTP服務器在拿到這個用戶名和密碼後,會調用相應的PAM認證模塊對,和系統中的 FTP認證文件進行相比較.如果該用戶名和密碼與FTP認證文件中的某條記錄相符,就通過認證,然後該帳戶就被映射成一個Linux下的本地帳戶,然後根 據使用該本地帳戶對FTP資源進行訪問.否則則斷開該連接請求.
配置FTP虛擬用戶整個過程可以分這幾個步驟:
1.準備一個虛擬用戶的口令庫文件.該文件中保存的用戶名和密碼是用戶連接FTP服務器時,需要輸入的用戶名和密碼.文件可以自己創建,位置無關緊要,文件格式爲:奇數行爲用戶名,偶數行爲密碼.
例如:
#touch login.txt //創建一個名爲login.txt的虛擬用戶口令庫文件
# vi login.txt //編輯該口令庫文件
mike //虛擬用戶mike
123 //虛擬用戶mike的密碼
john //虛擬用戶john
321 //虛擬用戶john的密碼
保存退出.
2.用剛纔建立的虛擬用戶口令庫文件生成FTP服務器的認證文件.該認證文件是一個被加密後的密文.PAM在調用相應的認證模塊後,會對從FTP服務器發來的用戶名和密碼進行加密,然後在跟該文件進行對比,發現相符條目後,登陸用戶纔會被允許登陸.
db_load -T -t hash -f login.txt /etc/vsftpd/vsftpd_login.db
//在運行該命令前,別忘記安裝libdb-utils軟件包,該包包含有db_load命令等.關於該命令的使用不在本文討論範圍內.其中-f參數後跟的爲剛纔創建的虛擬用戶口令庫文件.最後的路徑爲生成的FTP認證文件的存放位置.
爲了進一步保證安全,可以將該FTP認證文件的權限設置爲600.
3.建立虛擬用戶所需要的PAM配置文件.由於FTP服務器在接受到用戶的用戶名和口令後會調用PAM認證,所以我們還要創建虛擬用戶的PAM配置文件.
我們將該文件保存在/etc/pam.d目錄下,文件名暫時取爲:vsftpd.這裏要注意一點就是,該文件名要與FTP服務主配置文件(/etc/vsftpd/vsftpd.conf)中的pam_service_name=vsftpd選項的選項值相同.
創建好該文件後,將下面的內容加入到該文件中:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
改好後,保存退出.注意3個紅色文件的文件名.該3個文件爲1個文件,只不過在使用中寫法不同.
這裏需要注意,把/etc/pam.d/vsftpd文件的原內容全部註釋掉,添加這兩行內容,則本地用戶不可登錄,只有虛擬用戶可以登錄,若不註釋掉原內容,則虛擬用戶和本地用戶都可以登錄。
4.由於用戶在通過PAM的認證後要被映射成一個本地用戶,所以我們還要建立一個本地用戶供虛擬用戶使用.
我們只需要對該本地用戶賦予FTP主目錄的適當訪問權限就行.即使FTP服務器遭到***,這個本地用戶也沒有訪問其他目錄的權限,相對比較安全一些.
useradd -d /home/ftpsite virtual //用戶名爲virtual,主目錄爲FTP的根
chmod 700 /home/ftpsite //將其權限設置爲700,可以根據實際情形進行修改
5.在FTP的主配置文件中,啓用FTP虛擬用戶.增加如下選項即可:
guest_enable=YES
guest_username=virtual //將虛擬用戶映射成本地的哪個用戶.這裏用的是virtual,剛纔建立的那個用戶.
pam_service_name=/etc/vsftpd/vsftpd //切記要查看該項的值
配置到這裏就完成了,別忘記重啓FTP服務進行測試.
6.爲不同的虛擬用戶分配權限
默認情況下,虛擬用戶擁有相同的權限,就是virtual的權限,我們可以根據實際需求對不同的虛擬用戶分配權限.
首先在FTP的主配置文件中加一個選項:
user_config_dir=/etc/vsftpd_user_conf //文件名和路徑都可以自己定義
然後創建該目錄.
mkdir /etc/vsftpd_user_conf
下面就可以在該目錄下編輯不同虛擬用戶的權限配置文件了,比如要對mike編輯其權限.
touch mike //建立mike的權限文件.文件名要與虛擬用戶名相同
可以根據實際需求爲該文件添加下面的選項和值:
anon_world_readable_only=NO //表示用戶可以瀏覽FTP目錄和下載文件
anon_upload_enable=YES //表示用戶可以上傳文件
anon_mkdir_write_enable=YES //表示用戶有創建和刪除目錄的權限
anon_other_write_enable=YES //表示用戶具有文件改名和刪除文件的權限
下面我們通過兩個案例來測試一下虛擬用戶的配置:
案例1:
配置使用虛擬用戶的ftp服務器
說明:
共兩個虛擬用戶:vuser1,vuser2
vuser1:家目錄爲/home/virtual/vuser1,可以上傳下載、創建目錄、修改目錄,刪除文件。
vuser2:家目錄爲/home/virtual/vuser2,只能上傳。
服務器配置:
修改主配置文件:
客戶端測試:
案例2:
匿名用戶、本地用戶、虛擬用戶均可訪問ftp服務器
修改/etc/pam.d/vsftpd文件:
修改主配置文件/etc/vsftpd/vsftpd.conf
客戶端測試:
資料來源: