2011年12月30日金曜日

mod_spnego を使った Apache サーバでの Windows ドメイン統合認証

とりあえず動かせたので、結果を記しておく。


環境

  • Windows Server 2003 SP2
  • CentOS 6.2 (Apache 2.2.15)
  • mod_spnego 0.2.0

ドメイン側準備


マッピング用ユーザーアカウントを作る。

ドメインコントローラで keytab ファイルを作る。ktpass コマンドはサポートツールに入っている。Windows Server 2003 では SP2 のでないと不具合があるらしいことに注意。パスワードはこのあとどこにも入力しないので、自動でランダム生成させる。

> ktpass -princ HTTP/servername.example.com@EXAMPLE.COM -mapuser EXAMPLE\username -ptype KRB5_NT_PRINCIPAL -out http.keytab +rndPass

インストール


Apache はインストール・設定済みとする。ビルドに必要なパッケージをインストール。

# yum install httpd-devel gcc krb5-devel

モジュールのインストール。

# cd /var/tmp
# tar zxvf /path/to/mod_spnego-0.2.0.tar.gz
# cd mod_spnego-0.2.0
# apxs -c -i -DHAVE_SPNEGO -lgssapi_krb5 mod_spnego.c


keytab ファイルを保護する。/etc/httpd/ に配置しておく。

# chown apache.apache /etc/httpd/http.keytab
# chmod 400 /etc/httpd/http.keytab


設定


/etc/krb5.conf は実際に運用するドメイン名に合わせて変更する。

ドキュメントルートの spnego ディレクトリ以下を制限する例。

/etc/httpd/conf.d/spnego.conf
LoadModule spnego_module modules/mod_spnego.so
Krb5AuthEachReq Off
<Location "/spnego">
 AuthType SPNEGO
 Krb5ServiceName HTTP/servername.example.com
 Krb5KeyTabFile /etc/httpd/http.keytab
 Require valid-user
</Location>

 

テスト


# yum intall krb5-workstation
# kinit -k -t /etc/httpd/http.keytab HTTP/servername.example.com



何も出てこなければ OK。

備考


認証ユーザー名は環境変数の REMOTE_USER に「username@EXAMPLE.COM」の形式で入ってくる。

サーバの時刻が正しくないと認証に失敗する(はず)。

keytab で mapuser したアカウントのパスワードを、Active Directory ユーザーとコンピュータの管理ツールでリセットすると、認証できなくなる。

keytab を作り直したら、Windows クライアントでは klist purge する。古いチケットをキャッシュしているため。

アカウントに keytab は一つしかマップできなくて、別のプリンシパルを同じアカウントにマップすると、前のが使えなくなる。またプリンシパルはホスト名を含むので、keytab を共有することはできない。なのでホストごとにドメインにダミーアカウントを作る必要がある。

Internet Explorer 以外のブラウザ

Google Chrome設定不要。
Firefoxaboug:config で network.negotiate-auth.trusted-uris にホスト名もしくは「http://」を指定。
Opera非対応。

参考にしたもの

Apache Kerberos/SPNEGO module | Free software downloads at SourceForge.net
アーカイブ内の readme.txt
Active Directoryと apacheで 統合Windows認証 - あぁ そうだった

0 件のコメント:

コメントを投稿