2008年9月17日水曜日

Apacheのアクセス許可にKerberos認証を使う

メモエントリ
Apache2.0系でしかうまくいかない、サブドメインの使いかた不明。
 

少々昔に設定したけど、書いておかないとしたことすら忘れそう。
Apacheで作ったWEBサーバの認証をKerberos認証にするというやり方。まあWindowsの ActiveDirectory に投げるというだけなんですが、既存の認証基盤をつかえておトク。

確か当時はここを参考にした。
個人サイト:ActiveDirectory+Linuxによる部署内サーバ構築
http://rina.jpn.ph/~rance/server/index.html
Microsoft:Providing Active Directory authentication via Kerberos protocol in Apache
http://support.microsoft.com/?scid=kb%3Ben-us%3B555092&x=15&y=13


Apacheの追加モジュール


設定したのはApache2.0.54です、 mod_auth_kerb をyumで入れました。
 

httpd の conf.d の下に "auth_kerb.conf" ファイルができる、有効な中身はこれだけ。
LoadModule auth_kerb_module modules/mod_auth_kerb.so
 

ActiveDirectory側の準備


不要
 
 

Kerberosクライアントの設定


"/etc/krb5.conf" を編集する。なかったら「krb5-workstation」が入ってないので入れておく。
例は ActiveDirectory 側のドメイン名が "example.local" の環境を対象とした場合、該当のディレクティブの太字箇所を書き換える。
途中のサーバ名は環境に合わせて、1台でもOKだけど名前解決はできるようにリゾルバを設定しておく必要がある。


[libdefaults]
default_realm = EXAMPLE.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
 
[realms]
ICRAFT.LOCAL = {
kdc = server01.example.local:88
kdc = server02.example.local:88
admin_server = server01.example.local:749
}
 
[domain_realm]
.example.local = EXAMPLE.LOCAL
example.local = EXAMPLE.LOCAL



レルムのところだけで十分かもしれない。
 
 

Kerberos認証用、keytabファイルの作成


場所はApacheが読めるところに "auth_kerb.keytab" ファイルを作る。 例えば"/usr/lib/httpd/modules/auth_kerb.keytab" のような感じ、中身は一行。

HTTP/web01.example.local@EXAMPLE.LOCAL
前半はApacheを入れたサーバのFQDN. 使っている環境はグローバル環境にあるのでドメインがne.jp. なんだけどそれでもいい、実は何でもいいのかもしれない。ファイルいらないという噂も。。
 
 

Kerberos認証できるか試してみる


ActiveDirectory上のユーザとパスワードで認証できるか試してみる、kinit ユーティリティを使う。
# kinit testuser
Password for testuser@EXAMPLE.LOCAL:[パスワードを入力]

何も起こらなければ成功、チケットが発行されているはず。
一応klistで確かめられる。
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: testuser@EXAMPLE.LOCAL



有効期限とかが出てくるので、それを見ると認証チケットができているようなことが確認できる。
 
 

Apacheのコンフィグ


Basic認証などを書く所でこうする。
AuthType Kerberos
AuthName "Kerberos authentication"
Krb5Keytab modules/auth_kerb.keytab
KrbVerifyKDC off
KrbMethodNegotiate off
KrbSaveCredentials off
require valid-user

これでWEBサーバにアクセスしたら、設定したディレクトリで "Kerberos authentication" の入力ダイアログが出て、ActiveDirectoryに存在する アカウント/パスワード で認証してくれる。
 
もちろんSSLは使っておこう。
 
 
 


設定自体はすぐなんだけど、ActiveDirectory上のユーザは全部認証できるのがいまいち。
応急処置としては、USER環境変数をとっ捕まえて REWRITE すればいいのかな。