VSFTP+PAM實現虛擬用戶配置說明

我曾經在QuickLinux上發表過一篇文檔,介紹瞭如何用VSFTP和Berkeley DB通過PAM實現虛擬用戶。現在這篇不是簡單的轉載過來——雖然目前看起來是這樣,後面還是要加入一些新的東西,算是先佔個位子吧。後面要加入的是VSFTP+MySQL/PostgreSQL實現虛擬用戶,以及磁盤配額。此文檔會不定期更新。
 
前言:
本文檔基於網絡上各vsftp的配置文檔結合我自己在QuickLinux上的實踐總結而成。網絡上的文檔或多或少都會有一些問題,完全照搬會很麻煩。本文在QuickLinux上驗證無誤,並可應用於CentOS系列以及基於CentOS的其他發行版,如Trixbox、Elastic等。
需求:
QuickLinux服務器上需要開ftp服務,在ftp根目錄下包含三個字目錄:incoming、mcc、vis,包含四個虛擬用戶:admin(系統管理員,具有全部權限),upload(可以在incoming目錄中上傳下載文件,並建文件夾,不能刪除及修改),mcc和vis用戶只能下載同名目錄中的文件,無其他權限。
準備:
1) 確認已經安裝vsftpd,使用QL默認安裝的rpm即可。
2) 確認安裝Berkeley db,QL自帶的db4版本不夠,且沒有utils包,需要升級。
下載db4-4.3.27-3.i386.rpm及db4-utils-4.3.27-3.i386.rpm,執行命令:
~# rpm -Uvh db4-4.3.27-3.i386.rpm
~# rpm -ivh db4-utils-4.3.27-3.i386.rpm
注意,第一個是升級安裝,第二個是全新安裝。
3) 安裝pam_pwdfile,此步至關重要,正是網上廣爲討論的priv_sock_get_result問題之所在!
首先下載pam_pwdfile-0.99,可到[url]http://cpbotha.net/pam_pwdfile.html[/url]
然後下載Linux-PAM-0.75.tar.bz2,可到[url]http://www.us.kernel.org/pub/linux/libs/pam/pre/library/Linux-PAM-0.75.tar.bz2[/url]
假設將兩個包都放在/home/temp下,然後按照下面步驟安裝:
~# tar xjvf Linux-PAM-0.75.tar.bz2
~# tar xzvf pam_pwdfile-0.99
~# cp -r pam_pwdfile-0.99 Linux-PAM-0.75/modules
~# cd Linux-PAM-0.75
~# rm -f default.defs
~# ln -s defs/redhat.defs default.defs
~# make
在make這步成功後,就會在Linux-PAM-0.75/modules/pam_pwdfile-0.99/發現一個名叫pam_pwdfile.so的文件, 將其複製到/lib/security/下面
開始:
1) 生成虛擬用戶的數據庫:
使用pam_userdb來認證虛擬用戶。
先創建一個logins.txt,並在裏面寫入用戶名及密碼,注意,單數行爲用戶名,雙數行爲對應的密碼:
~# vi /root/logins.txt
admin
123456
upload
123456
mcc
123456
vis
123456
將logins.txt轉換成db文件:
~# db_load -T -t hash -f /root/logins.txt /etc/vsftpd/vsftpd_login.db
~# chmod 600 /etc/vsftpd/vsftpd_login.db
2) 生成一個使用你新的db的PAM文件。
~# vi /etc/pam.d/vsfptd
把原有各行均註釋掉,然後加入下面兩行:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login crypt=hash
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login crypt=hash
注意crypt=hash必須加上,否則依然會出priv_sock_get_result問題!
~# cp /etc/pam.d/vsftpd /etc/pam.d/ftp.vu
3) 建立虛擬用戶的目錄,ftpsite即爲本機ftp的根目錄。
~# useradd -d /home/ftpsite virtual
~# ls -ld /home/ftpsite
(看起來應該是這樣的):
drwx------ 3 virtual virtual 4096 Jul 30 00:39 /home/ftpsite
接下來創建ftp根目錄中的三個子目錄:
~# mkdir /home/ftpsite/incoming
~# chown virtual.virtual /home/ftpsite/incoming
~# mkdir /home/ftpsite/mcc
~# chown virtual.virtual /home/ftpsite/mcc
~# mkdir /home/ftpsite/vis
~# chown virtual.virtual /home/ftpsite/vis
4) 建立你自己的 /etc/vsftpd/vsftpd.conf 文件(可把原來的conf先備份一下)
#=============================vsftpd.conf start====================================
anonymous_enable=NO
local_enable=YES
#這禁止了匿名用戶使用FTP 服務,並且允許非匿名用戶的登錄,就是虛擬用戶所需要的權限
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_world_readable_only=NO
#出於安全的目的,禁止寫權限,其實後面我們使用虛擬用戶自己的配置文件後,上面這幾個設置就沒用了。
chroot_local_user=YES
#這明確了虛擬用戶是被定向到了虛擬的FTP 空間:/home/ftpsite
guest_enable=YES
guest_username=virtual
# 啓用虛擬用戶,並將虛擬用戶映射爲本地virtual用戶
pam_service_name=ftp.vu
user_config_dir=/etc/vsftpd/user_conf
# 這兩行很重要!指定PAM配置文件爲ftp.vu,並指定不同虛擬用戶配置文件的存放路徑
listen=YES
listen_port=21
# 使 vsftpd 以"standalone" 模式運行- 端口21
pasv_min_port=30000
pasv_max_port=30999
#限定端口,方便防火牆的設置
#===========================vsftpd.conf end=======================================
5)創建virtual文件目錄/etc/vsftpd/user_conf 並在文件目錄中創建以用戶名命名的配置文件
~# mkdir /etc/vsftpd/user_conf
~# vi admin
local_root=/home/ftpsite
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
~# vi upload
local_root=/home/ftpsite/incoming
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=NO
~# vi mcc
local_root=/home/ftpsite/mcs
write_enable=NO
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
~# vi vis
local_root=/home/ftpsite/viss
write_enable=NO
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
6) 重啓 vsftpd.
~# service vsftpd restart
配置到此即告完成,我們可以開始測試使用了!
補充:添加虛擬目錄的方法
任意目錄,所有權屬於virtual.virtual。用mount --bind命令,如mount /mnt/aaa /home/ftpsite/movie/movie1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章