ProFTPD の MySQL を利用したユーザ認証

ProFTPD の MySQL を利用したユーザ認証

本屋でふと目に付いた「ネットワークセキュリティHacks」をちらっと見たところ、「ProFTPD の認証に MySQL を利用」という内容がありました。実は普段あまり ProFTPD を使っていないのですが、FTP のユーザ認証に UNIX パスワードを使わない方法はないかなぁと思っていたところだったこともあり、MySQL を使った認証というところにかなり食いついてしまいました。

ということで、近くにあった debian を使って MySQL を使ったユーザ認証を試してみました。

Advertisement

jail用のユーザアカウントの作成

いまあるユーザアカウントでログインをしても自分のホームディレクトリよりも上のディレクトリに移動できないように、jail 用のアカウント「ftpuser」を作成します。

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

MySQL のユーザ認証用データベースの作成

MySQL にユーザ認証用データベース「ftpdb」を作成します。データベースにはユーザ「proftpd」でアクセスできるようにします。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 648 to server version: 3.23.49-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database ftpdb;
mysql> grant select, insert, update on ftpdb.* to proftpd@localhost identified by 'password';

「password」のところには、データベースアクセス用のパスワードを設定します。

データベース「ftpdb」にテーブル「users」と「groups」を作成します。

mysql> CREATE TABLE users (
    userid VARCHAR(30) NOT NULL UNIQUE,
    passwd VARCHAR(80) NOT NULL,
    uid INTEGER UNIQUE,
    gid INTEGER,
    homedir VARCHAR(255),
    shell VARCHAR(255)
  );
mysql> CREATE TABLE groups (
    groupname VARCHAR(30) NOT NULL,
    gid INTEGER NOT NULL,
    members VARCHAR(255)
  );

ユーザ認証用の ID、パスワードの設定

ユーザ認証に使う ID とパスワードを設定します。ID を「foo」、パスワードを「hoge」とします。

mysql> INSERT INTO `groups` VALUES ('ftpgroup', 5500, 'ftpuser');
mysql> INSERT INTO `users` VALUES ('foo', 'hoge', 5500, 5500, '/home/foo', '/bin/bash');

proftpd.conf の設定

ProFTPD の設定ファイルである /etc/proftpd.conf に MySQL でユーザ認証を行う設定をします。

DefaultRoot ~
SQLAuthTypes    Plaintext Crypt
SQLAuthenticate users* groups*
SQLConnectInfo  ftpdb@localhost proftpd password
SQLUserInfo     users userid passwd uid gid homedir shell
SQLGroupInfo    groups groupname gid members
SQLMinID        500

password の部分は、データベースアクセス用に設定したパスワードとなります。

これで proftpd を再起動することにより、ユーザ「foo」でアクセス可能なはずです。

Advertisement