vsftpd虛擬用戶認證配置(vsftpd+pam+mysql)

一、準備所需要的程序包

mysql

pam_mysql

vsftpd

二、開始安裝

[root@localhost ~]# yum -y install mysql-server mysql-devel vsftpd pam_mysql
// 注意:pam_mysql由epel源提供,epel源需要自行設置

三、創建虛擬用戶賬號

1、創建數據庫及存儲用戶的表

[root@localhost ~]# service mysqld start
// 啓動mysql服務
[root@localhost ~]# mysql
mysql> create database vsftpd;    // 創建名爲vsftpd的數據庫
Query OK, 1 row affected (0.00 sec)

mysql> use vsftpd   // 切換當前數據庫爲vsftpd
Database changed
mysql> create table users(id int UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,name VARCHAR
(50) NOT NULL,password CHAR(48) NOT NULL);
Query OK, 0 rows affected (0.02 sec)  // 創建users表並建立對應字段用以存放虛擬用戶名和密碼

mysql>

2、創建一個數據庫用戶給vsftpd服務認證虛擬用戶時連接訪問數據使用

mysql> grant select on vsftpd.* to [email protected] identified by 'redhat';
Query OK, 0 rows affected (0.00 sec)  // 創建一個名爲vsftpd的用戶,並且賦予它以vsftpd數據
所有表的查看權限,上面的IP地址是指定可以從哪個地址訪問mysql數據庫

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

3、向表中添加虛擬用戶賬號和密碼

mysql> insert into users(name,password) values('tom','redhat'),('jerry','redhat');
Query OK, 2 rows affected (0.00 sec)  // 向users表中插入兩行數據,分別對應兩個用戶名和密碼
Records: 2  Duplicates: 0  Warnings: 0

需要注意的是:這裏使用的是明文存放密碼,建議使用加密存放,例如password()函數,使用方法如下:

mysql> insert into users(name,password) values('tom',password('redhat')),('jerry',passowrd
('redhat'));


三、配置vsftpd

1、建立pam認證所需文件

[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql
auth required /lib/security/pam_mysql.so user=vsftpd passwd=redat host=172.16.20.242 db=
vsftpd table=uesrs usercolumn=name passwdcolumn=password crypto=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=redhat host=172.16.20.242 
db=vsftpd table=users usercolumn=name passwdcolumn=password crypto=0
// /lib/security/pam_mysql.so指定使用pam_mysql.so進行認證
// user=vsftpd 指定數據庫用戶名
// passwd=redhat 指定數據庫用戶密碼
// host=172.16.20.242 指定同過哪個主機地址進行數據庫連接
// db=vsftpd 指定數據庫名
// table=users 指定存儲虛擬用戶名和密碼的表
// usercolumn=name 指定存儲用戶名的字段
// passwdcolumn=password 指定存儲虛擬用戶密碼的字段
// crypto=0 指定虛擬用戶密碼存放的加密方式,0代表不加密,1代表使用crypt函數加密,2代表使用password()函數加密
,3代表使用md5方式加密,4代表使用sha1方式加密

2、修改vsftpd的配置,使其適應mysql認證

[root@localhost ~]# useradd -s /sbin/nologin -d /var/ftproot vuser
[root@localhost ~]# chmod go+rx /var/ftproot
// 創建一個虛擬用戶映射的系統用戶,用以訪問ftp服務,由於其家目錄就是fpt服務的訪問目錄,所以
要給予其家目錄其他用戶可以訪問的權限

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES   // 允許匿名用戶訪問,因爲虛擬用戶的實質就是匿名用戶
local_enable=YES   // 允許本地用戶訪問,因爲虛擬用戶需要映射到本地用戶
write_enable=YES   // 開啓對訪問目錄的寫權限,根據需求開啓
anon_upload_enable=NO   // 禁止匿名用戶上傳,根據需求配置
anon_mkdir_write_enable=NO   // 禁止虛擬用戶創建和刪除目錄,根據需求配置
chroot_local_user=YES   // 禁止用戶切換目錄

guest_enable=YES   // 開啓虛擬用戶功能
guest_username=vuser    // 設定虛擬用戶的映射的本地用戶爲vuser

pam_service_name=vsftpd.mysql    // pam的配置文件默認爲vsftpd,由於上面做了修改,這裏需要修
改成我們配置的文件


四、啓動vsftpd服務,並測試配置效果

[root@localhost ~]# service vsftpd start

使用windows的CMD訪問

836101ef13155b5f301747cd107457b3.png


五、配置虛擬用戶的訪問權限

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

1、配置vsftpd爲虛擬用戶使用配置文件目錄

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_config   // 設定虛擬用戶配置文件的存放目錄

2、創建相應目錄並創建配置文件

[root@localhost ~]# mkdir /etc/vsftpd/vusers_config
[root@localhost ~]# touch tom jerry

3、配置虛擬用戶的訪問權限

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

需要注意的是,之前在/etc/vsftpd/vsftpd.conf中的相關於匿名用戶的權限則需要關閉掉,避免衝突,如果vsftpd.conf中配置了權限,而虛擬用戶的配置文件中沒有配置,那麼會繼承vsftpd.conf中的權限

如果vsftpd.conf中配置了權限,而虛擬用戶的配置文件中也有配置嗎,那麼會繼承虛擬用戶的配置文件中的配置

[root@localhost ~]# vim /etc/vsftpd/vusers_config/tom
anon_upload_enable=YES
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}


寫的比較潦草,如有遺漏錯誤和爭議之處,歡迎大家的批評指正和討論,謝謝。

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