標籤:ftp 服務 mysql
前言:
在上一篇部落格中,我們已經實現了基於檔案認證的ftp服務,不過此方法也存在不少問題,比如過使用者資料不好管理呀,以明文儲存不安全呀。不能把使用者資料單獨存放在其他伺服器呀等等。所以此次我們把使用者資料放在mysql中,然後通過pam模組去mysql中找使用者資料來實現認證。主體的過程和上篇區別不大~那我們就開始把~
本文:
此次,我們的環境是centos6,因為centos7中的pam_mysql模組得自己手動編譯,所以就先使用centos6,不過兩者區別也不大,而且編譯pam_mysql模組也不難。老規矩,第一步先安裝要使用到的程式:
yum install vsftpd mysql-server pam_mysql
此次我們依然使用系統的ftp使用者來作為虛擬使用者登入後的guest。當然,也可以自行建立新的使用者,此處就不再示範啦~在centos7中記住一點,使用者的家目錄,使用者不可以有寫入權限喲。好吧,我們先在mysql中建立認證需要的資料庫和表~先啟動mysql服務
#service mysqld start#mysql #用mysql命令以匿名的方式串連到資料庫#mysql>CREATE DATABASE vsftpd; #建立名為vsftpd的資料庫mysql> GRANT SELECT ON vsftpd.* TO [email protected] IDENTIFIED BY ‘1234‘; #給mysql使用者 vsftpd許可權,讓其有查詢許可權,且密碼為1234,因為我們的mysqld和vsftpd在同一伺服器,所以host填寫的是localhost,如果你們的mysql在單獨的伺服器就添伺服器的地址啦~mysql>FLUSH PRIVILEGES; mysql>USE vsftpd; #進入我們的資料庫,開始建立表啦~~mysql>CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50)BINARY NOT NULL,password CHAR(48) BINARY NOT NULL); #建立一個名為users的表,有三個欄位分別是id為整型,主鍵,並且可以自增,name欄位 是有50位的字串,不可為空,password欄位,因為我們還要對密碼進行加密處理,處理後的長度是48位,所以長度是48 且不可為空mysql> INSERT INTO users(name,password) values(‘xiaofengfeng‘,password(‘1234‘));mysql> INSERT INTO users(name,password) values(‘xiaofengfeng2‘,password(‘1234‘));#添加兩個使用者,密碼都為1234
好啦~我們用於驗證的資料庫這邊已經建立完畢,接下就開始配置ftp伺服器啦,和上篇部落格沒太大區別,主要就是用了不同的pam模組,此處用到的是pam_mysql.so模組,首先我們先修改ftp的設定檔,只列出修改過的配置哈~
#/etc/vsftpd/vsftpd.confanonymous_enable=NO #進位匿名登入guest_enable=YES guest_username=ftp #所有登入的使用者在服務端都當作ftp使用者pam_service_name=vsftpd.mysql #pam的設定檔在/etc/pam.d目錄下需要 自己建立
然後我們來建立pam模組需要的配置,在/etc/pam.d目錄下建立檔案vsftpd.mysql
#/etc/pam.d/vsftpd.mysqlauth required pam_mysql.so user=vsftpd passwd=1234 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2account required pam_mysql.so user=vsftpd passwd=1234 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2#此處用到pam_mysql.so模組,資料庫的使用者名稱為vsftpd 密碼為1234 因為mysql資料庫在本地所以host為localhost,如果在遠端就寫ip地址,資料庫名為 vsftpd 表名為users 且要是用的使用者名稱在name欄位,用到的密碼在password欄位,因為密碼欄位是用musql的password()函數加密的,標號為2的密碼編譯演算法可以就是與mysql的password()函數對應,所以此處crypt為2
還是老規矩,檢查selinux是否關閉,iptables是否允許存取ftp服務。如果沒有問題我們就可以用資料庫的兩個帳號登入了。如果需要哪個使用者有上傳資料的功能可以參考上篇部落格,建立單獨的使用者設定檔,開啟匿名上傳功能。特別要注意的一點是,能讓ftp使用者對/var/ftp/pub有寫入權限,可以用acl也可以直接開放所有許可權,或者建一個屬主為ftp的目錄upload專門用來讓使用者ftp上傳檔案。
本文出自 “機制小風風” 部落格,請務必保留此出處http://xiaofengfeng.blog.51cto.com/8193303/1885913
搭建FTP-----實現基於mysql驗證的虛擬使用者