RHEL6____VSFTPD服務器配置之一
——使用mysql實現虛擬用戶的訪問
VSFTPD是一個很是優秀的FTP服務程序,不少大的站點都在使用,其中支持虛擬用戶是vsftpd的一個特性,VSFTPD支持將用戶和密碼保存在本地數據文件、MYSQL數據庫以及LDAP目錄服務中,若是在企業中管理的用戶數量比較多或者用戶變化比較頻繁時,建議使用mysql來實現虛擬用戶的認證。
下面我在rhel6上來實現如下功能,具體步驟以下:
1、安裝vsftpd並設置開機自動啓動
yum -y install vsftpd
chkconfig vsftpd on
2.安裝mysql數據庫
yum -y install mysql-devel mysql-server
3.啓動mysql服務並設置開機自動啓動
service mysqld start
chkconfig mysqld on
4.設置mysql的管理員密碼,本例密碼設置爲xiaofeixia
mysqladmin -u root password xiaofeixia
5.創建用於虛擬用戶的數據庫、表,並建立虛擬用戶mary和jack
(2)建立用於存放虛擬用戶的數據庫vftp
(3)使用vftp數據庫
(4)在vftp數據庫中建立表userifno,包含name和pwd兩個字段
(5)在表中插入mary和jack兩條用戶的記錄,其中123456爲密碼
(6)查詢用戶信息
6.在mysql中建立一個專門用於讀取數據庫中虛擬用戶信息的用戶(ftpuser),這樣作的目的主要是基於安全的考慮。
mysql> grant select on vftp.userinfo to ftpuser@localhost identified by 'xiaofeixia';
mysql> flush privileges;
7. 測試ftpuser是否能夠正常查詢數據庫信息
8.建立本地映射用戶,並修改其家目錄的權限
useradd -d /var/ftp/guest -s /sbin/nologin guest
注: -d 指定家目錄的位置
-s 指定用戶登陸的shell,若是爲用戶分配的shell是/sbin/nologin,則該用戶是不能登陸到系統的。
chmod o+rw /var/ftp/guest
9.編輯/etc/vsftpd/vsftpd.conf,添加如下兩句,用於啓用虛擬帳號,並禁用匿名帳號
guest_enable=yes
guest_username=guest
anonymous_enable=no
10.安裝支持mysql認證的PAM模塊。
其下載地址爲:http://sourceforge.net/projects/pam-mysql/files/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz/download
tar xvzf pam_mysql-0.7RC1.tar.gz -C /usr/src
cd /usr/src/pam_mysql-0.7RC1/
./configure
make
make install
注:若是在./configure的過程當中出現如下錯誤
configure: error: Cannot find pam headers. Please check if your system is ready for pam module development.
建議安裝pam-devle軟件包
yum -y install pam-devel
安裝完以後,相應的庫文件被安裝在/lib/security目錄中。
Libraries have been installed in:
/lib/security
注:因爲個人系統是64位的,相應的pam認證庫文件是放在/lib64/security目錄中,因此我把對pam_mysql.la和pam_mysql.so作了一個軟連接,其實這一步大可不作,只要你在pam文件中指定正確的位置便可
11.編輯pam認證文件/etc/pam.d/vsftpd,將原有的內容註釋並添加如下兩行內容以使用mysql認證
auth required pam_mysql.so user=ftpuser passwd=xiaofeixia host=localhost db=vftp table=userinfo usercolumn=name passwdcolumn=pwd crypt=0
account required pam_mysql.so user=ftpuser passwd=xiaofeixia host=localhost db=vftp table=userinfo usercolumn=name passwdcolumn=pwd crypt=0
其中user 是讀取mysql數據庫時使用的用戶名,passwd 爲其對應的密碼
host指定mysql數據庫所在的主機
db指定存放虛擬用戶的數據庫,在以上作了定義
table指定存放虛擬用戶的表
usercolumn、passwdcolumn是指定表中存放用戶名和密碼的字段。
crypt指定密碼字段是以什麼方式存儲到數據庫中
(1)crypt=0表示以明文保存密碼
(2)crypt=1表示使用crypt( )函數加密保存密碼
(3)crypt=2表示使用mysql中的password( )函數加密保存密碼
(4)crypt=3表示使用md5的方式保存密碼
12.啓動ftp服務器
service vsftpd start
13. 在客戶端測試
如圖全部沒有任何反應,懷疑多是開啓了iptables防火牆,如 下圖所示,真是防火牆在搗的鬼。
怎麼辦呢?要麼使用iptables –F 把防火牆默認規則清空,但不推薦,建議在INPUT鏈上插入一條規則
iptables -I INPUT 2 -p tcp - -dport 21 -j ACCEPT
再次嘗試訪問,能夠輸入用戶名和密碼,但卻登陸失敗,以下圖
難道是我以上的配置出錯了,檢查以後發現並無什麼問題,百思不得其解,後來忽然想到多是默認開啓了selinux的緣由,好好檢查一下
[root@mail ~]# getenforce
Enforcing
發現SELinux是開啓的。
把SELinux的模式設置爲permissive模式再試試。發現能夠正常登陸
[root@mail ~]# setenforce 0
[root@mail ~]# getenforce
Permissive
經過以上判斷能夠認爲是selinux在影響咱們的正常訪問,查看相關日誌以下
經過日誌咱們知道了原來selinux策略阻止了對mysql數據庫的訪問,找到癥結了那問題解決就變是容易起來了,使用下面命令容許ftp 服務器使用mysql認證
[root@mail security]# setsebool -P ftpd_connect_db 1
再把selinux模式設置爲enforce狀態
[root@mail security]# setenforce 1
使用虛擬用戶能夠正常訪問了,真是好事多磨。
其實寫下此文的目的是幫助本身作個總結,同時也但願此文對你們有所幫助,若有不當之處,還請你們多多指正。