ApacheのBASIC認証は通常、ローカルのパスワードファイルを利用して行う。ユーザ情報はActiveDirectoryで管理しているので、メールサーバと同様に、PAMを経由してActiveDirectoryで認証を行いたい。
PAMに対応したApache2.0系のモジュールとして「mod_auth_external」というモジュールをセットアップして利用する(※)。
このモジュールはApacheのapxsコマンドを利用してコンパイルを行うが、Apacheをソースからインストールした場合、apcsへのパスが通っていないためにコンパイルが失敗する。よって、/usr/local/binにリンクを作成しておく。
# ln -s /usr/local/bin/apxs /usr/local/apache2/bin/apxs
※Apache2.2系には「mod_authnz_external」というモジュールが用意されている・・・が、うまくいかなかった
ソースファイルの入手
このサイトより、Apacheのバージョンに合ったソースファイルをダウンロードする。
今回、Apacheは「2.0系」を利用しているので、次の用にダウンロードした。# cd /usr/local/src
# wget http://www.unixpapa.com/software/mod_auth_external-2.2.11.tar.gzインストール
ソースファイルを入手したら、apxsコマンドでコンパイルを行い、モジュールを作成する。
# tar zxvf mod_auth_external-2.2.11.tar.gz
# cd mod_auth_external
# apxs -c mod_auth_external.c作成に成功したら、インストールを行う。
# apxs -i -a mod_auth_external.la
インストールが完了すると、/usr/local/apache2/modules内にmod_auth_external.soが作成される。また、Apacheの設定ファイル(/usr/local/)内に以下の1行が追加される。
LoadModule auth_external_module modules/mod_auth_external.so
HTTP認証にPAMを利用するために、pwauthモジュールをインストールする。
ソースファイルの入手
このサイトより、pwauthをダウンロードする。
# cd /usr/local/src
wget http://www.unixpapa.com/software/pwauth-2.3.2.tar.gz解凍
ソースファイルを入手したら、次のように解凍し、ディレクトリを移動しておく。
# tar zxvf pwauth-2.3.2.tar.gz
# cd pwauthconfig.hの修正
pwauthをインストールする前に、config.hをviで開き、Fedoraの環境に合うように修正する。
/* #define SHADOW_SUN ←コメントアウト
#define PAM ←コメントアウトを削除
#define SERVER_UIDS 99 ←FedoraのnobodyユーザはUIDが99なので修正Makefileの修正
Fedoraでは、LIBパラメータを次のように修正する必要がある。
LIB= -lpam -ldl
インストール
config.hおよびMakefileの修正を行ったら、次のようにコンパイルする。
# make
コンパイルに成功すると、pwauthとpwauth.oというファイルが作成される。
pwauthを/usr/local/libexecディレクトリにコピーし、一般ユーザでもroot権限で実行するよう、権限をつける。# cp pwauth /usr/local/libexec/
# chmod u+s /usr/local/libexec/pwauthApacheの設定ファイルの修正
ApacheのHTTP認証がpwauthを使ってPAMで行われるよう、Apacheの設定ファイルを修正する。
/usr/local/apache2/conf/httpd.confをviで開き、先ほど追加されたモジュールの行の下あたりに次の2行を追加する。# LoadModule foo_module modules/mod_foo.so
LoadModule auth_external_module modules/mod_auth_external.so
AddExternalAuth pwauth /usr/local/libexec/pwauth
SetExternalAuthMethod pwauth pipe変更を保存したら、Apacheを再起動しておく。
# /etc/rc.d/init.d/httpd stop
# /etc/rc.d/init.d/httpd start
ApacheがPAM経由でActiveDirectoryに対して認証するように設定を行う。pwauth用のPAM認証設定ファイル /etc/pam.d/pwauth をviで新規作成し、次の行を追加する。
- Winbind認証を利用する
auth sufficient /lib/security/pam_winbind.so
account sufficient /lib/security/pam_winbind.so- Kerberos認証を利用する
auth sufficient /lib/security/pam_krb5.so
account sufficient /lib/security/pam_krb5.so
認証ページの設定
HTTP認証を掛けるディレクトリを指定する。
例えば、http://intra.andokomuten.jp/users以降のページに対してBASIC認証を掛ける場合、次のように指定する。<Directory /usr/local/apache2/htdocs/users>
AuthType Basic
AuthName "USER'S PAGE (DOMAIN USER ONLY)"
AuthExternal pwauth
Require valid-user
</Directory>※httpd.confと.htaccessのどちらでも設定可。http.confに設定した場合、Apacheを再起動する。
動作確認
ディレクトリの設定が出来たら、ブラウザで該当のディレクトリにアクセスする。上記例の場合、URLは次のように指定する。
http://intra.andokomuten.jp/users/
正しい設定が行われていると、次のようにBASIC認証用のダイアログが表示される。
ユーザ名、パスワードにActiveDirectoryに登録されているドメインユーザを指定し、ページが表示されれば成功である。
3-5までの設定により、ドメインユーザを利用したBASIC認証ができるようになった。WWWサーバ側にOSユーザを作る必要が無いため、ユーザの発行・削除はActiveDirectory側でのみ行えばよい。
しかし、BASIC認証は暗号化機能を備えていないため、クライアント〜WWWサーバ間の通信はクリアテキストで行われる。WWWサーバ〜ドメインコントローラ間の通信はKerberos認証により暗号化されるが、クライアント〜WWWサーバ間は暗号化されないため、このままではユーザ名・パスワードがクリアテキストで流れてしまい、盗聴される危険性がある。
BASIC認証を暗号化したい場合は、SSLを用いるのが良い。SSLで表示するディレクトリに対してBASIC認証の設定を行うことにより、ユーザ名・パスワードの入力を行ってもSSLにより暗号化される。