yum -y install pam pam-devel db4 db4-tcl
yum -y install vsftpdnode
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.back
vim /etc/vsftpd/vsftpd.conf數據庫
anonymous_enable=NO #設成YES,容許匿名用戶登錄 local_enable=YES #容許/禁止本地用戶登錄 注意:主要是爲虛擬宿主用戶,若是該項目設定爲NO那麼全部虛擬用戶將沒法訪問。 write_enable=YES #設定能夠進行寫操做。 local_umask=022 #設定上傳後文件的權限掩碼,文件644,文件夾755 dirmessage_enable=YES #設定開啓目錄標語功能 xferlog_enable=YES #設定開啓日誌記錄功能。 connect_from_port_20=YES #設定端口20進行數據鏈接 xferlog_std_format=YES #設定日誌使用標準的記錄格式 listen=YES #開啓獨立進程vsftpd,不使用超級進程xinetd。設定該Vsftpd服務工做在StandAlone模式下。 pam_service_name=vsftpd #設定,啓用pam認證,並指定認證文件名/etc/pam.d/vsftpd userlist_enable=YES #設定userlist_file中的用戶將不得使用FTP tcp_wrappers=YES #設定支持TCP Wrappers chroot_local_user=YES #限制全部用戶在主目錄 #限制全部用戶在主目錄 #↓↓↓↓↓↓↓↓↓↓↓ #↓↓↓↓↓↓↓↓↓↓↓ #如下這些是關於Vsftpd虛擬用戶支持的重要配置項目。默認Vsftpd.conf中不包含這些設定項目,須要本身手動添加配置 guest_enable=YES #設定啓用虛擬用戶功能 guest_username=www #指定虛擬用戶的宿主用戶 virtual_use_local_privs=YES #設定虛擬用戶的權限符合他們的宿主用戶 user_config_dir=/etc/vsftpd/vconf #設定虛擬用戶我的Vsftp的配置文件存放路徑。也就是說,這個被指定的目錄裏,將存放每一個Vsftp虛擬用戶個性的配置文件, #一個須要注意的地方就是這些配置文件名必須和虛擬用戶名相同。
建立虛擬用戶配置文件存放路徑
mkdir /etc/vsftpd/vconfvim
建立虛擬用戶名單文件,在其中加入用戶的用戶名和口令信息。格式很簡單:「奇數行用戶名,偶數行口令」。
virtusers文件格式以下:安全
vim /etc/vsftpd/virtusers服務器
username1 password123
生成虛擬用戶數據文件session
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
須要特別注意的是,之後再要添加虛擬用戶的時候,只須要按照「一行用戶名,一行口令」的格式將新用戶名和口令添加進虛擬用戶名單文件。
可是光這樣作還不夠,這樣是不會生效的!還要再執行一遍「 db_load -T -t hash -f 虛擬用戶名單文件 虛擬用戶數據庫文件.db 」的命令使其生效才能夠!多線程
編輯Vsftpd的PAM驗證配置文件,把原來的配置文件所有註釋掉(不註釋掉虛擬用戶會登陸不上),添加以下行
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup併發
#vim /etc/pam.d/vsftpdapp
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
#以上兩條是手動添加的,內容是對虛擬用戶的安全和賬戶權限進行驗證。
這裏的auth是指對用戶的用戶名口令進行驗證。
這裏的accout是指對用戶的賬戶有哪些權限哪些限制進行驗證。
其後的sufficient表示充分條件,也就是說,一旦在這裏經過了驗證,那麼也就不用通過下面剩下的驗證步驟了。相反,若是沒有經過的話,也不會被系統當即擋之門外,由於sufficient的失敗不決定整個驗證的失敗,意味着用戶還必須將經歷剩下來的驗證審覈。
再後面的/lib/security/pam_userdb.so表示該條審覈將調用pam_userdb.so這個庫函數進行。
最後的db=/etc/vsftpd/virtusers則指定了驗證庫函數將到這個指定的數據庫中調用數據進行驗證。tcp
建立ftp的目錄,設置屬組屬主爲www,應爲咱們上面指定虛擬用戶的宿主用戶是www,這樣ftp用戶纔有權限對目錄進行操做。
mkdir -p /data/www/virtual/
chown www.www -R /data/www/virtual/
vim /etc/vsftpd/vconf/vconf.tmp
local_root=/data/www/virtual/ #指定虛擬用戶的具體主路徑 anonymous_enable=NO #設定不容許匿名用戶訪問 write_enable=YES #設定容許寫操做 local_umask=022 #設定上傳文件權限掩碼 anon_upload_enable=NO #設定不容許匿名用戶上傳 anon_mkdir_write_enable=NO #設定不容許匿名用戶創建目錄 idle_session_timeout=600 #設定空閒鏈接超時時間 data_connection_timeout=120 #設定單次連續傳輸最大時間 max_clients=10 #設定併發客戶端訪問個數 max_per_ip=5 #設定單個客戶端的最大線程數,這個配置主要來照顧Flashget、迅雷等多線程下載軟件 local_max_rate=50000 #設定該用戶的最大傳輸速率,單位b/s
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/username1
在使用vsftpd過程當中,咱們會常常發現vsftpd在默認狀況下一個用戶(不管是系統用戶仍是虛擬用戶)只能擁有一個目錄,通常是根目錄。
若是此時再要向該用戶添加其它目錄的話,好比系統的其餘目錄也須要此用戶訪
問,那麼就沒法直接添加了。
.
因此咱們只能藉助其餘方式實現這個功能
.
一開始我想到了軟鏈接的方式,結果是vsftpd不支持軟鏈接,硬連接又不容許將硬連接指向目錄。
.
在此咱們使用的是 mount --bind 命令,不少人將這個命令理解爲針對目錄的硬鏈接,但這種想法是錯的。
因此我須要注意一下兩點:
.
建立幾個測試目錄
mkdir /data/www/virtual/test{1,2}
mkdir /home/test{1,2}
chown -R www.www /home/test{1,2}
vim /etc/rc.local
#可讀寫掛載 mount --bind /home/test1/ /data/www/virtual/test1/ #只讀掛載 mount --bind /home/test2/ /data/www/virtual/test2/ mount -o remount,ro /data/www/virtual/test2/