2006-11-19

λ 日立、Wooo「DV-DH1000D」などのソフト更新に不具合があった

おそらく不具合バージョンに更新されていたんだと思うのだが、この記事が出ていた当時起動が10倍以上速くなっていた。

のだが、なんか元に戻っている。 多分初期化処理の早期にある程度操作できるようメインプロセスを起動したけど、 初期化処理が終わらないうちに電源切ると、問題のある状態になるとかそんな感じだろうか。

1日すると治るあたりTIMEZONEの扱いか?AX10でも昔はまったし。

λ [SSO] apache2.2 mod_authnz_ldap から ActiveDirectory で認証 (失敗)

ldap-status をldap認証するという例がmod_ldapのマニュアルにあったので、 ActiveDirectoryに向かって認証の実験。

サンプル通りだと AuthType がないぞ、と文句言うので AuthType Basic を追加、さらに Basic認証の中で LDAP認証を確実に実行させるために、 AuthBasicProvider ldap を追加した。 tcpdump -vvv -X -s 1500 port 389 コマンドで通信を見ながら調査。

<Location /ldap-status>
SetHandler ldap-status
AuthType Basic
AuthName ldapstatus
AuthBasicProvider ldap
AuthLDAPBindDN ldapuser@ad.example.com
AuthLDAPBindPassword ********
# AuthLDAPURL ldap://dc1.ad.example.com/dc=ad,dc=example,dc=com?sAMAccountName?sub?(objectClass=*)
# AuthLDAPURL ldap://dc1.ad.example.com/?sAMAccountName?sub?(objectClass=*)
AuthLDAPURL ldap://dc1.ad.example.com/?userPrincipalName?sub?(objectClass=user)
AuthzLDAPAuthoritative off
require valid-user
</Location>

AuthLDAPURLに dc=ad,dc=example,dc=comの部分を入れると次のような感じでServer Error が発生するので、そこは削除してドメイン全体を検索させることに。

[Sun Nov 19 08:32:14 2006] [warn] [client x.x.x.x] [72643] auth_ldap authenticate: user h authentication failed; URI /ldap-status [ldap_search_ext_s() for user failed][Operations error]

ブラウザのダイアログで入力するIDはuserPrincipalNameと比較することにした。 この場合、入力するのは "username@ad.example.com" とメールアドレスのような形式である。(まさにprincipalNameなわけだが)

一応LDAP経由でエントリを持ってくる部分には成功しているようなのだが、さらにブラウザで指定されたパスワードでバインドする部分が通らない。 distinguished name に日本語が入っているのが問題なのかなあ。 DNの日本語を止めるという選択をする気はないのでここで中断。

ちなみに、AuthLDAPBindDN を空にして、最初のLDAPエントリ持ってくる部分にKerberos認証を使ってくれるかどうかを確認してみたが、 Apacheの動作ユーザで kinit してTGTを取得していても、In order to perform this operation a successful bind must be completed on the connection. と言われる。 (この状態でApacheの動作ユーザによるldapsearchコマンドは成功する。) mod_authnz_ldap はKerberon認証によるLDAP接続に対応していないのかしら。

λ [SSO] apache22 mod_spnego から ActiveDirectory で認証 (Windows統合認証/IEのダイアログなしまで成功)

Apache2-SPNEGOを見ながらインストール作業。 対象マシンは FreeBSD-6.2RC1

fbopenssl, modgssapache はライブラリの作成だが、configureでもautomakeでもない状況。 俺は野良makeについては /local 以下に置くポリシーである。

fbopenssl のインストール作業は以下の通り

tar xzf fbopenssl-0.0.4.tar.gz
cd fbopenssl
env OPENSSLDIR=/usr/lib gmake CFG=release
sudo mkdir -p /local/lib
sudo install FreeBSD-release/libfbopenssl.a /local/lib/
sudo install FreeBSD-release/libfbopenssl.so /local/lib/
sudo pax -r -w include /local/

modgssapache 内の libspnegohelp のインストール作業は以下の通り

mkdir modgssapache
cd modgssapache
tar xzf ../modgssapache-0.0.5.tar.gz
cd spnegohelp
make "CFLAGS= -fpic -D__LITTLE_ENDIAN__" libs
sudo install libspnegohelp.so /local/lib
sudo install libspnegohelp.a /local/lib

mod_spnego のインストール作業は以下の通り(httpd.conf への反映は自分でやる)

/usr/local/sbin/apxs -c -i -DHEIMDAL -I/local/include -L/local/lib -lfbopenssl -lcrypto -lgssapi -lkrb5 -lasn1 -lroken -lcom_err -lcrypt mod_spnego.c

/local/lib に置いたライブラリをOSに認識させる作業。

/sbin/ldconfig -m /local/lib

httpd.conf に追加した設定。/server-status のところに認証をかけてみることにする。

LoadModule spnego_module      libexec/apache22/mod_spnego.so
Krb5AuthEachReq On
<Location /server-status>
  SetHandler server-status
  Krb5KeyTabFile /usr/local/etc/apache22/http.keytab
  Krb5ServiceName http
  AuthType SPNEGO
  # Require user alice@FOO.COM bob@FOO.COM david@FOO.COM
  Require valid-user
</Location>

ここからkeytabファイルを作成する作業。 WindowsServer2003 マシンで freebsd_http というユーザアカウントを作成した後、以下のコマンドで作成。

ktpass -princ http/freebsd.ad.example.com@AD.EXAMPLE.COM -mapuser AD\freebsd_http -pass * -out freebsdhttp.keytab

freebsdhttp.keytab をFreeBSDマシンに転送した後、以下のコマンドをFreeBSD側で実行して keytab ファイルを構築する。

ktutil copy freebsdhttp.keytab /usr/local/etc/apache22/http.keytab
chown www /usr/local/etc/apache22/http.keytab
chgrp www /usr/local/etc/apache22/http.keytab
chmod 600 /usr/local/etc/apache22/http.keytab
rm freebsdhttp.keytab

これでapache2側の設定は完了。apache2を再起動して IE6 から http://freebsd.ad.example.com/server-status にアクセスすると、 ダイアログが現われてアカウントとパスワードを入力する。ここでのアカウントはWindowsルールなので AD\ユーザ名,ユーザ名@ad.example.com のいずれの形式でもよい。

さらにIE側の設定をするとWindows統合認証になる。すなわちダイアログなしで、ログオンしたユーザの情報を自動的に渡してくれるようになる。 設定方法は HTTP-Based Cross-Platform Authentication via the Negotiate Protocol に記載されている。

IE側の設定ポイントは以下の通り。

  • イントラネットゾーン のサイトとして *.ad.example.com を追加する
  • イントラネットゾーンセキュリティの設定の中のユーザ認証→ログオンで「イントラネットゾーンでのみ自動的にログオンする」を選択する。
  • 該当のapacheへの接続においてはプロキシ経由にならないことを確実にする
  • オプションの詳細設定で「統合 Windows 認証を使用する(再起動が必要)」を有効にする

こんなの一般ユーザにやらせるのは無理なので、運用においてはグループポリシーに設定することになるだろう。

最近Windows SharepointServicesがSPNEGO認証っぽくてダイアログ表示されるのがうざかったのだが、回避方法が分かって嬉しい。 ProjectServer2003で苦労していたのもこれで解決するような気が。

[]