pure-ftpdのカスタム認証ハンドラ
ライブドアBlogでも使っているらしいpure-ftpdは、カスタム認証ハンドラを簡単につくれます。
認証だけではなく、ftpd内蔵のquota機能なんかも使えて便利です。
http://www.pureftpd.org/
ドキュメントも上のサイトから行けます。
インストールは、
$ ./configure --with-altlog --with-extauth --with-paranoidmsg --with-quotas --with-throttling --without-inetd --prefix=/usr/ $ make install-strip
こんなconfigureでやってます。
認証ハンドラに使うスクリプトでは環境変数として
#!/bin/sh $AUTHD_REMOTE_IP $AUTHD_ACCOUNT $AUTHD_PASSWORD $AUTHD_LOCAL_IP $AUTHD_LOCAL_PORT
が使えます。認証の結果は標準出力に
auth_ok:1 uid:42 gid:21 dir:/home/foo user_quota_size:100000 end
という形式で出力します。シェルスクリプトなら
echo 'auth_ok:1' echo 'uid:42' echo 'gid:21' echo 'dir:/home/foo' echo 'user_quota_size:100000'
という形で出力するだけです。
カスタム認証で適当なuid、gid、homedir、容量が割り増えるので便利。詳しい説明は、
http://www.pureftpd.org/README.Authentication-Modules
ここで。
あとは、デーモン起動ですが、認証ハンドラをまず起動して
$ /usr/sbin/pure-authd -s /var/run/pureftpdauth.sock -r /path/to/bin/authhandler.sh &
次にデーモン起動。
$ /usr/sbin/pure-ftpd -b -A -B -c 100 -E -H -I 5 -j -l unix -l extauth:/var/run/pureftpdauth.sock -u 499
「-j」オプションに認証ハンドラを「-l ハンドラ名」で付けて行きます。この場合、unixのユーザ認証をまずトライしてからカスタム認証を行います。
その他のオプションは、
http://homepage.mac.com/proc/pureftpd/pureftpd-option.html
が日本語で詳しくてありがたいです。
Perlで認証ハンドラを書きたい場合に%ENVでは拾えなかったので
#!/bin/sh /usr/bin/perl ftpauth.pl $AUTHD_REMOTE_IP $AUTHD_ACCOUNT $AUTHD_PASSWORD
こんな無理矢理な手でやってます。