Active Directory のフォレストに複数のパスワードポリシーを展開する場合、その境界は常にドメインです。このことが多くの顧客に混乱を招いていました。なぜなら、すべてのGPO(Group Policy Object :グループポリシーオブジェクト)でパスワードを変更できるからです。

 しかし、パスワード設定(およびアカウントロックアウト設定)はGPO のコンピュータ設定部分に構成されていることに注意してください。コンピュータ設定はコンピュータオブジェクトにしか適用されません。したがって、コンピュータオブジェクトのローカルアカウントにしか適用されません。

 ただし、この例外として、ドメインヘッド(ドメインの最上位のノード)にリンクされるポリシーがあります。ここにリンクされ、パスワード設定を保持するGPOは、ドメインオブジェクトのパスワード設定とアカウントロックアウト設定の管理インターフェイスとなります。

 実際、それらのGPO はドメインヘッドオブジェクトの属性に書き戻され、そこで有効になります。パスワード変更要求を受信したドメインコントローラは、ドメインヘッドの設定とパスワードとを比較し、パスワードの変更を許可または拒否します。そのため、パスワード設定とアカウントロックアウト設定がActive Directory のドメインヘッドでどのように維持されるのかを理解しておくことが重要になります。

 また、グループポリシーは単なる管理インターフェイスであり、他のOU やサイトにリンクされたGPO で構成されているパスワード設定は、ポリシーの適用先であるコンピュータオブジェクトのローカルユーザーアカウントにのみ適用されることに注意する必要もあります。

 さて、これまでは、パスワード設定とアカウントロックアウト設定はドメインに限られていて、ドメインごとに1 つの設定しか適用できませんでした。異なるパスワードポリシーを必要とする場合は、ドメインを複数展開する必要がありました。

 Windows Server 2008 ではこの仕様が変更されました。Active Directory ディレクトリサービスが拡張され、ドメインコントローラでのパスワード設定の有効性確認が強化された結果、ドメインごとに複数のパスワード設定とアカウントロックアウト設定を構成できるようになりました。

 これらはどのように管理するのでしょうか。GPO は使用しません。既に述べたように、GPO は単なる管理インターフェイスなのです。新しいきめ細かなパスワードポリシーは、ドメイン内で新しいオブジェクトとして構成し、ドメイン内のグループまたはユーザーのいずれかにリンクします。

 これを試してみたい場合は、ADSIEdit.msc を使ってみてください。ドメインのシステムコンテナの配下にあるパスワード設定コンテナを展開して右クリックし、[新規作成]をクリックすると、パスワードポリシーとアカウントロックアウトポリシーを定義する次の必須属性を設定するよう求められます。

  • msDS-PasswordSettingsPrecendence
    自由に設定できる番号である。将来の使用に備えて、番号付けには必ず多少の空きを持たせるようにする。この番号によって、複数の設定を同じオブジェクト(ユーザーまたはグループ)に適用した場合にどのパスワード設定が有効になるのかを定義する。ただし、ユーザーの設定はグループの設定よりも常に優先される。
    通常はこの値が設定オブジェクトの「レベル」に反映される。たとえば、より厳密な設定には低い値を持たせ、優先順位が高い設定には高い値を割り当てることができる。
  • msDS-PasswordReversibleEncryptionEnabled
    この属性はブール値であり、アカウントのパスワードを可逆的に暗号化して格納する必要があるかどうかを定義する。つまり、パスワード設定オブジェクトが適用されるユーザーを指定する。既定値はFALSE で、ベストプラクティスとしてもFALSE に設定することをお勧めする。
  • msDS-PasswordHistoryLength
    ユーザーが再利用できない古いパスワードの数を定義する。これは、ユーザーがパスワードを変更して同じパスワードに戻したり、古いパスワードを再利用できるように何回も変更したりするのを防ぐためである。
    ドメインの既定では、対象ユーザーの過去24 個のパスワードの使用が禁止される。
  • msDS-PasswordComplexityEnabled
    この属性もブール値であり、パスワードを複雑にする必要があるかどうかを定義する。小文字、大文字、数字、記号、またはUnicode 文字のうち少なくとも3 種類の文字セットを適用する必要があるかどうかを定義する。
    ドメインの既定ではオン(TRUE)になっており、ベストプラクティスとしてもTRUE に設定することをお勧めする。
  • msDS-MinimumPasswordLength
    パスワードの最小文字数を定義する。ドメインの既定値は7 文字である。
  • msDS-MinimumPasswordAge
    名前が示すようにパスワードの最短寿命を定義する。最短寿命は、ユーザーがパスワード履歴上限を超え、パスワードを以前と同じ値に戻すことができるまで、同じ日にx 回パスワードを変更することを禁止するために必要である。
    これは負数であり、こちらにあるスクリプトをガイドラインとして使用すると、コンパイルまたはコンパイル解除できる。ドメインの既定値は1 日(-864000000000)である。
  • msDS-MaximumPasswordAge
    前の属性と正反対のもので、パスワードを変更しなければならない時期を定義する。これも前の属性と同じ負数である。ドメインの既定値は42 日(-36288000000000)で ある。
  • msDS-LockoutThreshold
    ユーザーがパスワードの入力試行を何回失敗した後にユーザーオブジェクトをロックするかを定義する。ドメインの既定値は0 で、無効なパスワードが入力されてもアカウントはロックアウトされない。
  • msDS-LockoutObservationWindow
    不良パスワードカウンタをいつリセットするのかを決める。ドメインの既定値は6 分 (-18000000000)である。
  • msDS-LockoutDuration
    パスワードをロックする期間を決める。ドメインの既定値は6 分(-18000000000)である。

 独自のPSO(Password Settings Object :パスワード設定オブジェクト)を作成した後は、PSO をユーザーまたはグループにリンクする必要があります。管理上の目的から、ユーザーではなく常にグループにリンクすることをお勧めします。ユーザーにリンクすると扱いが面倒になり、管理がむずかしくなります。

 PSO をグループまたはユーザーにリンクするには、PSO のmsDS-PSOAppliesTo 属性をグループまたはユーザーの識別名に変更するだけです。たとえば、cn=Administrators,cn=Users,dc=example,dc=com などとします。これは複数値属性であるため、同じPSO を複数のグループまたはユーザーにリンクすることが可能です。

 また、管理用の属性として、どのパスワードポリシーをどのユーザーまたはグループに適用するのかを決める際に役立つ属性が2 つあります。グループまたはユーザーについては、msDS-PSOApplied という属性があります。

 これは実際にはmsDS-PSOAppliesTo 属性の後方リンクであり、このオブジェクトに直接リンクされているすべてのPSO が列挙されます。また、どのPSO が有効なのかを調べる際に役立つ属性として構築されたmsDSResultantPSO属性があります。これは、対象のオブジェクトについてどのPSO が有効なのかを示します。

 本書の執筆時点では、この新機能はBeta の段階であり、適切な管理サポートがGUI に組み込まれていませんが、ADSIEdit.msc を使用すれば簡単に管理できます。また、ADFindADMod などのActive Directory コマンドラインツールを作成したJoe Richards が、PSO の作成とリンクに役立つPSOMgr.exe という新しいコマンドラインユーティリティを開発しました。このユーティリティはwww.joeware.net で公開されています。