vsftp與mysql結合進行用戶驗證

VSFTP是一個基於GPL發佈的類Unix系統上使用的FTP服務器軟件,編制者的初衷是代碼的安全。

特性

 1、它是一個安全、高速、穩定的FTP服務器;

 2、它可以做基於多個IP的虛擬FTP主機服務器;

 3、匿名服務設置十分方便;

 4、匿名FTP的根目錄不需要任何特殊的目錄結構,或系統程序或其它的系統文件;

 5、不執行任何外部程序,從而減少了安全隱患;

 6、支持虛擬用戶,並且每個虛擬用戶可以具有獨立的屬性配置;

 7、可以設置從inetd中啓動,或者獨立的FTP服務器兩種運行方式;

 8、支持多種認證方式

 9、支持帶寬限制;

本文介紹通過pam.d模塊基於mysql現實vsftp虛擬用戶認證

安裝環境

wKioL1YJ-WiBi0XbAAA8glU5O6I936.jpg

先安裝、配置vsftp

[root@vsftp ~]# yum install -y vsftpd
[root@vsftp ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd #vsftp日誌輪詢
/etc/pam.d/vsftpd #pam.d的vsftpd
/etc/rc.d/init.d/vsftpd #啓動服務腳本
/etc/vsftpd
/etc/vsftpd/ftpusers #用戶控制文件
/etc/vsftpd/user_list #用戶控制文件
/etc/vsftpd/vsftpd.conf  #配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-2.2.2
##此處省略幫助文件##
/usr/share/doc/vsftpd-2.2.2/TUNING
/usr/share/doc/vsftpd-2.2.2/vsftpd.xinetd
/usr/share/man/man5/vsftpd.conf.5.gz
/usr/share/man/man8/vsftpd.8.gz
/var/ftp
/var/ftp/pub #匿名用戶共享文件目錄

查看默認配置文件啓用選項

[root@vsftp vsftpd]# cat  vsftpd.conf |grep -v "^#"
anonymous_enable=YES #允許匿名用戶
local_enable=YES #允許本地用戶
write_enable=YES #允許本地用戶可寫
local_umask=022  #本地創建文件的umask
dirmessage_enable=YES #創建目錄時消息提示
xferlog_enable=YES 
connect_from_port_20=YES 
xferlog_std_format=YES
listen=YES #監聽端口

pam_service_name=vsftpd #pam模塊
userlist_enable=YES #用戶控制
tcp_wrappers=YES

其他一些重要選項

anonymous_enable=YES    開始匿名用戶

anon_upload_enable=YES  允許匿名用戶上傳文件

anon_mkdir_write_enable=YES  允許匿名用戶創建目錄

anon_other_write_enable=YES  允許匿名用戶其他權限,如刪除,重命名文件

chown_uploads=YES #是否改變屬主

chown_username=user #上傳文件修改成屬主

chroot_local_user={Yes|No}    #限制本地用戶禁錮其在家目錄中

chroot_list_enable={Yes|No}   #限制chroot_list列表中用戶禁錮其在家目錄中

chroot_list=/etc/vsftp/chroot_list #用於指定用戶列表文件,該文件用於控制哪些用戶可以切換到用戶家目錄的上級目錄

xferlog_file=/var/log/vsftp.log  # 配置日誌目錄

ftpd_banner=Welcome to blah FTP service. #登錄提示信息

banned_file=/etc/vsftpd/banned_file 

ls_recurse_enable=YES #用戶是否能夠使用ls命令

連接限制

max_clients 最大併發鏈接數

max_per_ip  每IP最大併發數

限制速率

anon_max_rate

local_max_rate

上傳文件umask

anon_umask 022

local_umask 022

虛擬用戶設置

guest_enable= YES/NO  #啓用虛擬用戶。默認值爲NO。

guest_username=ftp   #這裏用來映射虛擬用戶。默認值爲ftp

user_config_dir=/etc/vsftpd/vusers_config  #爲虛擬用戶提供配置文件


配置文件裏面啓用下面選項

ls_recurse_enable=YES

添加測試用戶

ls_recurse_enable=YES
[root@vsftp ~]# useradd -s /sbin/nologin test #添加測試用戶
[root@vsftp ~]# password test
[root@vsftp ~]# touch /home/test/abc.txt #下創建個測試文件
[root@vsftp ~]#service vsftpd start
[root@vsftp ~]# lftp [email protected]
lftp [email protected]:/> ls     
-rw-r--r--    1 0        0               0 Sep 29 01:44 abc.txt
#test賬戶可用。

在本地上安裝msyql-devel包、pam_mysql包

[root@vsftp vsftpd]# yum install -y mysql-devel pam_mysql

在192.168.0.55mysql上給vsftp授權

MariaDB [(none)]> create database vsftpd;
MariaDB [(none)]> grant all on vsftpd.* to [email protected] identified by 'www.magedu.com';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> use vsftpd;
MariaDB [vsftpd]> create table users (
 id int AUTO_INCREMENT NOT NULL,
 name char(20) binary NOT NULL,
password char(48) binary NOT NULL,
 primary key(id)
 );
MariaDB [vsftpd]> insert into users(name,password) values('tom',password('magedu'));
MariaDB [vsftpd]> insert into users(name,password) values('test',password('magedu'));
MariaDB [vsftpd]> show tables;
+------------------+
| Tables_in_vsftpd |
+------------------+
| users            |
+------------------+
1 row in set (0.03 sec)

回到vsftpd主機,查看是否能夠鏈接到mysql

[root@vsftp vsftpd]# mysql -uvsftpd -h192.168.0.55 -p
Enter password: 

mysql> use vsftpd;

mysql> select * from users;
+----+---------+-------------------------------------------+
| id | name    | password                                  |
+----+---------+-------------------------------------------+
|  1 | tom     | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
|  2 | test    | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
+----+---------+-------------------------------------------+
4 rows in set (0.01 sec)

已OK

vi /etc/pam.d/vsftpd.mysql  #添加如下兩行

auth required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=192.168.0.55 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=192.168.0.55 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

再次編譯配置文件/etc/vsftpd/vsftpd.conf 

確保下面選項是OK

anonymous_enable=NO

local_enable=YES

write_enable=YES

chroot_local_user=YES

pam_service_name=vsftpd.mysql

vi /etc/vsftpd/vusers_config/tom

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

給test家目錄授權,有些虛擬用戶都會到test家目錄執行讀寫,所以要給test家目錄讀寫權限。

root@vsftp vsftpd]# chmod 777 /home/test/
[root@vsftp vsftpd]# cd /etc/
[root@vsftp etc]# lftp [email protected]  #tom不是本地用戶,是在mysql創建的一個虛擬用戶
Password: 
lftp [email protected]:/> ls
-rw-r--r--    1 0        0               0 Sep 29 01:44 abc.txt
lftp [email protected]:~> put issue   
47 bytes transferred                     
lftp [email protected]:/> ls
-rw-r--r--    1 0        0               0 Sep 29 01:44 abc.txt
-rw-------    1 500      500            47 Sep 29 02:31 issue
[root@vsftp etc]# cd /home/test/
[root@vsftp test]# ll
total 4
-rw-r--r-- 1 root root  0 Sep 29 09:44 abc.txt
-rw------- 1 test test 47 Sep 29 10:31 issue #tom用戶以test身份執行put


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