在vsftpd中要實現不同使用者不同許可權,可以利用虛擬使用者來實現。
vsftpd的本機使用者本身是系統的使用者,除了可以登入FTP伺服器外,還可以登入系統使用其他系統資源,而vsftpd的虛擬使用者則是FTP服務的專用使用者,虛擬使用者只能訪問FTP伺服器資源。對於只需要通過FTP對系統有讀寫權限,而不需要其他系統資源的使用者或情況來說,採用虛擬使用者方式是很適合的。
vsftpd的虛擬使用者採用單獨的使用者名稱/口令儲存方式,與系統帳號(passwd/shadow)分離,這大大增強了系統的安全性。vsftpd可以採用資料庫檔案來儲存使用者/口令,如hash;也可以將使用者/口令儲存在資料庫伺服器中,如MySQL等。vsftpd驗證虛擬使用者,則採用PAM方式。由於虛擬使用者的使用者名稱/口令被單獨儲存,因此在驗證時,vsftpd需要用一個系統使用者的身份來讀取資料庫檔案或資料庫伺服器以完成驗證,這就是guest使用者,這正如同匿名使用者也需要有一個系統使用者ftp一樣。當然,guest使用者也可以被認為是用於映射虛擬使用者。
環境:
Ubuntu 10.04
vsftpd 2.2.2
1、安裝vsftpd
$sudo apt-get install vsftpd
$sudo apt-get install db4.6-utils
2、建立本地虛擬使用者
#useradd -d /home/ftp virtual
指定目錄為/home/ftp
3、建立虛擬使用者資料庫
#mkdir /etc/vsftpd
#vim /etc/vsftpd/login.txt
login.txt檔案內容:
gavin
123
jimson
123
admin
admin
註:奇數行為使用者名稱,偶數行為密碼。
#db4.6_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_login.db
#chmod 600 /etc/vsftpd/vsftpd_login.db
產生資料庫檔案之後建議刪除logins.txt。
4、建立基於vsftpd_login的PAM授權檔案
#vim /etc/pam.d/vsftpd.vu
vsftpd.vu檔案內容:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
5、設定使用者權限
建立用來存放使用者權限設定檔案的目錄
#mkdir /etc/vfstpd/virtual
並在該檔案夾下依次建立與logins.txt對應的帳號名稱相同的檔案
#vim gavin
內容可以參考下面:
#[gavin]只允許下載
anon_world_readable_only=NO
local_root=/home/ftp
#[jimson]允許建立,修改,但是不允許刪除
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
local_root=/home/ftp
#[admin]全部許可權
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
local_root=/home/ftp
6、設定vsftpd.conf
#vim /etc/vsftpd.conf
修改內容如下:
listen=YES
connect_from_port_20=YES
ftpd_banner=Welcome to virtual FTP service.
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/virtual
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
7、重新啟動vsftpd
#service vsftpd restart
【可能出現的問題】
1、無法登陸
解決方案:
(1)檢查ftp根目錄目錄是否存在;
(2)檢查上面設定的各個路徑是否正確;
(3)查看ftp根目錄的owner屬性是否是virtual
#ls -al /home
如果不是
#chown -R virtual /home/ftp
【日常維護】
(1)更新帳號
#db4.6_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_login.db
(2)更新/etc/vsftpd/virtual/下不同使用者對應的許可權
(3)重啟vsftpd
#service vsftpd restart