Centos6下vsftpd基於mysql認證創建虛擬用戶

一,安裝環境以及安裝的軟件:

1,CentOS release 6.4 (Final) [IP:192.168.1.110]

2,vsftpd-2.2.2-13.el6_6.1.x86_64

3,pam_mysql-0.7-0.12.rc1.el6.x86_64

4,mysql-5.6.16(編譯安裝)

二,在數據庫上創建登錄ftp的賬號和密碼

1,創建對應的database,遠程授權登錄賬號並創建表用來存儲登錄ftp賬號密碼。

mysql> create database vsftpd;
mysql> grant select on vsftpd.* to 'vsftpd'@‘192.168.1.110’ identified by 'vsftpd';
 
mysql> flush privileges;
mysql> use vsftpd;
mysql> create table users (id int AUTO_INCREMENT NOT NULL,name char(20) binary NOT NULL,password char(48) binary NOT NULL,primary key(id));

2,添加虛擬用戶

  mysql> insert into users(name,passwordvalues('test',password('test'));

  注意:此處對應的加密方法是基於PASSWORD函數加密後存儲

三,配置vsftpd

1,創建vsftpd通過PAM模塊和mysql認證時所需要的文件:

vim /etc/pam.d/vsftpd.mysql

auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=192.168.1.110 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=192.168.1.110 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

此處可能會遇到的問題:

1)pam_mysql.so基於unix sock連接mysql服務器時可能會出問題,,授權一個遠程連接的mysql並訪問vsftpd數據庫的用戶會避免此問題出現。

通過查看日誌文件/var/log/secure可能出現如下問題:server vsftpd[20453]: pam_mysql - MySQL error (Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' 

2)crypt=Num中 Num=0:表示不加密;Num=1:表示incrypt;Num=2:表示基於mysql的PASSWORD函數;Num=3:表示基於MD5認證。

此處創建虛擬用戶時基於PASSWORD函數,所以crypt=2;

否則通過查看日誌文件/var/log/secure可能出現如下問題:vsftpd[23068]: pam_mysql - SELECT returned no result. 密碼匹配不正確,查詢不到結果。


2,修改vsftpd的配置文件,使其適應mysql認證,建立虛擬用戶映射的系統用戶及對應的目錄

useradd -s /sbin/nologin -d /var/homeftp vuser

chmod go+rx /var/homeftp   #確保屬組用戶和其他用戶對vuser目錄有r,x權限

確保/etc/vsftpd.conf中已經啓用了以下選項

local_enable=YES                           #此處必須爲YES,否則登錄失敗

write_enable=YES

chroot_local_user=YES                      #將用戶禁錮在其家目錄中

添加以下選項

guest_enable=YES                           #啓用後所有的非匿名登入者都視爲guest_username定義的用戶登錄

guest_username=vuser                       #虛擬用戶通過映射到vuser用戶登錄

user_config_dir=/etc/vsftpd/vusers_config  #虛擬用戶的配置文件在此目錄下定義

pam_service_name=vsftpd.mysql              #pam模塊連接mysql時認證文件


3,配置虛擬用戶具有不同的訪問權限

    vsftpd可以在配置文件目錄中爲每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名和虛擬用戶的用戶名必須相同。配置文件目錄可以是任意未使用目錄,需要在vsftpd.conf中指定其路徑及名稱。

1)創建所需要目錄,併爲虛擬用戶提供配置文件

# mkdir /etc/vsftpd/vusers_config/

# cd /etc/vsftpd/vusers_config/

# touch test

2)配置虛擬用戶的訪問權限

    虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。比如,如果需要讓test用戶具有上傳文件的權限,可以修改/etc/vsftpd/vusers_config/test文件,在裏面添加anon_upload_enable=YES

選項如下:

anon_upload_enable={YES|NO}        #虛擬用戶是否具有上傳權限

anon_mkdir_write_enable={YES|NO}  #虛擬用戶是否具有創建權限

anon_other_write_enable={YES|NO}  #虛擬用戶是否具有除上傳,創建之外的其他權限

anon_umask=022                        #虛擬用戶上傳文件權限(文件:666-022)(目錄:777-022)


遇到的問題:

因爲vsftp默認情況是工作在passive 模式下,連接進去後,敲命令後,出現227 然後卡在那邊。

wKiom1UvczGDIyY3AAC9ojcsWLU468.jpg

這是因爲iptables把服務器開發給客戶端的端口禁了,可以用passive關閉被動模式,進入主動模式。

還有一種方法就是在vsftpd.conf中增加分配傳輸數據的隨機端口:

pasv_min_port=50000

pasv_max_port=50999

然後增加iptables規則:

iptables -I INPUT 3 -p tcp  --dport 50000:50999 -j ACCEPT




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