Windowsクライアントからシングルサインオン

このQ&Aのポイント
  • Windowsクライアントからシングルサインオンを実現するために、Sambaを利用してLinuxサーバをActive Directoryに参加させる方法について質問があります。現状、Windowsクライアントからのアクセスで認証ダイアログが表示され、シングルサインオンができません。
  • 環境は、Windows Server 2003を使用したActive Directory、Asianux Server3を使用したLinuxサーバ、Windows 7とWindows XPを使用したクライアントマシンです。
  • Linuxサーバの設定ファイルやクライアントマシンの設定を確認しましたが、問題の原因が特定できずに困っています。アドバイスやご助言をいただきたいです。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • maesen
  • ベストアンサー率81% (646/790)
回答No.2

答えではなくて心苦しいのですが、 >(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などで一度パケットを見るのもいいと思います。 既に実施していましたらご了承下さい。

aruaru555
質問者

お礼

回答が遅くなってしまい、申し訳ありません。 XPの別マシンが用意できなかったため、C1のLAN Manager 認証レベルを確認したところ、 「未定義」に設定されていました・・・。 お教えいただいた通り、「NTLM応答のみ送信する」に設定変更し、C1から※1にアクセス したところ、認証ダイアログが表示されずに(ユーザーとパスワードを聞かれることなく) Webページが表示されました! ※ただし、一旦「未定義」から変更してしまうと、もう二度と「未定義」に戻すことは できないようですね。 ちなみに、C2のLAN Manager 認証レベルは、「LMとNTLM応答を送信する」になっていました。 結論として、【疑問点】の(1)(2)共に解決できました。 本当にありがとうございました。

その他の回答 (2)

  • maesen
  • ベストアンサー率81% (646/790)
回答No.3

認証が通るようになったということでなによりです。 ここからはちょっと余計な話になりますが、 Windows Vista以降で「LAN Manager 認証レベル」が変更されているのはセキュリティ強化が主な目的だと思います。(NTLMv2以外の認証を使用しない) そのため、セキュリティを下げる設定は運用環境では出来れば避けたいですね。 (回避手段がなければ仕方がないですが) Sambaは、3系ではNTLMv2はサポートしているはずなので余裕があれば「LAN Manager 認証レベル」がデフォルトでも認証が通るようにしたいところです。 Sambaのリリースや設定の問題なのか、 winbindの問題なのか、 認証ヘルパー(squid-2.5-ntlmssp)の問題なのか Sambaの関係はそれほど詳しくないのでこれぞといったアドバイスができませんが、頭に入れておいて頂ければと思います。

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.1

大体はPCからパスワードを拾って投げる処理を内部的に書いて実現するかと思います。 PCのユーザー名とパスワードを拾ってそれに対するADパスワードを問い合わせ一致していれば通す。そんな処理だったと思います。 パスワードは暗号掛かってますので掛かったまま問い合わせだったと思います。一致すればよいだけなので知る必要はないので。 Linuxサーバの参加にも証明書を登録する必要があると思います。 本当にセキュアな統合SSOにするにはやはりサードパーティ品を購入するのが一般的です。SSOの管理をすべてそれで行います。 http://openstandia.jp/solution/id_management_ad/

aruaru555
質問者

お礼

早速のご回答、ありがとうございます。 改めて質問させていただきますので、もしよろしければ(おわかりになるようでしたら)回答ください。 > PCのユーザー名とパスワードを拾ってそれに対するADパスワードを問い合わせ一致していれば通す。 > そんな処理だったと思います。 C1とC2が同じURLにアクセスして、認証ダイアログに同じ文字を入力しているのに関わらず、 結果が異なるのはどうしてでしょうか・・・? > Linuxサーバの参加にも証明書を登録する必要があると思います。 具体的にどのような手順を踏めばよろしいのでしょうか? 参考になりそうなサイトをご存知でしたらご教示いただきたく、よろしくお願いいたします。 > 本当にセキュアな統合SSOにするにはやはりサードパーティ品を購入するのが一般的です。 ここ数日間、原因究明のためにネットから情報を仕入れていたのですが、 教えていただいたURLの製品については初見でした。 検討させていただきます。

aruaru555
質問者

補足

検証中の【環境】と【現状】について補足させていただきます。 【環境】 C1とC2でネットワーク設定(DNSの設定)が異なります。 ⇒ネットを彷徨っていたところ、どこかのページに「DNSはDCに向けること」とありましたので、  C1のDNSにはxxx.xxx.xxx.xxxを設定しています(うまくいきませんでしたが・・・)。  尚、試しにC1とC2両者のDNSを同一にしてもやはりうまくいきませんでした。 【現状】 > ここで、ドメインに登録されているユーザのID(hoge\hogeuser)とパスワード(※2)を > 入力しても、何故かはじかれてしまいます。 上記ですが、ブラウザ上には「401 Authorization Required」のページが表示されます。

関連するQ&A

  • 名前解決できません。DNSクライアントの設定法は?

    宜しくお願い致します。 vineLinuxをインストールしました。 Mozillaを起動してもインターネットできません。Webが表示されません xxx.xxx.xxx.xxx(職場機のIPアドレス) | WAN | ルータ | vineLinux(自宅) $ ping -c3 xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxxは職場機のIPアドレス) として外部にpingは飛びますが $ ping -c3 yahoo.co.jp yahoo.co.jpは不明なホストです。 となってしまいます。名前解決の問題だと思います。 # cat /etc/resolv.conf nameserve yyy.yyy.yyy.yyy (yyy.yyy.yyy.yyyはISPのDNSサーバのiPアドレス) としていまして # hostname hoge.foo.co.jp # nslooup yahoo.co.jp Server: hoge.foo.co.jp Address: 0.0.0.0 hoge.foo.co.jp can't find yahoo.co.jp No response from server となってしまいます。 どうすれば名前解決出来るようになるのでしょうか?

  • 既存フォレストの既存ドメインに2台目のDCを追加

    既存フォレストの既存ドメインに2台目のDCを追加する手順について教えて下さい。 現在、「SV1」というWindowsサーバのActiveDirectoryで「hoge.local」というドメインがあり、 このドメインに新たにDCを追加しようとしています。 新たなサーバ「SV2」で、ActiveDirectoryの役割を追加し、 ActiveDirectoryドメインサービスインストールウィザードに従って進んでいき、 [ドメインの選択]のところで、「hoge.local」を選択し、「次へ」をクリックすると、 次のようなダイアログが表示されます。 「このActiveDirectoryフォレストにドメインコントローラをインストールするには、 最初に"adprep /forestprep"を使用してフォレストの準備をする必要があります。…」 お聞きしたいのは、「adprep /forestprep」を実行するのは、 SV1でなのかSV2でなのかということです。 SV1かなと思ってるのですが、SV1は運用中なので、コマンドをたたくのが怖くて、 まずは詳しい方にお聞きしてからと思い、質問させて頂きました。 SV1、SV2ともに、Windows Server 2008 R2です。 宜しくお願いします。

  • Windowsサーバーの認証について教えてください。

    ドメインコントローラー(DC)が複数台あるとき、ドメインに参加しているPCがログインする時どのDCで認証してもらうか聞きにいくDCがあるというようなことを聞いたのですがあっているでしょうか? それはFSMOの機能のひとつなんでしょうか?

  • apacheのSSLクライアント認証がうまくいきません

    apacheのSSLクライアント認証がうまくいきません apache1.3.41とmod_sslを利用してクライアント認証を実装しようとしているのですが クライアント認証を有効にするとhttps接続時に証明書提示した後に「ページを表示できません」となってしまいます。 手順は以下のサイトを参考に設定したものです http://www.aconus.com/~oyaji/www/apache_linux_ssl.htm 証明書の発行もインストールも特に問題なくできましたが、接続時にクライアント証明書を提示しても「ページを表示できません」と出てしまいます。ssl_engine_logにもerror_logにもそれらしいエラーが見当たらないのでそれ以外のところに原因があるのでしょうか。 httpd.confの一部(デフォルトからSSLの部分を変更した部分だけ)を展開します。 どこか間違いがあればご指摘よろしくおねがいします。 また、この現象の原因が分かる方がいらっしゃればご教授願います。 <VirtualHost _default_:443> DocumentRoot "/home/xxxxx/webIndex" ServerName 192.168.11.2 ServerAdmin xxx@xxxxxxx.xxx DirectoryIndex login.html ErrorLog /usr/local/apache/logs/error_log TransferLog /usr/local/apache/logs/access_log SSLEngine on SSLCertificateFile /usr/local/apache/conf/ssl.crt/servercert.pem SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/serverkey.pem SSLCACertificatePath /usr/local/apache/conf/ssl.crt SSLCACertificateFile /usr/local/apache/conf/ssl.crt/cacert.pem SSLVerifyClient require SSLVerifyDepth 1     ・     ・     ・ </VirtualHost> ちなみにクライアント認証の部分をコメントアウトしてサーバ証明書だけ有効にすると正常に ページにアクセスできますので、クライアント認証の設定の部分に問題があるのみたいなのですが 起動ができるので設定以外のところに問題があるようにも思えます。 #SSLCACertificatePath /usr/local/apache/conf/ssl.crt #SSLCACertificateFile /usr/local/apache/conf/ssl.crt/cacert.pem #SSLVerifyClient require #SSLVerifyDepth 1 以上です 宜しくお願いします。

  • LinuxでJAVAプログラムの実行のパスについて

    基本的な事とは思うのですが、うまく行かないので ご教授下さい。宜しくお願いします。 ローカルのWINDOWS(eclipse使用)でうまく行くのですが、 Linuxサーバ上でうまく実行できません。 階層は以下のように Aproject/bin/jp/co/hoge/aaa.class Aproject/src/jp/co/hoge/aaa.java Aproject/conf/xxx.prop とbin・src・confが同じレベルにあります。 aaa.java内でxxx.propを読み込む際、相対パスで"conf/xxx.prop" と指定してローカルではきちんと読み込めます。 aaa.javaのパッケージ宣言は package jp.co.hoge; となっていまして、linuxサーバ上で実行する時は、binをカレントで "java jp/co/hoge/aaa"としているので xxx.propを読み込むためには、"../conf/xxx.prop"としなければ ならず、どうしたら良いのかわからなくなってしまいました。 サーバ上で実行する時に今のようにbinをカレントに実行するのでは なく、その上のAprojectの階層をカレントに実行すれば、 パスは"conf/xxx.prop"でいいと思うのですが、 "java bin/co/hoge/aaa"としても実行できません。 どのようにして実行すればうまくパスをあわせる事ができる のでしょうか?? eclipseの設定がまずいのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 自宅のサーバのドメインに参加しようと、しているのですが、うまくいきませ

    自宅のサーバのドメインに参加しようと、しているのですが、うまくいきません。 もしかするとDCのサーバにローカルアドミンでログオンしているのですが、アド民権限でドメインにログオンしないとDCは起動していないことに成るのでしょうか

  • クライアントから認証を行っているサーバの確認と変更

    Win server 2003 R2 SP2 のドメイン環境です。 ADサーバは6台、サイトを3つに分け、各サイト2台づつのDCを配置しています。 クライアントはXPです。 そこで質問です。 クライアントはログオン時に同サイト内のDCに認証に行きますが、 どちらのDCに認証されているか確認する術を教えて頂ければと。 また、ログオン後に認証先のDCを変更できる術を教えていただきだく。 コマンドプロンプトで可能でしょうか? よろしくお願いします。

  • Webドメインだけのドメイン移管(メールドメインはそのまま残す)について教えてください。

    現在ドメイン移管の調整を行っています。 要件は下記の通りです。 旧コンテンツ管理会社(A社)から新コンテンツ管理会社(B社)へドメイン(move.jp)の移管を行いたい。 ドメイン移管はWebコンテンツのみをA社へ移管し、メールドメインはB社のまま使い続けたい。 こういった要件で、現状DNSは下記のように設定されていると仮定します。 レジストリ:move.jp(ドメイン)⇒yyy.yyy.yyy.dns A社DNSサーバIP:xxx.xxx.xxx.dns A社WebサーバIP:xxx.xxx.xxx.web A社MailサーバIP:xxx.xxx.xxx.mail A社DNS設定  (現状はmove.jpドメインを管理していないので何もなし) B社DNSサーバIP:yyy.yyy.yyy.dns B社WebサーバIP:yyy.yyy.yyy.web B社MailサーバIP:yyy.yyy.yyy.mail B社DNS設定 move.jp NS ns.move.jp ns A yyy.yyy.yyy.dns www A yyy.yyy.yyy.web move.jp MX mail.move.jp mail A yyy.yyy.yyy.mail 今回ドメイン移管に当たっては、変化点を少なくするためB社のDNS設定はできれば行いたくありません。 移管に当たっては、下記のように設定すれば正常に移管できるのでしょうか? それとも、やはりB社のDNS設定も変更する必要が必ずありますでしょうか? ドメイン移管時 レジストリ:move.jp(ドメイン)⇒xxx.xxx.xxx.dns A社DNS設定 move.jp NS ns1.move.jp ns1 A xxx.xxx.xxx.dns www A xxx.xxx.xxx.web move.jp MX mail.move.jp mail NS ns.move.jp ns A yyy.yyy.yyy.dns B社DNS設定 move.jp NS ns.move.jp ns A yyy.yyy.yyy.dns www A yyy.yyy.yyy.web (<- 使われないと思うので消す) move.jp MX mail.move.jp (<- 使われないと思うので消す) mail A yyy.yyy.yyy.mail よろしくお願いします。

  • .htaccess でのリダイレクト

    レンタルサーバーを利用していて、ドメインを追加したのですが、制限がありました。 1、新しいドメイン追加の際、メインのドメインに新しいドメインに紐づいたサブドメインが必須 →xxx.comがメインの場合、yyy.comを追加するとyyy.xxx.comが自動的に追加される 2、サブドメインのディレクトリはメインドメインのディレクトリ内にしか作れない →xxx.com/yyy/、yyy.xxx.com、yyy.comと三通りのアクセス手段がある状態 yyy.comからだけアクセスできるようにしたいのですが、.htaccessの設定がどうも上手くいきません。アドバイスいただけませんでしょうか? 下の記述で、サブドメインからのアクセスは回避できました。 RewriteCond %{HTTP_HOST} ^yyy.xxx.com$ [OR] RewriteCond %{HTTP_HOST} ^www.yyy.xxx.com$ RewriteRule ^.*$ "http\:\/\/www\.xxx\.com\/" [R=301,L] 下の記述を追加で、サブディレクトリへのアクセスを回避しようと試みたのですが、yyy.comからアクセスしてもxxx.comへリダイレクトするようになってしまいます。 RedirectMatch permanent ^/yyy$/ / よろしくお願いいたします。

  • DNS リダイレクト

    詳しくない分野のため、教えてください。 xxx.jpというドメインだけを新規取得し、yyy.jpというドメインを持つ既存サイト(サーバ)のページをxxx.jpで表示できるようにDNSの設定をしたいと考えています。 この場合、サイト閲覧者に認識されるurlはxxx.jpだけど、実際に表示されている内容やファイルはyyy.jpのものになるかと思いますが、 この状態を、 「yyy.jpからxxx.jpにリダイレクトする」 と表現するのは間違いでしょうか? そもそも、これはリダイレクトとは言いませんか? 私よりさらに詳しくない人へと説明をしなければならず、お力を貸してください。 前段の話でもおかしなところがあればご指摘いただけると助かります。