- PR -

ActiveDirectory環境でADSIを使った接続について

投稿者投稿内容
プロスト
会議室デビュー日: 2006/10/12
投稿数: 10
投稿日時: 2006-10-15 16:27
ちゃっぴさん。ご回答ありがとうございます

引用:

それはわかりましたが、LocalSystem で実行しなければならない理由がわかりません。

例えば、Windows Service から COM+ Server Application を呼び出してやれば、別の account で接続しにいくことは容易に可能でしょう。
# まあ、興味本位なら関係ないでしょうが・・・



えーとですね。厳密に言いますと、過去に色々問題があったシステムでして、お客様もできれば、プログラム、設定を含め、あまり変更をしたくない。という流れできております。
よって、今回の件についても、方式、設計、設定などを含め、それが良いか、悪いかは別として、現状のままで動けばそれで良いということにシステム全体として意見が一致しております(お客さまサイド、SEサイド)。
それが、LocalSystemの設定を変更しない理由です。
という回答で、回答になってますか?

で、今回、お客様に求められているのは、「間違いなく動くようにしなさい」ではなく、「なぜ、Windows ServiceからLocalSystemアカウントで実行するとIPアドレス指定の時、動かないのか調査せよ!!」
ということなのです。
よって、どのような動かし方にすれば最善なのか?という話ではないのです。
(私自身、今のシステムのは途中から参入しているので、歯がゆいところではあります)



新しい情報:

エクスプローラなどでネットワークドライブ接続を設定する際、
1つのサーバに対して、異なるユーザでは接続できませんよね?
→ 資格情報が一致しないというエラーになる。

例えば、サーバ「TEST」のworkディレクトリを
(1)クライアントのXドライブに割り当てる。ログインユーザはA
(2)さらにクライアントのYドライブに割り当てる。ログインユーザはB

しかし、異なる2ユーザでサーバ「TEST」のworkディレクトリにログインする方法として、
(1)クライアントのXドライブに割り当てる。ログインユーザはAで、接続先は「TEST」。
(2)さらにクライアントのYドライブに割り当てる。ログインユーザはB、接続先は「IPアドレス」

このように、ホスト名とIPアドレスで別々に接続することにより、異なる2ユーザで接続することができる。
この理由は、資格情報(ユーザ名、パスワードの組)はホスト名1つに対して、1つしか持てないが、IPアドレスしての資格情報はホスト名の資格情報とは別だそうです。

よって、ホスト名、IPアドレスでそれぞれ別の資格情報が持てるんだそうです。

この考えを今回の件に当てはめると、ホスト名指定の際に正常になるのは、ホスト名をクライアントが資格情報として保持しているので、それが使用される。
IPアドレス指定で動かないのは、Windows Service がLocalSystemアカウントで動作しているため、nullセッション接続となり、資格情報を持っていない。新規接続しようとするが、IPアドレスに対する資格情報はホスト名の資格情報とはクライント上で別管理なため、資格情報を取得する手段がなく、結局nullセッションのまま通信しエラーで終了する。

こんな推測ができましたが、間違ってますか?
でもこれって、自分の推測の域を出てないんですよね?
これを立証(上記文面とにたようなことが記述されている)できるMSDNサイトがあれば、どんぴしゃ!!なんですが。。。

こんな方向でお客様に話せるネタとかないですか?
プロスト
会議室デビュー日: 2006/10/12
投稿数: 10
投稿日時: 2006-10-18 15:56
自己レスです。解決しました。

IPアドレス指定の際は、Desktop起動、サービス(LocalSystem)に関わらず、Kerberos認証とはならず、NTLM認証に格下げされる。
→ Desktop時はユーザがドメインにログオン時の資格情報が使用できない
→ サービス時はコンピュータ起動時のドメイン参加の資格情報が使用できない

NTLM認証となった際はユーザ名などが必要。
サービス起動でLocalSystemアカウントの場合はNULLセッションとなり、ユーザ名などは持たない。

よって、サービス(LocalSystem)から起動時にADSI接続でIPアドレス指定となった際はNTLM認証だけど、NULLセッションという状態でサーバにログオンされる。
→サーバへのログオン自体は匿名ユーザとして成功する。

次にActiveDirectoryへの操作認証に移る。

匿名ログオンでActiveDirectoryに対するLDAP操作を行おうと試みるため匿名ユーザに対する権限の問題が発生する。

この問題が書かれているサイト
http://support.microsoft.com/kb/326690

ということで、
・dsHeuristicsを0000002 に変更。
・匿名ユーザ(ANONYMOUSE)にドメイン全体の読み取り権限を付与。

でサービス(LocalSystem)からADSI(IPアドレス指定)接続を実行。
エラーとはならず正常終了!!

結論)
1.Desktopからホスト名指定でADSI接続が動作する
ログオンユーザの権限(資格情報権限)でLDAP操作されるから

2.DesktopからIPアドレス指定でADSI接続が動作する
ログオンユーザの権限(新規接続権限)でLDAP操作されるから

3.サービス(LocalSystem)からホスト名指定でADSI接続が動作する
コンピュータの権限(資格情報権限)でLDAP操作されるから

4.サービス(LocalSystem)からIPアドレス指定でADSI接続が失敗する
Win2003では匿名ユーザに対してはLDAP操作が無効になっているから

となります。

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



ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-10-19 00:00
解決したようですね。
ただ、あまりにも security がやばそうなので。

引用:

・匿名ユーザ(ANONYMOUSE)にドメイン全体の読み取り権限を付与。



これやったことによる影響理解していますか?

前回で COM+ server application による偽装を提案しましたが、それ以外でも ADsOpenObject を利用することで偽装して AD へ接続できます。

で、双方とも service の起動 account は変更しないで実現可能です。
そういうところももう少し検討してみては?
プロスト
会議室デビュー日: 2006/10/12
投稿数: 10
投稿日時: 2006-10-19 10:13
引用:


これやったことによる影響理解していますか?




もちろん理解しております。
これをやったのは、あくまでも、今回の検証のためです。
本番環境でこのような設定にするつもりはありません。

引用:


前回で COM+ server application による偽装を提案しましたが、それ以外でも ADsOpenObject を利用することで偽装して AD へ接続できます。

で、双方とも service の起動 account は変更しないで実現可能です。
そういうところももう少し検討してみては?



はい、セキュリティに関しては、古いシステムゆえに全体として、かなり甘いと感じております。
次回のReplaceの時にでも提案していこうと考えています。

色々ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)