RHEL6---VSFTPD服務器配置之一:使用mysql實現虛擬用戶的訪問

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.建立用於虛擬用戶的數據庫、表,並創建虛擬用戶maryjack

(1)登錄mysql數據庫,注意p和密碼之間不能有空格

(2)創建用於存放虛擬用戶的數據庫vftp

(3)使用vftp數據庫

(4)vftp數據庫中創建表userifno,包含namepwd兩個字段

(5)在表中插入maryjack兩條用戶的記錄,其中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.lapam_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指定存放虛擬用戶的表

usercolumnpasswdcolumn是指定表中存放用戶名和密碼的字段。

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

使用虛擬用戶可以正常訪問了,真是好事多磨。

 

其實寫下此文的目的是幫助自己做個總結,同時也希望此文對大家有所幫助,如有不當之處,還請大家多多指正。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章