歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux配置 >> vsftp+pam+mysql整合虛擬帳號登錄

vsftp+pam+mysql整合虛擬帳號登錄

日期:2017/2/27 14:59:08   编辑:Linux配置

基本原理:

vsftp的有三種用戶類型,分別是匿名用戶、系統用戶、虛擬用戶
某種意義上來說,匿名用戶也是系統用戶,只系統用戶的一個映射。而公開的ftp(比如虛擬主機),都不會使用系統用戶作為ftp的帳號,而更多的采用了虛擬用戶,這樣能保證系統的安全性
使用虛擬帳號,也就需要一個存放虛擬帳號的容器,可以是一個文本列表,也可以是活動目錄,而更多的是使用數據庫來存放
在vsftp中,無論系統用戶還是虛擬用戶,都是使用pam作為用戶驗證手段的,而在pam中默認是不支持mysql模塊的,所以要手動編譯安裝mysql模塊

整體思路:

以pam為用戶認證的中間層調用和驗證mysql中的虛擬用戶數據。在vsftp中開啟虛擬用戶認證,認證方法調用pam中的mysql認證和授權模塊,將虛擬用戶存放於mysql中。

1. 安裝vsftp和mysql

[root@localhost ~]#yum -y install vsftpd mysql-server mysql-devel pam-devel
在PAM中默認是沒有mysql認證模塊的,所以要下載源碼自己手動安裝
tar -xf pam_mysql-0.7RC1.tar.gz -C /usr/src/
cd /usr/src/pam_mysql-0.7RC1
./configure --with-mysql=/usr/bin/mysql_config
make && make install

2. 創建數據庫

service mysqld start
mysql -uroot -p
首先先創建vsftp的數據庫
mysql> CREATE DATABASE vsftpd;

然後創建一個用戶表
mysql> use vsftpd
mysql> create table users (
id int AUTO_INCREMENT NOT NULL,
name char(20) NOT NULL UNIQUE KEY,
passwd char(48) NOT NULL,
primary key(id));

添加vsftpd的數據庫帳號
mysql> insert into users(name,passwd) values('lustlost',password('123456')); 

然後創建vsftpd的數據庫賬戶,為了安全,只授予查詢權限
mysql> GRANT select on vsftpd.* to vsftpd@localhost identified by '123456';
mysql> GRANT select on vsftpd.* to [email protected] identified by '123456';

3. 修改vsftp配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
[root@localhost ~]# grep -v "^#" /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES 
local_enable=YES 
write_enable=YES 
local_umask=022 
anon_upload_enable=YES 
anon_mkdir_write_enable=YES 
dirmessage_enable=YES 
xferlog_enable=YES 
connect_from_port_20=YES 
xferlog_std_format=YES 
chroot_local_user=YES 
listen=YES
pam_service_name=vsftpd.mysql #主要修改這一行,指定使用vsftpd.mysql這個pam配置文件調用pam認證 
guest_enable=YES #開啟來賓賬戶 
guest_username= mysqlftp #映射來賓賬戶,這個賬戶將會被映射為mysql數據庫中的賬戶 
user_config_dir=/etc/vsftpd/vsftpd_user_conf #創建mysql每個虛擬用戶的配置目錄

編輯pam配置文件,參考我的配置

[root@localhost ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.mysql #復制原來的vsftp認證方法,在此基礎上添加mysql認證

編輯PAM認證配置文件

[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql
    #%PAM-1.0 
    session         optional        pam_keyinit.so    force revoke 
    #第一步認證首先使用數據庫認證,如果通過不再檢查下面其它認證,直接登陸,通不過就使用下面的認證
    auth            sufficient      /usr/lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdpasswdcolumn=passwd crypt=2 
    #數據庫認證通不過,就采用vsftp默認的其余認證方法
    auth            required        pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed  
    auth            required        pam_shells.so
    auth            include         password-auth 
    #授權和認證也是一樣的 
    account         sufficient      /usr/lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdpasswdcolumn=passwd crypt=2  
    account         include         password-auth 
    session         required        pam_loginuid.so 
    session         include         password-auth
以上的PAM配置既可以使用mysql數據庫中的用戶認證,也可以使用系統用戶認證,如果只希望使用mysql數據庫中的用戶認證的話,可以講系統認證的配置相關行刪除

4. 添加mysql用戶認證的虛擬用戶

[root@localhost ~]# useradd mysqlftp -d /var/ftp/pub/mysqlftp

修改mysql虛擬賬戶的權限

[root@localhost ~]# chown mysqlftp:mysqlftp -R /var/ftp/pub/mysqlftp

創建mysql虛擬賬戶配置文件夾

[root@localhost ~]# mkdir /etc/vsftpd/vsftpd_user_conf

在此文件夾下配置每個mysql虛擬賬戶的配置文件

[root@localhost vsftpd_user_conf]# touch lustlost

local_root=/var/ftp/pub/mysqlftp/lustlost #其余配置可以自己按需求寫,這裡只限制了mysql虛擬用戶的個人文件夾

在lustlost目錄中創建一個文件驗證結果

[root@localhost vsftpd_user_conf]# touch /var/ftp/pub/mysqlftp/lustlost/l.txt

也可以使用quota實現用戶的磁盤配額,也結合php,apache,可以實現虛擬主機的搭建。

Copyright © Linux教程網 All Rights Reserved