ドメインユーザによるBASIC認証の設定
ApacheのBASIC認証は通常、ローカルのパスワードファイルを利用して行う。
ユーザ情報はActiveDirectoryで管理しているので、メールサーバと同様に、PAMを経由してActiveDirectoryで認証を行いたい。
1.前準備 †
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 というモジュールが用意されている・・・が、うまくいかなかった
2.mod_auth_externalのインストール †
2-1 ソースファイルの入手 †
このサイト(http://www.unixpapa.com/mod_auth_external.html)より、Apacheのバージョンに合ったソースファイルをダウンロードする。
今回、Apacheは「2.0系」を利用しているので、次のファイルをダウンロードした。
# cd /usr/local/src # wget http://www.unixpapa.com/software/mod_auth_external-2.2.11.tar.gz
2-2 インストール †
ソースファイルを入手したら、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/apache2/conf/httpd.conf 内に以下の1行が追加される。
LoadModule auth_external_module modules/mod_auth_external.so
3.pwauthのインストール †
HTTP認証にPAMを利用するために、pwauthモジュールをインストールする。
3-1 ソースファイルの入手 †
このサイト(http://www.unixpapa.com/pwauth/)より、pwauthをダウンロードする。
# cd /usr/local/src wget http://www.unixpapa.com/software/pwauth-2.3.2.tar.gz
3-2 解凍 †
ソースファイルを入手したら、次のように解凍し、ディレクトリを移動しておく。
# tar zxvf pwauth-2.3.2.tar.gz # cd pwauth
3-3 config.hの修正 †
pwauthをインストールする前に、config.h をviで開き、CentOS 4の環境に合うように修正する。
/* #define SHADOW_SUN ←コメントアウト #define PAM ←コメントアウトを削除 #define SERVER_UIDS 99 ←CentOS 4のnobodyユーザはUIDが99なので修正
3-4 Makefileの修正 †
CentOS 4では、LIBパラメータを次のように修正する必要がある。
LIB= -lpam -ldl
3-5 インストール †
config.hおよびMakefileの修正を行ったら、次のようにコンパイルする。
# make
コンパイルに成功すると、pwauthとpwauth.oというファイルが作成される。
pwauthを/usr/local/libexecディレクトリにコピーし、一般ユーザでもroot権限で実行するよう、権限をつける。
# cp pwauth /usr/local/libexec/ # chmod u+s /usr/local/libexec/pwauth
3-6 Apacheの設定ファイルの修正 †
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
4.統合認証方式の選択 †
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
5.HTTP認証を掛けるディレクトリを指定 †
5-1 認証ページの設定 †
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を再起動する。
5-2 動作確認 †
ディレクトリの設定が出来たら、ブラウザで該当のディレクトリにアクセスする。上記例の場合、URLは次のように指定する。
http://intra.andokomuten.jp/users/
正しい設定が行われていると、次のようにBASIC認証用のダイアログが表示される。
ユーザ名、パスワードにActiveDirectoryに登録されているドメインユーザを指定し、ページが表示されれば成功である。
6.実際の運用 †
5までの設定により、ドメインユーザを利用したBASIC認証ができるようになった。
WWWサーバ側にOSユーザを作る必要が無いため、ユーザの発行・削除はActiveDirectory側でのみ行えばよい。
しかし、BASIC認証は暗号化機能を備えていないため、クライアント~WWWサーバ間の通信はクリアテキストで行われる。WWWサーバ~ドメインコントローラ間の通信はKerberos認証により暗号化されるが、クライアント~WWWサーバ間は暗号化されないため、このままではユーザ名・パスワードがクリアテキストで流れてしまい、盗聴される危険性がある。
BASIC認証を暗号化したい場合は、SSLを用いるのが良い。SSLで表示するディレクトリに対してBASIC認証の設定を行うことにより、ユーザ名・パスワードの入力を行ってもSSLにより暗号化される。
