proftpd MySQLでアカウント管理

Table of Content

proftpd+MySQLで仮想アカウント使用のFTPサーバ構築
インストールの前提条件は、MySQLがインストール済み
※クォータ管理は、今回は不要なので省略

epelリポジトリのインストール

EPELが必要なので、EPELリポジトリを追加
epelインストール

インストール

# dnf install proftpd proftpd-utils proftpd-mysql

FTP用UNIXアカウント作成

FTP用UNIXユーザー「ftpuser」、グループ「ftpgroup」を作成し、MySQLで管理するバーチャルユーザーとマッピングします。まずはグループから。UID、GIDは一旦2001で固定することにします。

# groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

telnet や SSH でログインできないユーザー用の「/sbin/false」を作成

# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
# echo "/sbin/false" >> /etc/shells
# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/sbin/false

MySQLにデータベースを作成

$mysql -u root -p
Enter password:(rootのパスワード)

mysql> USE ftp;
mysql> CREATE TABLE ftpgroup (groupname varchar(16) NOT NULL default '',gid smallint(6) NOT NULL default '5500',members varchar(16) NOT NULL default '',KEY groupname (groupname)) ENGINE=MyISAM COMMENT='ProFTP group table';
mysql> CREATE TABLE ftpuser (id int(10) unsigned NOT NULL auto_increment,userid varchar(32) NOT NULL default '',passwd varchar(32) NOT NULL default '',uid smallint(6) NOT NULL default '5500',gid smallint(6) NOT NULL default '5500',homedir varchar(255) NOT NULL default '',shell varchar(16) NOT NULL default '/sbin/nologin',count int(11) NOT NULL default '0',accessed datetime ,modified datetime ,PRIMARY KEY (id),UNIQUE KEY userid (userid)) ENGINE=MyISAM COMMENT='ProFTP user table';
※参考URLで指定されているaccessed と modified の初期値は、今回使用するMySQLではエラーになったので、省略しています。

ftpgroupテーブルに実UID、実GIDをマッピングするデータを投入

mysql> INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'hoge');

ftpuserテーブルにユーザーデータを投入

mysql> INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, 'hoge', '******', 2001, 2001, '/home/kyouyu', '/sbin/nologin', 0, null, null);
※shellで指定する/sbin/false/etc/shellsに追加されていなければ追加すること
※uidやgidで指定したユーザの権限でディレクトリの所有者など変更しておく

ディレクトリ作成

FTPユーザーのホームディレクトリを作成し、オーナーをMySQLのユーザーとマッピングしているUNIXユーザーのオーナーとグループに変更します。
※ユーザとオーナーの権限で書き込み権限を調整

# mkdir -p /home/kyouyu
# chown 2001:2001 /home/kyouyu

設定ファイルの変更

    # vi proftpd.conf
    -------------------------------------------------------------------------------------------------------------------
    #AuthOrder                      mod_auth_pam.c* mod_auth_unix.c
    AuthOrder                       mod_sql.c mod_auth_unix.c

    SQLBackend mysql
    SQLEngine on
    # The passwords in MySQL are encrypted using CRYPT
    SQLAuthTypes            Plaintext Crypt
    SQLAuthenticate         users groups

    # used to connect to the database
    # databasename@host database_user user_password
    SQLConnectInfo  ftp@localhost proftpd ftpadmin

    # Here we tell ProFTPd the names of the database columns in the "usertable"
    # we want it to interact with. Match the names with those in the db
    SQLUserInfo     ftpuser userid passwd uid gid homedir shell

    # Here we tell ProFTPd the names of the database columns in the "grouptable"
    # we want it to interact with. Again the names match with those in the db
    SQLGroupInfo    ftpgroup groupname gid members

    # set min UID and GID - otherwise these are 999 each
    SQLMinID        500

    # create a user's home directory on demand if it doesn't exist
    ##--@Disabled@--##SQLHomedirOnDemand on # ここだけonにするとproftpdが起動しなかったのでコメントアウト

    # Update count every time user logs in
    SQLLog PASS updatecount
    SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

    # Update modified everytime user uploads or deletes a file
    SQLLog  STOR,DELE modified
    SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

    #SQLLogFile /var/log/proftpd-mysql.log
    -------------------------------------------------------------------------------------------------------------------
    # vi /etc/proftpd/modules.conf
    -------------------------------------------------------------------------------------------------------------------
    LoadModule mod_sql.c
    LoadModule mod_sql_mysql.c
    -------------------------------------------------------------------------------------------------------------------

自動起動の設定

# systemctl enable proftpd
# systemctl start proftpd

ファイアーオールに追加

# firewall-cmd --zone=manage --add-service=ftp --permanent
# firewall-cmd --reload  ←設定再読み込み
# firewall-cmd --list-all --zone=manage  ← manageゾーンの詳細表示

参考URL

【proftpd】 MySQLでアカウント管理する リターンズ 201511 – (っ´∀`)っ ゃー | 一撃
Virtual Hosting With Proftpd And MySQL (Incl. Quota) On Fedora 9

コメントを残す

メールアドレスが公開されることはありません。