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