Windowsクライアントからシングルサインオン
お世話になっております。
諸先輩方のお知恵をお借りしたく、投稿させていただきます。
長文となりますが、よろしくお願いいたします。
ネットから情報収集し、自分なりに試行錯誤しながら色々とやってみてはいるものの、
思い通りの動作にならず困っております。
【やりたいこと】
Sambaを利用してLinuxサーバ(Apache)をActive Directoryに参加させ、
Windows統合認証(NTLM認証:mod_auth_ntlm_winbind)を利用して
Windowsクライアントからシングルサインオンさせたい。
【環境】
・DC(Active Directory)
OS:Windows Server 2003 Enterprise Edition SP2
コンピュータ名:adserver
ドメイン:hoge.local
ユーザー:ドメイン「hoge.local」の直下に、ユーザー「hogeuser」が存在する。
IPアドレス:xxx.xxx.xxx.xxx
・Linuxサーバ
OS:Asianux Server3 SP3
Sambaバージョン:3.0.33
Apacheバージョン:2.2.3
コンピューター名:adclient
⇒ADの「Computers」の中に表示されているので、ドメインに参加できていると思われます。
IPアドレス:yyy.yyy.yyy.yyy
・クライアントマシンその1("C1"と略します。)
OS:Windows 7 Professional
ブラウザ:IE8
ドメイン参加:hoge.local(←今回の検証のために作成したドメイン)に参加済み。
⇒コマンドプロンプトで「whoami /fqdn」と打つと「CN=hogeuser,DC=hoge,DC=local」が
返ってきます。
コンピューター名:test-pc
⇒ADの「Computers」の中に表示されているので、ドメインに参加できていると思われます。
・クライアントマシンその2("C2"と略します。)
OS:Windows XP SP3
ブラウザ:IE8
ドメイン参加:xxnet.com(←社内のドメイン)に参加済み。
DC⇔C1間、及びLinuxサーバ⇔C1間の疎通は問題ありません(双方向でのPingは通っています)。
【各種設定ファイル情報】
・/etc/samba/smb.conf ※修正を加えた部分のみ抜粋。
[global]
workgroup = HOGE
security = ads
passdb backend = tdbsam
realm = HOGE.LOCAL
password server = hoge.local
encrypt passwords = true
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind use default domain = yes
winbind cache time = 0
winbind separator = +
template homedir = /home/%U
template shell = /bin/false
・/etc/krb5.conf ※修正を加えた部分のみ抜粋。
[libdefaults]
default_realm = HOGE.LOCAL
[realms]
HOGE.LOCAL = {
kdc = xxx.xxx.xxx.xxx
admin_server = xxx.xxx.xxx.xxx
default_domain = hoge.local
}
[domain_realm]
.hoge.local = HOGE.LOCAL
hoge.local = HOGE.LOCAL
・/etc/hosts
127.0.0.1 localhost.localdomain localhost ←デフォルト(初期状態)のまま変更していない
::1 localhost6.localdomain6 localhost6 ←デフォルト(初期状態)のまま変更していない
yyy.yyy.yyy.yyy adclient.hoge.local adclient ←この行だけを追加
・/etc/resolv.conf
search hoge.local
nameserver xxx.xxx.xxx.xxx
・/etc/nsswitch.conf ※修正を加えた部分のみ抜粋。
passwd: files winbind
shadow: files winbind
group: files winbind
・/etc/httpd/conf/httpd.conf ※修正を加えた部分のみ抜粋。
KeepAlive On
LoadModule auth_ntlm_winbind_module modules/mod_auth_ntlm_winbind.so
Alias /ntlm/ "/var/www/html/ntlm/"
<Directory "/var/www/html/ntlm/">
NTLMAuth on
AuthType NTLM
AuthName "NTLM Authentication"
NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"
NTLMBasicAuthoritative on
require valid-user
</Directory>
・/var/cache/samba/winbindd_privileged のアクセス権
drwxr-x--- 2 root apache 4096 8月 13 10:58 winbindd_privileged
【現状】
Linuxサーバの/var/www/html/ntlm/の下に動作確認用の簡単なWebページ(index.html)を用意し、
C1から「http://yyy.yyy.yyy.yyy/ntlm/」(※1)にアクセスを試みると、
IDとパスワードの入力を促す認証ダイアログが表示されます。
認証ダイアログが表示されずに、ダイレクトでWebページを表示させたい
(つまり、ドメインに参加したユーザのIDとパスワードでシングルサインオンさせたい)
のですが、上述したように認証ダイアログが表示されてしまい、うまくいきません。
ここで、ドメインに登録されているユーザのID(hoge\hogeuser)とパスワード(※2)を
入力しても、何故かはじかれてしまいます。
ちなみに、C2(←hoge.localには参加していない)で同様の手順を踏むと、
認証ダイアログが表示されますが、その認証ダイアログに※2と同一の情報を入力すると、
用意したWebページが正しく表示されます。
以降、C2から※1に何度アクセスしても認証ダイアログが表示されずにWebページが
表示されるので、正しくシングルサインオンができていると思っております。
C2で一度ログオフ、その後再びログオンして再度※1にアクセスすると、
認証ダイアログが再び表示されました。
⇒C2からのシングルサインオンの流れは特に問題無いと理解しています。
【疑問点】
(1)C1から※1にアクセスした際、何故認証ダイアログが表示されてしまうのでしょうか?
(2)C1とC2において、何故動作が違うのか。
⇒C2でWebページが表示できるのに対し、C1が表示できない点が腑に落ちません。
DC(Active Directory)の設定が悪いのか・・・
Linuxサーバーの設定が悪いのか・・・
はたまたクライアントマシン(もしくはブラウザ)の設定が悪いのか・・・
の絞り込みもできず、泥沼にはまっております。
お手数ですが、ご助言・アドバイス等いただきたく、よろしくお願い致します。
【備考】
その他の情報として、以下コマンドの実行結果も示しておきます。
# net ads info
LDAP server: xxx.xxx.xxx.xxx
LDAP server name: adserver.hoge.local
Realm: HOGE.LOCAL
Bind Path: dc=HOGE,dc=LOCAL
LDAP port: 389
Server time: 月, 13 8月 2012 13:12:24 JST
KDC server: DCのIPアドレス
Server time offset: 0
# net ads testjoin
Join is OK
# wbinfo -t
checking the trust secret via RPC calls succeeded
補足
有り難う御座います。 良く分かりました。