1. 程式人生 > >FTP(六)實現基於MYSQL驗證的FTP虛擬用戶

FTP(六)實現基於MYSQL驗證的FTP虛擬用戶

實現MYSQL驗證的vsftpd虛擬用戶

實驗準備:本實驗在兩臺CentOS主機上實現,一臺做為FTP服務 器,一臺做數據庫服務器

  • 一臺CentOS-7當MYSQL服務器
  • 一臺CentOS-6當FTP服務器
    註意,這裏誰當FTP服務器很關鍵,因為有一個PAM模塊包是CentOS-7上沒有的,需要源碼編譯,pam_mysql,下面我先演示CentOS-6當FTP服務器的例子

CentOS-6當FTP服務器

一,配置數據庫服務器

1,在數據庫服務器端安裝mariadb-server包

    yum –y install  mariadb-server
    systemctl  start  mariadb 
    # 設為開機自動啟動
    systemctl  enable mariadb

2,為了安全起見可以運行一下mariadb安全腳本

"mysql_secure_installation"

    第一項問你:輸入root密碼  回車即可,因為沒有
    第二項問你:需要設置root密碼麽,當然要  敲Y
    第三項問你:需要刪除空賬號用戶麽,當然要  敲Y
    第四項問你:禁止root用戶遠程登入麽,根據你們公司的需要
    第五項問你:需要刪除test測試數據哭麽,我不需要
    第六項問你:現在重新加載權限表嗎 ,當然

3,在mariadb服務器端建立虛擬用戶賬號

 1,創建存儲虛擬用戶數據庫和連接的數據庫用戶(帶有mysql>的就表示需要連接到數據庫執行操作)
     #創建數據庫
     mysql> CREATE DATABASE vsftpd;  
     #查看數據庫是否創建成功
     mysql> SHOW DATABASES;

 2,創建管理vsftpd數據庫的用戶。
     mysql> GRANT all ON vsftpd.* TO   vsftpd@‘192.168.136.6‘ IDENTIFIED BY ‘centos‘;  

    命令解析:
        GRANT:                 創建授權用戶關鍵字
        all  :                  表示擁有對vsftpd這個數據庫的所有權限
        vsftpd.*:              表示指定vsftpd的所有表
        vsftpd@‘192.168.136.6‘: @ 前的vsftpd表示用戶名,@ 後面的表示該用戶只能在192.168.136.6這個主機登入,如果想表示一個網段可以加百分號:192.168.136.%
        IDENTIFIED BY ‘centos‘: 作用設置密碼,centos就是該用戶的密碼。

準備存放用戶的相關表

    #切表
        mysql> USE vsftpd; 
    #查看表
        Mysql> SHOW TABLES;  
    #創建users表
        mysql>create table users (id int auto_increment not null primary key,name varchar(30) binary not null, password varchar(50) binary not null);

    命令解析:
        create table users:創建表名為users子句
        口號裏的就表結構,用逗號分開的表示字段例如:第一個字段為id,第二個字段為name,第三個字段為password

        修飾符:
        int:           表示該字段為數字,
        auto_increment:表示該字段是整數自動增長
        not null:      表示該字段不能為空
        primary key:   表示該字段為主鍵
        varchar(30):   表示該字段可以是任意字符長度為30個
        binary:        作用是讓字段能夠用於登入驗證

在user表中添加虛擬用戶

根據需要添加所需要的用戶,為了安全應該使用PASSWORD 函數加密其密碼後存儲

    #查看表結構
    mysql>DESC users;  
    #插入內容
    mysql> INSERT INTO users(name,password)    values(‘wang‘,password(‘wang‘));  
    #插入內容
    mysql> INSERT INTO users(name,password)          values(‘li‘,password(‘li‘));  
    #查看表內容
    mysql> SELECT * FROM users;

二,配置FTP服務器

1,在FTP服務器上安裝vsftpd和pam_mysql包

 centos6:pam_mysql由epel6的源中提供   
 配置epel源:
    [epel]
    name=centos-epel
    baseurl=http://mirrors.aliyun.com/epel/6/x86_64/
    gpgcheck=0
    enable=1
 #安裝模塊,以及FTP服務器端包
    yum install vsftpd pam_mysql

2,創建FTP所需PAM模塊認證文件

因為需要連接數據庫所以之前的PAM塊已經不能用了,需要自己配置

在/etc/pam.d/目錄下創建一個名為vsftpd.mysql存放PAM模塊的配置文件
     cd /etc/pam.d/
     touch  vsftpd.mysql 
     vim vsftpd.mysql
     添加如下幾行:
     auth required pam_mysql.so user=vsftpd passwd=centos host=數據庫IP地址  db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
     account required pam_mysql.so user=vsftpd passwd=centos host=數據庫IP地址 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 

配置字段說明 
    ? auth 表示認證 
    ? account 驗證賬號密碼正常使用 
    ? required 表示認證要通過 
    ? pam_mysql.so模塊是默認的相對路徑,是相對/lib64/security/路 徑而言,也可以寫絕對路徑;後面為給此模塊傳遞的參數 
    ? user=vsftpd為登錄mysql的用戶 
    ? passwd=magedu 登錄mysql的的密碼 
    ? host=mysqlserver  mysql服務器的主機名或ip地址 
    ? db=vsftpd  指定連接msyql的數據庫名稱 
    ? table=users 指定連接數據庫中的表名 
    ? usercolumn=name 當做用戶名的字段 
    ? passwdcolumn=password 當做用戶名字段的密碼 
    ? crypt=2 密碼的加密方式為mysql password()函數加密 
    註意 :crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示 使用mysql password()函數加密,3表示md5加密,4表示sha1 加密 

3,建立系統普通用戶,用作於虛擬用戶映射的用戶

一,創建用戶,共享目錄

    #創建虛擬用戶映射的系統用戶及對應的目錄 
        useradd -s /sbin/nologin -d /var/ftproot vuser 
    #修改對應的目錄權限,因為FTP共享根目錄不能有寫權限    
        chmod 555 /var/ftproot 
    #創建可以上傳下載的共享目錄
        mkdir /var/ftproot/{upload,pub}
    #並給vuser用戶ACL權限
        setfacl –m u:vuser:rwx /var/ftproot/upload 

修改主配置文件

確認/etc/vsftpd.conf中是否已經啟用了以下選項
    #支持匿名用戶登入
        anonymous_enable=YES 
    #添加下面兩項 ,作用是支持虛擬用戶映射為某一個系統用戶
        guest_enable=YES 
        guest_username=vuser 
    #修改下面一項,原系統用戶無法登錄 
        pam_service_name=vsftpd.mysql 

4,啟動FTP服務

    #啟動服務
        service vsftpd start
    #開機自動啟動
        chkconfig vsftpd on
    #查看端口打開情況
    ss -ntlp|grep :21 

5,SELinux相關配置

   1,restorecon  -R /lib64/security 
   2,setsebool -P ftpd_connect_db 1 
   3,setsebool -P ftp_home_dir 1 
   4,chcon -R -t public_content_rw_t /var/ftproot/ 

最後測試

   1,li用戶登入測試:成功
        [root@ansible-7 ~]# ftp 192.168.136.6
        Connected to 192.168.136.6 (192.168.136.6).
        220 (vsFTPd 2.2.2)
        Name (192.168.136.6:root): li
        331 Please specify the password.
        Password:
        230 Login successful.
        Remote system type is UNIX.
        Using binary mode to transfer files.
    2,wang用戶登入測試:成功
        [root@ansible-7 ~]# ftp 192.168.136.6
        Connected to 192.168.136.6 (192.168.136.6).
        220 (vsFTPd 2.2.2)
        Name (192.168.136.6:root): wang
        331 Please specify the password.
        Password:
        230 Login successful.
        Remote system type is UNIX.
        Using binary mode to transfer files.

三,實現每個虛擬用戶具有各自不同的權限

1,修改主配置文件

    vim /etc/vsftpd/vsftpd.conf  
    添加如下選項,作用是讓虛擬用戶支持獨立權限配置文件,可以自定義存放目錄。
    user_config_dir=/etc/vsftpd/vusers_config/ 

2,在/etc/vsftpd/vusers_config/目錄下創建每個虛擬用戶的權限配置文件,文件名對應用戶名

    mkdir /etc/vsftpd/vusers_config/ 
    cd  /etc/vsftpd/vusers_config/ 
    touch wang 
    touch li

    "註意:虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關 指令進行的。   "
    下面的權限都可以添加至文件中,需要什麽權限添加什麽權限

            #是否支持上傳功能
            anon_upload_enable={YES|NO}
            #是否支持創建文件功能
            anon_mkdir_write_enable={YES|NO} 
            #是否支持刪除文件功能
            anon_other_write_enable={YES|NO} 
            #指定虛擬賬戶登入的共享目錄
            local_root=/ftproot   

        例如:讓wang用戶支持上傳,下載,刪除文件的權限那麽只需要在wang的權限配置文件中添加如下幾行
        "註意:需確保對應的映射用戶對於文件系統有寫權限"
        vim  wang
        anon_upload_enable=YES 
        anon_other_write_enable=YES
        anon_mkdir_write_enable=YES

CentOS-7當FTP服務器只有一個地方不同,就是需要編譯安裝pam_mysql模塊,其他概略相同。

步驟:

 # 安裝開發包組
    yum -y groupinstall "Development Tools" 
 # 安裝相關依賴包
    yum -y install mariadb-devel  pam-devel vsftpd
 # 去官網下載pam_mysql-0.7RC1.tar.gz源碼包        
    https://sourceforge.net/projects/pam-mysql/
 # 解壓縮包
    tar xvf pam_mysql-0.7RC1.tar.gz 
 # 進入pam_mysql-0.7RC1/目錄開始編譯   
    cd pam_mysql-0.7RC1/ 
 # 運行configure腳本
    ./configure     --with-mysql=/usr \ 
    --with-pam=/usr     --with-pam-mods-dir=/lib64/security
 # 編譯開始
    make -j 4
 # 安裝程序
    make install 

FTP(六)實現基於MYSQL驗證的FTP虛擬用戶