geek.conf.2

あるエンジニアの備忘録

LinuxからNTLM認証してシングルサインオン的WEBシステムを構築する〜その2〜

うす!まだ眠い人です。

前のエントリーの続きになります。
前回はLinuxからActive Directoryの情報を取得してドメイン参加する、まででした。

今回はその情報を利用してWEBサービスへの認証に用いてドメイン参加すればWEBサービスへの認証は行わず
許可するといういわゆるシングルサインオンを可能にする設定を書きます。

このWEBサーバにはApacheを使います。もっというとmod_auth_ntlm_winbindを使います。

流れはこうなんじゃないかと思います。

クライアントがドメイン参加する。→WEBサービスを利用するためWEBサーバにアクセスする。
→WEBサーバのmod_auth_ntlm_winbindがWEBサーバのWinbindにNTLM認証のためクライアントのドメイン情報を問合せる。→WEBサーバのWinbindクライアントのドメイン情報をActive Directoryに問合わせて認証する。(実際はActive Directoryにわざわざ問合せずキャッシュするかもね)→WEBサーバのWinbindがWEBサーバのmod_auth_ntlm_winbindにドメイン情報を返す。→WEBサーバのmod_auth_ntlm_winbindがクライアントにNTLM認証の結果を通知する。

成功した場合、WEBサービスにログイン、失敗した場合、Basic認証ダイアログ表示

です☆

Basic認証にも失敗した場合、401を返しますぞ。

ここでApacheはインストールされていると仮定します。
さらにディストリビューションによるかと思いますが、RHEL5系ではapr-develやapr-util-devel、httpd-develも必要です。

mod_auth_ntlm_winbindのインストール

とりあえず以下のサイトよりダウンローズ
http://samba.org/ftp/unpacked/lorikeet/mod_auth_ntlm_winbind/

必要なファイルはこれだ。
1.mod_auth_ntlm_winbind.c・・・ソースプログラム
2.configure.in・・・configureスクリプト雛形
3.500mod_auth_ntlm_winbind.info・・・当モジュールの情報
4.Makefile.in・・・Makefileの雛形

そんでもってこれらファイルをディレクトリに突っ込んで以下のようにインストールします。

# cd directory_mod_auth_ntlm_winbind
# autoconf ・・・configure.inとMakefile.inからconfigureとMakefileを作成する。
# ./configure
# make
# make install

これで/usr/lib/httpd/module/mod_auth_ntlm_winbind.soが出来ているはず。

次にApachehttpd.confを以下のように設定します。
NTLM認証をURLが/ntlm_dir配下に行いたい場合。

------------------------httpd.conf Start------------------------------------------
KeepAlive On
#NTLM認証はKeepAlive ON必須
LoadModule auth_ntlm_winbind_module modules/mod_auth_ntlm_winbind.so
#モジュールロード宣言

Alias /ntlm_dir/ "/var/www/html/ntlm_dir/"

NTLMAuth on
AuthType NTLM
AuthName "NTLM Authentication"
NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"
NTLMBasicAuthoritative on
#NTLM認証失敗の場合Basic認証を実施
require valid-user

------------------------httpd.conf End------------------------------------------

次にNTLM認証するntlm_authコマンドをApacheの実行ユーザの権限で行わせるため以下のように権限を付与します。

# chown root:apache /var/cache/samba/winbindd_priveleged/

これで完了です。なお、NTLM認証 on HTTPDアクセスはアクセスログを見れば分かりますが、何回か401ステータスコード
サーバ側が返します。これはNTLM認証する際、クライアントとサーバ間でnegotiateとauthenticateを行ってからコンテンツを返すからです。詳細はこれ見て→The NTLM Authentication Protocol and Security Support Provider

終わり。。。