先ほどPHP iCalenderをインストールしたけど、このままでは誰でも参照できてしまいプライバシーが守れないので、パスワードでガードすることにした。Apacheの普通のBASIC認証でもよいのだけど、パスワードの管理や設定が面倒なのでPAM認証を行うようにする。そのために新しいモジュールをApache(2.0.40-21.17)に組み込む。(Apache 1.Xでは設定が異なるようです。ご注意。)
PAM認証にはモジュールmod_auth_externalとpwauthを用いる。まずはこれらをGetする。(作者に感謝)
mod_auth_external
pwauth
mod_auth_externalのインストール
まずはアーカイブを展開します。
インストールは以下のように行う。
apxs -c mod_auth_external.c
apxs -i -a mod_auth_external.la
以下が自動的にhttpd.confに追加されます。
LoadModule external_auth_module /usr/lib/httpd/modules/mod_auth_external.so
pwauthのインストールと設定
config.hの以下のエントリをApacheのUIDに変更します。
#define SERVER_UIDS 48 /* user "nobody" */
PAM認証ユーザのUIDの最小値を設定します。これより小さいUIDのユーザ(特権ユーザ)は認証でエラーとなります。
#define MIN_UNIX_UID 40 /**/
makeしてインストールを行います。(rootで行います。)
# make
# mkdir /usr/local/libexec/
# cp pwauth/pwauth /usr/local/libexec/
# chmod u+s /usr/local/libexec/pwauth
/etc/pam.d/pwauthファイルを作成します。
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
Apacheの設定
以下の設定をhttpd.confに追加します。
AddExternalAuth pwauth /usr/local/libexec/pwauth
SetExternalAuthMethod pwauth pipe
apacheを再起動します。これでPAM認証を行えるようになりました。
PAM認証を用いるには.htaccessにこんな風に設定すればOKです。
AuthType Basic
AuthExternal pwauth
AuthName "PAM authentication"
require valid-user