Q

複数のドメイン・コントローラ(DC)が存在する環境でアカウント・ロックアウトのポリシーを使用しています。ロックアウトまでの回数を3回に設定しているのに,パスワードを1回間違えただけでロックアウトしてしまうことがあります。調査したところ,いったんロックアウトしたユーザー・アカウントを解除した後に発生するようです。ロックアウトを解除すれば,また3回まで間違えても大丈夫だと思うのですが,どうしてなのでしょう?

A

Active DirectoryのDCがサービス・パック(SP)2以前のものを使っているのが原因だと思われます。


図1●SP2以前のWindows 2000 Serverを使ったActive Directoryでは,アカウントがロックアウトしているかどうかを示す「ロックアウト・ステータス」情報は複製し合うが,パスワードを誤って入力した回数を示すbadPwdCountの値は複製しない
そのため,ロックアウト解除後もbadPwdCountが初期値に戻らないドメイン・コントローラ(DC)が存在し得る。

 Windows 2000のActive Directory環境では,パスワードを間違えた回数(厳密には最後にログオンが成功してから間違ったパスワードが試行された回数)をbadPwdCountというパラメータを使って各DCに保持しています。パスワードを間違える度に,このbadPwdCountは1ずつカウントアップしてきます(図1)。

 そして,ポリシーで設定したしきい値に達するとアカウントをロックアウトし,ロックアウト・ステータス(ロックアウトされたあるいは解除されたという情報)という別のパラメータを他のDCに複製します。これにより,どのDCを使ってもログオンができなくなるわけです。

 管理者があるDC上でロックアウトを解除すると,そのDCのbadPwdCountを“0”にリセットすると同時に,ロックアウト・ステータスを解除状態にして他のDCに複製することで再びログオン可能になる仕組みです。

SP2以前のDCでは
間違えた回数の情報は複製しない

 今回の問題はSP2以前のWindows 2000を使っている場合は,複製される情報がロックアウト・ステータスのみとなり,badPwdCountの値は他のDCとの間で同期を取らないことから発生します。アカウントのロックアウトが発生したDCと管理者が解除したDCが異なっていると,解除をした後もbadPwdCountがしきい値に達したままの状態であるDCが存在してしまうことになります。そのようなDCにログオン要求をし,パスワードを間違えた場合には1回でロックアウトしてしまうというわけです。

 badPwdCountを初期化する[ロックアウトカウントのリセット]の値を比較的小さく設定していれば,すぐに自動的にリセットされるため,あまり問題にはなりません。しかし,例えば[アカウントのロックアウトのしきい値]を3回に設定した場合は,[ロックアウトカウントのリセット]は[提案された値]である“30分後”をそのまま設定してしまうケースが多いでしょう(図2)。


図2●[アカウントのロックアウトのしきい値]を3回に設定すると[ロックアウトカウントのリセット]は30分後が推奨設定になっている

 この場合は,badPwdCountが“0”にリセットされるのは30分後になります。そのため,もしあるアカウントがロックアウトしてから,ロックアウトが解除されて再びログオンするまでに30分たっていない場合には,パスワードを1回間違えただけでロックアウトが起こり得るのです。

 また,サーバー管理者などが短時間で複数のDCにログオンするようなケースでも要注意です。この場合,badPwdCountがあちこちのDCでカウントアップされたままになるため,しきい値に達したDCとロックアウトが解除されるDCが異なってしまう可能性が非常に高くなります。

 さらに,1つのユーザー・アカウントを複数のユーザーが同時に利用している場合も,他のユーザーがパスワードを間違えたことや,ロックアウトした/ロックアウトを解除したことを認識できないためにこの問題が発生しやすいと思われます。

SP2とSP1以前の間でも
パスワード確認のフローに違いが

 サポート技術情報のJP278299に記述されている通り,この問題はSP3が適用済みの環境では発生しません。SP3を適用したDC間では,ロックアウトを解除してbadPwdCountが“0”にリセットされると,他のDC上のbadPwdCountもリセットされます。

 このように,今回の問題はSP2以前のDCを使っている場合に発生しますが,厳密に見てみるとSP2とSP1以前の間でも,パスワード確認の処理プロセスが異なるために発生する現象に差が出てきます。

 SP1以前のWindows 2000では,ユーザーのログオンごとに各DCがPDCエミュレータに毎回パスワード情報を確認します。このため,PDCエミュレータはドメイン全体でのbadPwdCountの累計を保持することになります。例えば,間違ったパスワードでDC1に2回,DC2に1回ログオン要求をすると,PDCエミュレータのDC上ではそれらが累計されて,しきい値が3回の設定ならばロックアウトしてしまいます。

 これに対し,SP2では各DCに初回ログオン要求した際にしかPDCエミュレータには確認しません。このため,同じように間違ったパスワードでDC1に2回ログオン要求した後でも,別のDC2にログオン要求した場合には,そこで新たに3回,合わせて最大で5回間違ってようやくアカウントがロックアウトされることになります。

 ロックアウトを解除する場合も,SP1以前ではPDCエミュレータとなっているDCをきちんと解除しないとbadPwdCountが3のままのPDCエミュレータに毎回確認するため,1度間違っただけで再度ロックアウトされてしまいます。SP2の例では,どのDCでロックアウトを解除したとしても,その他のDC上のbadPwdCountは2になったままであるため,解除後のログオンがそこで処理された場合,パスワードを1回間違えただけでロックアウトされます。

DC上のbadPwdCount値は
ツールを使って調査可能

 その時点でのDCのbadPwdCount値を確認したければ,Windows 2000のCD-ROMに付属しているSupport ToolsのADSI EditやActive Directory管理ツールなどを使います。

 例えば,ADSI Editならば起動してから調べたいDCに接続し,CN=Usersから参照したいユーザーを選びます(図3)。次に,その参照するユーザーのプロパティを開き,[Select which properties to view:]のプルダウンから[badPwdCount]を選択すると,[Value(s):]のところに現在の値が表示されます。

 ただし,ADSI Editを使ってこれらの作業をする場合には,誤って不適切な値を設定しないよう操作には十分注意してください。

 この問題はマイクロソフトのサポート技術情報「JP278299,ロックアウトされたアカウントを別のDCでリセットすると,パスワードを1回間違えただけで再びロックアウトされる」として紹介されています。前述したようにDCにSP3を適用した環境ならばbadPwdCountも複製されるようになっており問題は解決しています。

 今回取り上げたロックアウト情報の複製動作に関しては,Microsoft Windows 2000 Serverリソース・キットの「分散システムガイド(上)第6章Active Directoryの複製」の緊急複製の項を参照してください。

天野朋樹

△ 図をクリックすると拡大されます
図3●ADSI Editを使えばドメイン・コントローラがもつ各ユーザーごとのbadPwdCount値を確認できる