環境
- 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 | 設定不要。 |
---|---|
Firefox | aboug:config で network.negotiate-auth.trusted-uris にホスト名もしくは「http://」を指定。 |
Opera | 非対応。 |
参考にしたもの
Apache Kerberos/SPNEGO module | Free software downloads at SourceForge.netアーカイブ内の readme.txt
Active Directoryと apacheで 統合Windows認証 - あぁ そうだった