虛擬用戶的特點是隻能訪問服務器爲其提供的FTP服務,而不能訪問系統的其它資源。所以,如果想讓用戶對FTP服務器站內具有寫權限,但又不允許訪問系統其它資源,可以使用虛擬用戶來提高系統的安全性。
在VSFTP中,認證這些虛擬用戶使用的是單獨的口令庫文件(pam_userdb),由可插入認證模塊(PAM)認證。使用這種方式更加安全,並且配置更加靈活。
下面介紹配置過程。
1.生成虛擬用戶口令庫文件。爲了建立此口令庫文件,先要生成一個文本文件。該文件的格式如下,單數行爲用戶名,偶數行爲口令:
#vi account.txt
ylg
1234
zhanghong
4321
gou
5678
2.生成口令庫文件,並修改其權限:
#db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
#chmod 600 /etc/vsftpd/account.db
3.新建一個虛擬用戶的PAM文件。加上如下兩行內容:
#vi /etc/pam.d/vsftp.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account
account required /lib/security/pam_userdb.so db=/etc/vsftpd/account
4.建立虛擬用戶,設置該用戶所要訪問的目錄,並設置虛擬用戶訪問的權限:
#useradd -d /home/ftpsite virtual_user
#chmod 700 /home/ftpsite
經過該步驟的設置,/home/ftpsite就是virtual_user用戶的主目錄,該用戶也是ftpsite目錄的擁有者。除root用戶之外,只有該用戶具有對該目錄的讀、寫和執行的權限。
5.編輯/etc/vsftpd/vsftpd.conf文件,使其整個文件內容如下所示(去掉了註釋內容):
anonymous_enable=NO
local_enable=YES
local_umask=022
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
one_process_model=NO
chroot_local_user=YES
ftpd_banner=Welcom to my FTP server.
anon_world_readable_only=NO
guest_enable=YES
guest_username=virtual_user
pam_service_name=vsftp.vu
上面代碼中,guest_enable=YES表示啓用虛擬用戶;guest_username=virtual則是將虛擬用戶映射爲本地用戶,這樣虛擬 用戶登錄後才能進入本地用戶virtual的目錄/ftpsite;pam_service_name=vsftp.vu指定PAM的配置文件爲 vsftp.vu。
6.重新啓動VSFTP:
#service vsftpd restart
7.以虛擬用戶gou(Linux中並無該賬號)進行測試:
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcom to my FTP server.
Name (127.0.0.1:root): gou
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
在虛擬FTP服務器中,也可以對各個用戶的權限進行設置。方法是在/etc/vsftpd.conf文件中添加如下一行:
user_config_dir=用戶配置文件目錄
然後在用戶配置文件目錄下創建相應的用戶配置文件,比如爲上述名爲gou的用戶創建一個配置文件(假設配置文件目錄爲/etc/vsftpd_user_conf):
#vi /etc/vsftpd_user_conf/gou
write_enable=NO
anono_upload_enable=NO
8.虛擬用戶個人目錄設置
大家可以發現,無論是哪個虛擬用戶,登錄後所在的目錄都是/home/ftpsite,即都是guest用戶的自家目錄。下面,介紹如何爲每個虛擬用戶建立自家目錄。
一種作法是在虛擬用戶的個人配置文件中使用local_root選項指定虛擬用戶的自家目錄。以gou爲例,在第上步的基礎上,首先/etc/vsftpd_user_conf/gou文件中加入:
local_root=/home/ftpsite/gou
/home/ftpsite下新建gou目錄,並將權限設爲virtual_user:
9.添加FTP用戶的步驟
1.在account.txt中添加用戶名和密碼
2.運行如下命令,將用戶名和密碼添加到數據庫中
db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
3.在/home/ftpsite中新建一個文件夾,與用戶明相同
4.在vsftpd_user_conf文件夾下新建和用戶名相同的文件,並在其中加入
local_root=/home/ftpsite/用戶名