« 12 Things I dislike with CGI::Application 続き | メイン | CGI::AppでのDebugScreen »

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  

こんな無理矢理な手でやってます。