FTP-----mysql検証に基づく仮想ユーザーの構築


前言:
前回のブログでは、ファイル認証に基づくftpサービスを実現しましたが、ユーザーデータの管理が悪いとか、明文で保存するのが安全ではないとか、多くの問題がありました.ユーザーデータを他のサーバに単独で保存することはできません.そこで今回はユーザーデータをmysqlに入れ、pamモジュールでmysqlにユーザーデータを探して認証を実現します.主体の過程は前編とあまり違いません~では、~を始めましょう.
本文:
今回、私たちの環境はcentos 6です.centos 7のpam_のためです.mysqlモジュールは自分で手動でコンパイルしなければならないのでcentos 6を先に使用しますが、両者の違いも大きくなく、pam_をコンパイルします.mysqlモジュールも難しくありません.従来のルールでは、最初に使用するプログラムをインストールします.
yum install vsftpd mysql-server pam_mysql

今回もシステムのftpユーザーを仮想ユーザーとしてログインしたguestを使用しています.もちろん、自分で新しいユーザーを作成することもできますが、ここではプレゼンテーションをしません~centos 7で覚えておいてください.ユーザーのホームディレクトリは、ユーザーに書く権限がありませんよ.では、まずmysqlで認証に必要なデータベースとテーブルを作成し、mysqlサービスを開始します.
#service mysqld start
#mysql                    # mysql              
#mysql>CREATE DATABASE vsftpd; #    vsftpd    
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY '1234';  # mysql   vsftpd  ,       ,    1234,     mysqld vsftpd      ,  host    localhost,     mysql                ~
mysql>FLUSH PRIVILEGES;   
mysql>USE vsftpd;  #        ,      ~~
mysql>CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50)
BINARY NOT NULL,password CHAR(48) BINARY NOT NULL);  #      users  ,        id   ,  ,      ,name     50     ,    ,password  ,               ,       48 ,     48      
mysql> INSERT INTO users(name,password) values(‘xiaofengfeng',password('1234'));
mysql> INSERT INTO users(name,password) values(‘xiaofengfeng2',password('1234'));
#      ,    1234

はい~検証用のデータベースはこちらで作成済みで、ftpサーバの構成を開始します.前のブログとあまり違いません.主に異なるpamモジュールを使用しています.ここではpam_を使用しています.mysql.soモジュール、まずftpのプロファイルを修正して、修正したプロファイルだけをリストします.
#/etc/vsftpd/vsftpd.conf
anonymous_enable=NO               #      
guest_enable=YES 
guest_username=ftp                 #              ftp  
pam_service_name=vsftpd.mysql      #pam      /etc/pam.d          

次にpamモジュールに必要な構成を作成し、/etc/pam.dディレクトリの下に新しいファイルvsftpdを作成する.mysql
#/etc/pam.d/vsftpd.mysql
auth required  pam_mysql.so user=vsftpd passwd=1234 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required  pam_mysql.so user=vsftpd passwd=1234 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

#    pam_mysql.so  ,        vsftpd    1234   mysql        host localhost,       ip  ,      vsftpd    users          name  ,      password  ,        musql password()     ,   2          mysql password()    ,    crypt 2

やはり古いルールで、selinuxが閉じているかどうか、iptablesがftpサービスを放行しているかどうかをチェックします.問題がなければ、データベースの2つのアカウントでログインできます.どのユーザーがデータをアップロードする機能が必要かは、前のブログを参照して、個別のユーザープロファイルを作成し、匿名アップロード機能をオンにすることができます.特に注意しなければならないのは、ftpユーザーに/var/ftp/pubに書き込み権限を持たせることができ、aclでも直接すべての権限を開放することができ、あるいはftpの所有者であるディレクトリuploadを構築してユーザーftpにファイルをアップロードさせることができることです.