こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2012-08-13 14:46:29

QNo.7641681

すぐに回答ほしいです

質問者が選んだベストアンサー

答えではなくて心苦しいのですが、

>(2)C1とC2において、何故動作が違うのか。
> ⇒C2でWebページが表示できるのに対し、C1が表示できない点が腑に落ちません。

切り分けの一つとしてです。
質問者さんの構成ではC1とC2はOSが異なります。
XPと7ではNTLMに関する初期設定が異なりますので、C1の代わりに別のXPのPCで確認することは出来ませんでしょうか?

XPでアクセス可能であればそのLinuxサーバのどこかの部分でNTLMv2認証が出来ない可能性が高いことになります。
XPでも7と同じ結果であれば別の原因となると思います。

もし、XPが用意できなければ7のセキュリティポリシーで
「ネットワーク セキュリティ : LAN Manager 認証レベル」を[NTLM 応答のみ送信する]にすることで同等の状態にする方法もあります。
(Windows 7のデフォルトは[NTLMv2 応答のみ送信する])

また、httpですのでパケットをキャプチャすることで認証のやり取りが目視出来ます。
キャプチャからどこで問題が出ているかを特定することが出来るかもしれません。
行き詰ったらWiresharkなどで一度パケットを見るのもいいと思います。

既に実施していましたらご了承下さい。

投稿日時 - 2012-08-14 17:12:12

お礼

回答が遅くなってしまい、申し訳ありません。

XPの別マシンが用意できなかったため、C1のLAN Manager 認証レベルを確認したところ、
「未定義」に設定されていました・・・。

お教えいただいた通り、「NTLM応答のみ送信する」に設定変更し、C1から※1にアクセス
したところ、認証ダイアログが表示されずに(ユーザーとパスワードを聞かれることなく)
Webページが表示されました!
※ただし、一旦「未定義」から変更してしまうと、もう二度と「未定義」に戻すことは
できないようですね。

ちなみに、C2のLAN Manager 認証レベルは、「LMとNTLM応答を送信する」になっていました。

結論として、【疑問点】の(1)(2)共に解決できました。

本当にありがとうございました。

投稿日時 - 2012-08-16 00:05:32

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

認証が通るようになったということでなによりです。

ここからはちょっと余計な話になりますが、

Windows Vista以降で「LAN Manager 認証レベル」が変更されているのはセキュリティ強化が主な目的だと思います。(NTLMv2以外の認証を使用しない)

そのため、セキュリティを下げる設定は運用環境では出来れば避けたいですね。
(回避手段がなければ仕方がないですが)

Sambaは、3系ではNTLMv2はサポートしているはずなので余裕があれば「LAN Manager 認証レベル」がデフォルトでも認証が通るようにしたいところです。

Sambaのリリースや設定の問題なのか、
winbindの問題なのか、
認証ヘルパー(squid-2.5-ntlmssp)の問題なのか

Sambaの関係はそれほど詳しくないのでこれぞといったアドバイスができませんが、頭に入れておいて頂ければと思います。

投稿日時 - 2012-08-16 11:29:45

ANo.1

大体はPCからパスワードを拾って投げる処理を内部的に書いて実現するかと思います。
PCのユーザー名とパスワードを拾ってそれに対するADパスワードを問い合わせ一致していれば通す。そんな処理だったと思います。
パスワードは暗号掛かってますので掛かったまま問い合わせだったと思います。一致すればよいだけなので知る必要はないので。

Linuxサーバの参加にも証明書を登録する必要があると思います。

本当にセキュアな統合SSOにするにはやはりサードパーティ品を購入するのが一般的です。SSOの管理をすべてそれで行います。
http://openstandia.jp/solution/id_management_ad/

投稿日時 - 2012-08-13 15:19:30

補足

検証中の【環境】と【現状】について補足させていただきます。

【環境】
C1とC2でネットワーク設定(DNSの設定)が異なります。
⇒ネットを彷徨っていたところ、どこかのページに「DNSはDCに向けること」とありましたので、
 C1のDNSにはxxx.xxx.xxx.xxxを設定しています(うまくいきませんでしたが・・・)。
 尚、試しにC1とC2両者のDNSを同一にしてもやはりうまくいきませんでした。

【現状】
> ここで、ドメインに登録されているユーザのID(hoge\hogeuser)とパスワード(※2)を
> 入力しても、何故かはじかれてしまいます。
上記ですが、ブラウザ上には「401 Authorization Required」のページが表示されます。

投稿日時 - 2012-08-13 17:22:08

お礼

早速のご回答、ありがとうございます。
改めて質問させていただきますので、もしよろしければ(おわかりになるようでしたら)回答ください。

> PCのユーザー名とパスワードを拾ってそれに対するADパスワードを問い合わせ一致していれば通す。
> そんな処理だったと思います。
C1とC2が同じURLにアクセスして、認証ダイアログに同じ文字を入力しているのに関わらず、
結果が異なるのはどうしてでしょうか・・・?


> Linuxサーバの参加にも証明書を登録する必要があると思います。
具体的にどのような手順を踏めばよろしいのでしょうか?
参考になりそうなサイトをご存知でしたらご教示いただきたく、よろしくお願いいたします。


> 本当にセキュアな統合SSOにするにはやはりサードパーティ品を購入するのが一般的です。
ここ数日間、原因究明のためにネットから情報を仕入れていたのですが、
教えていただいたURLの製品については初見でした。
検討させていただきます。

投稿日時 - 2012-08-13 16:04:36

あなたにオススメの質問