VSFTPD是一種Linux中非常安全且快速的FTP服務器,目前已經被許多大型站點所採用。VSFTPD支持將用戶名和口令保存在數據庫文件或數據庫服務器中。VSFTPD稱這種形式的用戶爲虛擬用戶。相對於FTP的本地(系統)用戶來說,虛擬用戶只是FTP服務器的專有用戶,虛擬用戶只能訪問FTP服務器所提供的資源,這大大增強系統本身的安全性。相對於匿名用戶而言,虛擬用戶需要用戶名和密碼才能獲取FTP服務器中的文件,增加了對用戶和下載的可管理性。
本文介紹在debian上如何實現VSFTPD的虛擬用戶名和密碼保存在數據庫文件和MySQL數據庫服務器中。並達到不同用戶(以三個爲例)不同權限,不同目錄:
wordpress用戶,本地目錄是:/var/www/wordpress,可以上傳下載,可以新建文件夾,可以刪除文件和文件夾;
download用戶,本地目錄是:/home/ftp,只能瀏覽和下載;
admin用戶 ,本地目錄是:/home/ftp,可以上傳下載,可以新建文件夾,可以刪除和更改文件和文件夾名。
三個帳號均不能登錄系統,並且用ftp連接時鎖定在自己的家目錄(每個用戶可以不同目錄),而不能進入系統文件夾。
基本思路:用虛擬用戶訪問FTP,爲每個虛擬用戶建立一個獨立的配置文件,使不同的虛擬用戶具有不同的主目錄,不同的權限。
基本流程:ftp用戶訪問→PAM配置文件(由vsftpd.conf中pam_service_name指定)→PAM論證→區別用戶讀取配置文件(由vsftpd.conf中user_config_dir指定配置文件路徑,文件名即用戶名)
具體步驟如下:(以下步驟由於要分方法來寫,所以並沒有按照流程的步驟來寫,所以看上去條理不是太清晰,建議做完後自己按照流程理一理思路)
1、首選安裝vsftpd:
#apt-get install vsftpd
2、建立本地虛擬用戶:
#useradd -d /home/ftp virtual
3、在/home/ftp/創建目錄並改變其屬性和它的宿主
#chown virtual /home/ftp
#chmod 700 /home/ftp
4、改變web發佈頁所在目錄(/var/www)屬性和它的宿主
#chown virtual /var/www/wordpress
#chmod 775 /var/www/wordpress (可根據具體情況修改這個權限)
5、創建ftp用戶配製文件目錄:/etc/vsftpd/user_conf
#mkdir /etc/vsftpd/user_conf
6、在/etc/vsftpd/user_conf目錄中創建以用戶名命名的配置文件web、download、admin
“download”文件內容如下:
local_root=/home/ftp (當然,你高興也可以設置成其它,但要注意virtual用戶對此目錄的權限)
anon_world_readable_on
注意:以下文件的每項配置後不能帶多餘的空格
“admin”文件內容如下:
local_root=/home/ftp
anon_world_readable_on
write_enable=YES (寫權限)
anon_mkdir_write_enable=YES (新建目錄權限)
anon_upload_enable=YES(上傳權限)
anon_other_write_enable=YES(刪除/重命名的權限)
“wordpress”文件內容如下:
local_root=/var/www
anon_world_readable_on
anon_umask=022 (由於web頁面的特殊性,故單獨設置上傳文件權限爲755,此掩碼值可根據具體情況更改)
write_enable=YES (寫權限)
anon_mkdir_write_enable=YES (新建目錄權限)
anon_upload_enable=YES(上傳權限)
anon_other_write_enable=YES(刪除/重命名的權限)
7、在/etc/vsftpd.conf加入或者更改以下配置語句:
anonymous_enable=NO (當然你也可以設成YES,同時允許匿名用戶登陸)
local_enable=YES (必須置YES,因爲虛擬用戶是映射到virtual這個本地用戶來訪問的)
guest_enable=YES(啓用虛擬用戶)
guest_username=virtual(將虛擬用戶映射爲本地virtual用戶)
pam_service_name=ftp.vu(指定PAM配置文件爲ftp.vu)
user_config_dir=/etc/vsftpd/user_conf(指定不同虛擬用戶配置文件的存放路徑)
以下步驟方法一和方法二略有不同,具體如下:
方法一(帳號和密碼保存在數據庫文件中) :
8、建立用戶列表logins.txt 內容如下
wordpress(帳號)
wordpress(用戶密碼)
download (帳號)
download (用戶密碼)
admin (帳號)
admin (用戶密碼)
9、安裝: libdb3-util,目的:可以使用db3_load
#apt-get install libdb3-util
注意:在debian 6中,libdb3-util包已經被移除,現在是:
aptitude install db4.6-util (db4.6-util、db4.7-util、db4.8-util 都可以)
10、建立訪問者數據文件
#db3_load –T –t hash –f /tmp/logins.txt /etc/vsftpd/vsftpd_login.db
注意:在debian6中應該將db3_load更換爲db4.6_load或者第九步安裝的版本
11、在/etc/pam.d/中創建文件ftp.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
方法二(帳號寫入MySQL數據庫):
8、安裝Mysql:
#apt-get install mysql-server mysql-client
爲了安全,請給Mysql設置密碼:
#mysqladmin password ***** (****就是你新設的Mysql的密碼)
9、將虛擬用戶帳號和密碼保存在Mysql數據庫中:
我們建立數據庫vsftpdvu,表users,字段name和passwd用於保存虛擬用戶的用戶名和口令,同時增加三個虛擬用戶download、admin 、web。
#mysql –p
mysql>create database vsftpdvu;
mysql>use vsftpdvu;
mysql>create table users(name char(16) binary,passwd char(16) binary);
mysql>insert into users (name,passwd) values ("download",password("****"));(此下的***是download用戶的密碼)
mysql>insert into users (name,passwd) values ("admin",password("*****"));(此處的***是admin用戶的密碼)
mysql>insert into users (name,passwd) values ("web",password("*****")); (此處的***是web用戶的密碼)
mysql>quit
10、授權virtual可以讀vsftpdvu數據庫的users表。
#mysql -u root mysql -p
mysql>grant select on vsftpdvu.users to virtual@localhost identified by "*****"; ((****並非步驟8中的密碼)
mysql>quit
如果要驗證剛纔的操作是否成功可以執行下面命令:
#mysql -u virtual –p**** vsftpdvu (****是步驟10中設的密碼)
mysql>select * from users;
如果成功,將會列出download、web、apollo和加密後的密碼。
11、安裝MySQL的PAM驗證
#apt-get install libpam-mysql
12、我們要設置vsftpd的PAM驗證文件。新建開/etc/pam.d/ftp.vu文件,加入以下內容:
auth required pam_mysql.so user=virtual passwd=**** host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
(****是步驟10中設的密碼)
account required pam_mysql.so user=virtual passwd=**** host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
(****是步驟10中設的密碼)
crypt表示口令字段中口令的加密方式:
crypt=0,口令以明文方式(不加密)保存在數據庫中;
crypt=1,口令使用UNIX系統的DES加密方式加密後保存在數據庫中;
crypt=2,口令經過MySQL的password()函數加密後保存。
最後,重新啓動VSFTPD
#/etc/init.d/vsftpd restart
用filezilla 連接時可能會報 服務器發回了不可路由的地址。使用服務器地址代替 的錯誤