熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

Debian+vsftpd+MySQL實現虛擬用戶

2013-11-23 20:57:00  來源: MySQL 
    前些天用vsftpd+mysql實現虛擬用戶登錄把偶的菜鳥筆記和大家分享一下有什麼問題請指正
特別申明:本文不適合Linux老鳥們
HTML版本:



Debian+vsftpd+MySQL實現虛擬用戶
(posted by guitarbug @ )

需求

虛擬用戶登錄
    由於之前配置成功了postfix+MySQL虛擬用戶登錄體會到了使用虛擬用戶的好處和靈活性所以這次也考慮采用虛擬用戶並且將FTP虛擬用戶的信息也存儲在MySQL中這樣以後用PHP等寫一些WEB GUI的管理程序統一管理用戶還是蠻方便的

限制IP的匿名登錄
    開放匿名登錄但是只允許特定的IP可以匿名登錄

不同用戶不同目錄不同權限
    聽起來有點像繞口令吧舉例來說個用戶分別是普通用戶(normal)和管理員(admin)FTP有個目錄分別是incoming和pub要實現如下權限設置:



代碼:

  incoming pub normal 讀/寫 只讀 admin 讀/寫 讀/寫


通過FTP管理Web站點
    服務器上還架設了Apache而網站管理員對Linux又不是很熟悉而且也不想開放一個帳號給網站管理員以免他登錄到系統上去把系統搞的亂所以參考Internet上提供虛擬主機的流行做法就是通過FTP來管理網站所以需要提供一個可供網站管理員登錄FTP進行網站管理的帳號

擴展功能
    待定

選擇FTP服務器軟件
    Linux下架設FTP站點有很多優秀的FTP服務器軟件可供選擇例如WuFTPDPureFTPDProFTPD以及vsFTPD等等要想選擇一個適合自己需求的FTP服務器軟件也需要費點腦筋才行對於我來說選擇 vsftpd(very secure FTP daemon)主要有以下兩點原因:

選擇原則一
    有人說哪個FTPD是你最熟悉的就用哪個不過由於我之前沒有在Linux下架設FTP站點的經驗所以對我來說一切都是新的起點在vsftpd的官方主頁上看到了Debian官方FTPRH官方FTP等都使用了vsftpd於是隨波逐流這樣看起來會有面子些~

選擇原則二
    第二點很大程度取決於vsftpd(very secure FTP daemon)的名字因為它是很安全的FTP軟件嘛哈哈再說Debian官方等FTP都使用了vsftpd選擇它應該沒錯的~

PS:FTP服務器軟件的選擇可以參考鳥哥的Linux私房菜中的簡易vsftpd服務器架設一文

實現
    基於Debian GNU/Linux Sarge 和 vsftpd

需要的軟件包
)vsftpd
    very secure FTP daemon

)mysqlservermysqlclient
    前者是MySQL數據庫服務器用於存儲虛擬用戶信息後者提供一個命令行的MySQL Client 由於我之前配置postfix時已經安裝過了MySQL所以我不必安裝這個包了^_^

)libpammysql 
    vsftpd是通過PAM驗證用戶信息的這個包可以讓PAM去讀取MySQL完成驗證

安裝
以root登錄Debian輸入以下命令搞定~


代碼:

  #aptget install vsftpdlibpammysql


創建一個必要的本地用戶
    雖說是虛擬用戶不過由於虛擬用戶的信息存儲在MySQL數據庫中所以還是需要一個能夠讀取MySQL數據庫的本地用戶

)創建本地用戶的家目錄此目錄也是FTP的家目錄


代碼:

  #mkdir /home/ftp


)創建名為ftpguest的本地用戶


代碼:

  #useradd ftpguest d /home/ftp


)修改FTP家目錄的所有者和組


代碼:

  #chown ftpguestnogroup /home/ftp

   

  配置MySQL數據庫

)創建用於存儲虛擬用戶信息的數據庫ftpvuser




代碼:

  #mysqladmin u root p create ftpvuser



)連接數據庫


代碼:

  #mysql u root p


)創建用於存儲虛擬用戶信息的表users


代碼:

  mysql>use ftpvuser; mysql>CREATE TABLE users (username varchar() NOT NULL
password varchar() NOT NULL
PRIMARY KEY (username)) TYPE=MyISAM;


)讓本地用戶ftpguest能讀取ftpvuser數據庫的users表的內容
注:YourPassword用於設定ftpguest訪問數據庫的密碼


代碼:

  mysql>grant select on ftpvuserusers to ftpguest@localhost identified
by YourPassword; mysql>flush privileges;


)建立虛擬用戶


代碼:

  mysql>insert into users (usernamepassword) values (normal); mysql>insert into users (usernamepassword) values (admin); mysql>insert into users (usernamepassword) values (webmaster);



)完成MySQL的配置


代碼:

  mysql>quit;


配置vsftpd的PAM驗證

)打開PAM配置文件


代碼:

  #nano /etc/pamd/vsftpd



)將以前的內容注釋掉然後添加下面行內容
注:YourPassword就是剛才在前面設定的ftpguest訪問數據庫的密碼


代碼:

  auth required pam_mysqlso user=ftpguest passwd=YourPassword host=localhost
db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=
account required pam_mysqlso user=ftpguest passwd=YourPassword host=localhost
db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=


配置vsftpd

)打開vsftpd的配置文件


代碼:

  #nano /etc/nf

注意:一旦修改了/etc/nf文件的內容必須重啟vsftpd才能使新的設置生效方法是:


代碼:

  #/etc/initd/vsftpd stop #/etc/initd/vsftpd start

直接#/etc/initd/vsftpd restart好像不起作用?

)修改nf文件如下


代碼:

  #關閉匿名用戶訪問 #anonymous_enable=YES #開啟本地用戶訪問 local_enable=YES #開啟虛擬用戶訪問 guest_enable=YES guest_username=ftpguest #將本地用戶限制在自己的家目錄這樣可避免FTP用戶訪問到其他的系統目錄 chroot_local_user=YES



) OOPS: cap_set_proc
    趕快登錄FTP試一下吧不過為什麼無法登錄呢?服務器返回錯誤: OOPS: cap_set_proc
Google之這個錯誤似乎與SELinux有關解決辦法是加載capability模塊:


代碼:

  #modprobe capability

  為了讓Linux在啟動時自動加載此模塊把這個模塊放到/etc/modules中即可

  )限制IP的匿名登錄
    要想限制登錄vsftpd的客戶端的IP地址要用到一個叫TCP Wrappers的東東對於TCP Wrappers我的理解是如果在vsftpd中啟用了TCP Wrappers的話每次客戶端向vsftpd發起一個連接請求的時候vsftpd首先會把這個連接請求交給TCP Wrappers處理如果客戶端的IP被TCP Wrappers放行的話才能繼續與vsftpd繼續會話否則直接就被拒絕服務了不知道對不對?

a修改/etc/nf




代碼:

  #啟用TCP Wrappers tcp_wrappers=YES


b修改/etc/hostsdeny
    拒絕所有向vsftpd發起連接請求的IP不過如果hostsdeny與hostsallow沖突的話以hostsallow優先處理這好像就是先deny所有然後在hostsallow開放特權呵呵


代碼:

  #拒絕所有連入vsftpd的IP先 vsftpd: ALL


c修改/etc/hostsallow
    在這裡開放允許登錄vsftpd的IP地址關於VSFTPD_LOAD_CONF環境變量vsftpd的man是這麼說的:
If tcp_wrappers sets the VSFTPD_LOAD_CONF environment variable then the vsftpd session will try and load the vsftpd configuration file specified in this variable


代碼:

  #限制可以匿名登錄vsftpd的IP地址 vsftpd: : setenv VSFTPD_LOAD_CONF /etc/vsftpd/vsftpdanonymous #允許vsftpd的虛擬用戶以任何IP連接FTP vsftpd: ALL : setenv VSFTPD_LOAD_CONF /etc/vsftpd/vsftpdvirtual


d修改/etc/vsftpd/vsftpdanonymous


代碼:

  #mkdir /etc/vsftpd/ #nano /etc/vsftpd/vsftpdanonymous #允許匿名登錄 anonymous_enable=YES


e修改/etc/vsftpd/vsftpdvirtual


代碼:

  #nano /etc/vsftpd/vsftpdvirtual #不允許匿名登錄 anonymous_enable=NO


)為不同的用戶設置不同的訪問權限

a激活單個用戶配置功能增加以下配置行到vsftpd的配置文件:


代碼:

  #nano /etc/nf #指定不同用戶配置文件的存放路徑 user_config_dir=/etc/vsftpd/vsftpd_user_conf


b普通用戶:下載/上傳
編輯/etc/vsftpd/vsftpd_user_conf/normal
注意:用戶的配置文件名與用戶名一致不過匿名用戶的配置文件名為ftp而不是anonymous


代碼:

  #mkdir /etc/vsftpd/vsftpd_user_conf #nano /etc/vsftpd/vsftpd_user_conf/normal

加入以下內容:
#允許下載


代碼:

  anon_world_readable_only=NO #允許寫入上傳以及建立目錄 write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES

  c管理員用戶:下載/上傳/刪除等




代碼:

  #cp /etc/vsftpd/vsftpd_user_conf/normal /etc/vsftpd/vsftpd_user_conf/admin

編輯admin的配置文件:


代碼:

  #nano /etc/vsftpd/vsftpd_user_conf/admin

管理員除了擁有普通用戶的權限以外還擁有刪除/重命名/改變文件屬性的權限
加入以下內容:


代碼:

  #允許重命名和刪除文件 anon_other_write_enable=YES #虛擬用戶擁有與本地用戶相同的權限(由於chmod僅僅對本地用戶有效所以如果想要虛擬用戶擁有chmod的權限這一項必須激活) virtual_use_local_privs=YES #允許修改文件屬性 chmod_enable=YES


d網站管理員


代碼:

  #cp /etc/vsftpd/vsftpd_user_conf/admin /etc/vsftpd/vsftpd_user_conf/webmaster

編輯webmaster的配置文件:


代碼:

  #nano /etc/vsftpd/vsftpd_user_conf/webmaster


加入以下內容:


代碼:

  #將FTP家目錄指向網站的家目錄(我的www目錄使用Apache默認的目錄) local_root=/var/www #默認情況下上傳到FTP站點的文件的擁有者都是ftpguest其他用戶是沒有訪問權限的 #所以當訪問網站的時候會出現沒有權限訪問該文件的錯誤這是由於Apache的用戶 #wwwdata無法訪問/var/www下的文件造成的把umask設置成甚至即可解決這個問題 local_umask=


e為normaladmin用戶設置對incomingpub目錄不同的權限
    閱讀了一遍vsftpd man中關於權限的相關設置似乎沒有單獨設置每個目錄權限的地方?後來想到是不是可以利用Linux文件系統的文件權限設置來達到此目的以前在Windows下利用IIS來架設站點時我就是利用NTFS權限設置來達到控制不同用戶對目錄的訪問權限不過試了一下還是無法完美的實現以下的權限控制:


代碼:

  incoming pub normal 讀/寫 只讀 admin 讀/寫 讀/寫

    舉例來說可以通過把pub設置成只讀來控制normal用戶只讀pub的權限不過admin對pub也是只讀了不過還好因為admin擁有修改目錄屬性的權限如果admin用戶想要通過FTP來完成管理pub目錄的話可以臨時把pub目錄修改成讀/寫屬性

小結

vsftpd的目標是完成一個簡易而且安全性不低的FTPD功能嘛似乎還是有點不足特別是目錄權限這方面的設置如果是對目錄權限有比較復雜的需求的話可以考慮一下Proftpd

在測試的時候除了使用FTP Client工具以外最好再使用Sniffer類的軟件作為輔助因為有時候FTP Client並不會完全把FTPD返回信息呈現在你面前而有時候這些信息對排除FTPD故障會有很大幫助的而一旦使用Sniffer類的軟件所有的客戶端與服務器端交互的信息都不會漏掉的

參考

Manpage of VSFTPDCONF:


vsftp配置大全:
?tid=
From:http://tw.wingwit.com/Article/program/MySQL/201311/29336.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.