MySQL でアカウント管理

proftpd では MySQL でアカウント管理する事が可能です。 ( 該当オプションを有効にした場合 )
ここではその解説を行います。
なお、前提として proftpd は WITH_MYSQL 付きでインストール済み、初期設定も完了済みとします。

テーブルの作成

まずは MySQL にログインします。

# mysql -u root -p

次に proftpd 用のデータベースを作成します。

mysql> CREATE DATABASE proftpd;

次に先ほど作成したデータベースのテーブル情報を定義します。

mysql> USE proftpd;

mysql> CREATE TABLE groups (
    ->     groupname VARCHAR(30) NOT NULL ,
    ->     gid SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1000,
    ->     members varchar(255) default NULL,
    ->     PRIMARY KEY ( groupname ),
    ->     UNIQUE KEY gid (gid)
    -> );

mysql> CREATE TABLE users (
    ->     userid varchar(30) NOT NULL,
    ->     password varchar(30) NOT NULL,
    ->     uid SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1000,
    ->     gid SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1000,
    ->     homedir varchar(255) default NULL,
    ->     shell varchar(255) default '/bin/true',
    ->     PRIMARY KEY (userid),
    ->     UNIQUE KEY uid (uid)
    -> );

次に ProFTPd 自身が使用するアカウントを作成します。
proftpd@localhostユーザ名@ホスト で、 **IDENTIFIED BY ‘proftpd’ ** が **IDENTIFIED BY ‘パスワード’ ** になります。

mysql> GRANT SELECT ON proftpd.* TO proftpd@localhost IDENTIFIED BY 'proftpd';

最後にテーブル情報を同期して MySQL の前準備は終了です。

mysql> FLUSH PRIVILEGES;

ProFTPd の設定

MySQL の設定が済んだら、 ProFTPd の設定を行いましょう。
以下のような文を追記します。

# vi /usr/local/etc/proftpd.conf

<IfModule mod_sql_mysql.c>
   SQLAuthenticate      users
   SQLConnectInfo       proftpd@localhost:3306 proftpd proftpd
   SQLAuthTypes         Crypt
   SQLUserInfo          users userid password uid gid homedir shell
   SQLGroupInfo         groups groupname gid members
   AuthOrder            mod_sql.c
</IfModule>

編集したら ProFTPd を再起動しましょう。

# /usr/local/etc/rc.d/proftpd restart

ユーザとグループの追加

ProFTPd が正常に起動できたらユーザとグループの追加を行ってみましょう。
まずは MySQL にログインします。

# mysql -u root -p proftpd

グループの追加方法は下記の通りです。

mysql> INSERT INTO groups VALUES ('ftpusers',1000,'');

| ftpusers | グループ名 |
| 1000 | gid |

ユーザの追加方法は下記の通りです。

mysql> INSERT INTO users VALUES ('testuser',encrypt('testpass'),1000,1000,'/home/testuser','/usr/sbin/nologin');

| testuser | ユーザ名 |
| testpass | ユーザのパスワード |
| 1000 | uid |
| 1000 | gid |
| /home/testuser | ホームディレクトリ |
| /bin/true | ユーザのシェル |

ユーザの削除

今度はユーザ情報の削除を行ってみましょう。
まずは MySQL にログインします。

# mysql -u root -p proftpd

次に現在のユーザ情報を確認してみましょう。

mysql> SELECT * FROM users;
+----------+---------------+------+------+----------------+-------------------+
| userid   | password      | uid  | gid  | homedir        | shell             |
+----------+---------------+------+------+----------------+-------------------+
| testuser | ************* | 1000 | 1000 | /home/testuser | /usr/sbin/nologin |
| hoge     | ************* | 1001 | 1001 | /home/hoge     | /usr/sbin/nologin |
+----------+---------------+------+------+----------------+-------------------+

先ほど追加したユーザ ( testuser ) を削除してみます。

mysql> DELETE FROM users WHERE userid='testuser';

最後にユーザ情報を確認してみましょう。

mysql> SELECT * FROM users;
+----------+---------------+------+------+----------------+-------------------+
| userid   | password      | uid  | gid  | homedir        | shell             |
+----------+---------------+------+------+----------------+-------------------+
| hoge     | ************* | 1001 | 1001 | /home/hoge     | /usr/sbin/nologin |
+----------+---------------+------+------+----------------+-------------------+

リンク

proftpd + mysql + ssl - PukiWiki