vsftpd 使用虛擬用戶及單用戶多目錄的配置

vsftpd 使用虛擬用戶及單用戶多目錄的配置

一、配置vsftpd虛擬用戶

安裝vsftpd

yum -y install pam pam-devel db4 db4-tcl
yum -y install vsftpd

配置vsftpd.conf

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/vconf

創建虛擬用戶名單文件,在其中加入用戶的用戶名和口令信息。格式很簡單:“奇數行用戶名,偶數行口令”。
virtusers文件格式如下:

vim /etc/vsftpd/virtusers

username1
password123

生成虛擬用戶數據文件

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

需要特別注意的是,以後再要添加虛擬用戶的時候,只需要按照“一行用戶名,一行口令”的格式將新用戶名和口令添加進虛擬用戶名單文件。
但是光這樣做還不夠,這樣是不會生效的!還要再執行一遍“ db_load -T -t hash -f 虛擬用戶名單文件 虛擬用戶數據庫文件.db ”的命令使其生效纔可以!

設置認證文件PAM

編輯Vsftpd的PAM驗證配置文件,把原來的配置文件全部註釋掉(不註釋掉虛擬用戶會登錄不上),添加如下行
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup

#vim /etc/pam.d/vsftpd

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則指定了驗證庫函數將到這個指定的數據庫中調用數據進行驗證。

建立虛擬用戶配置文件模版

創建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過程中,我們會經常發現vsftpd在默認情況下一個用戶(無論是系統用戶還是虛擬用戶)只能擁有一個目錄,一般是根目錄。
如果此時再要向該用戶添加其它目錄的話,比如系統的其他目錄也需要此用戶訪
問,那麼就無法直接添加了。
.
所以我們只能藉助其他方式實現這個功能
.
一開始我想到了軟連接的方式,結果是vsftpd不支持軟連接,硬鏈接又不允許將硬鏈接指向目錄。
.
在此我們使用的是 mount --bind 命令,很多人將這個命令理解爲針對目錄的硬連接,但這種想法是錯的。
所以我需要注意一下兩點:

1.mount --bind連接的兩個目錄的inode號碼並不一樣,只是目標目錄的block被屏蔽掉,inode被重定向到原目錄的inode (目標目錄的inode和block依然沒變,就是說目標目錄只是隱藏不是刪除,數據都沒有改變,只是訪問不到了)

2.兩個目錄的對應關係存在於內存裏,一旦重啓掛載關係就不存在了,所以我們想要服務器重啓之後還有效的話就需要寫到/etc/rc.local

.
創建幾個測試目錄
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/

vsftpd 使用虛擬用戶及單用戶多目錄的配置

使用 source加載一下/etc/rc.local, 讓它立即生效。

source /etc/rc.local

然使用 mount 查看掛載的結果。

vsftpd 使用虛擬用戶及單用戶多目錄的配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章