debian vsftpd配置

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_only=NO (使download用戶的能下載,也只能下載;寫成YES,將不能列出文件和目錄)

注意:以下文件的每項配置後不能帶多餘的空格

“admin”文件內容如下:
local_root=/home/ftp
anon_world_readable_only=NO
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_only=NO
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 連接時可能會報 服務器發回了不可路由的地址。使用服務器地址代替 的錯誤

解決方法:更改Filezilla設置,編輯-設置-連接-FTP-被動模式,將“使用服務器的外部ip地址來代替”改爲“回到主動模式”即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章