今回は、Active Directoryの障害復旧について解説する。

Active Directoryが扱うさまざまなオブジェクトに関する情報は、Active Directoryデータベースと呼ばれるデータベースに保存されており、それをドメインコントローラ同士が互いに同期することで、ドメイン全体での整合性を保っている。そのデータベースにトラブルが発生して、データベースに異常が発生したり、最悪の場合にはデータベースが破壊されたりする可能性は、皆無とはいいきれない。

また、データベースを配置しているドライブが満杯になったためにデータベースの配置場所を移動する、データベースを圧縮して無駄な領域をなくす、といった操作が必要になることもある。

こうした事態に備えて、Active Directoryデータベースを保守するためにntdsutilというコマンドがある。今週は、このコマンドを使った保守作業の操作手順と、その際に必要となるディレクトリサービス復元モードについて取り上げる。

ディレクトリ サービス復元モードの起動[W2K-W2K3]

ドメインコントローラが稼働している状態では、Active Directoryデータベースをロックしているため、外部から操作することはできない。そのため、ドメインコントローラとしての動作を停止させる必要がある。

Windows 2000 ServerやWindows Server 20003では、ディレクトリサービス復元モードという特殊な起動モードを使用する。そのため、ドメインコントローラの再起動が必須となる。ディレクトリサービス復元モードでログオンする際には専用のパスワードを必要とするが、このパスワードは最初にActive Directoryを構成したときに指定しているはずだ。

いいかえれば、構成時に設定したディレクトリサービス復元モードのパスワードを忘れていると、ディレクトリサービス復元モードでログオンできず、結果としてActive Directoryデータベースのメンテナンスができないことになる。

ディレクトリサービス復元モードで起動する際の手順は、以下の通りだ。

  1. システム起動直後に[F8]キーを押す
  2. 起動モードの選択画面を表示する。ドメインコントローラに限って、セーフモードなどの一般的な選択肢以外に、[ディレクトリサービス復元モード」という選択肢があるため、上下方向キーでそれを選択して[Enter]キーを押す
  3. ディレクトリサービス復元モードで起動する。ログオン時に入力するパスワードは、(Administratorではなく)ディレクトリサービス復元モード用のパスワードを使用する。ディレクトリサービス復元モードはセーフモードの一種なので、ログオン後に表示するデスクトップ画面は、セーフモードのそれと似ている

通常の起動モードでは、Active Directoryデータベースを他のソフトウェアが使用している状態になるのでメンテナンスを行えないが、ディレクトリ サービス復元モードではドメインコントローラの機能が停止しているため、データベースのメンテナンスが可能だ。

Windows Server 2003では、起動時に[F8]キーを押すと現れる起動メニューで[ディレクトリサービス復元モード]を選択する。セーフモードの一種なので、起動後にログオンすると、四隅に[セーフモード]と表示する

ドメインコントローラの機能を停止する[W2K8]

Windows Server 2008では、Active Directoryデータベースをメンテナンスする際に、ディレクトリサービス復元モードで再起動する必要がなくなった。Active Directoryに関連するサービスを停止させるだけでよい。停止させなければならないサービスには、以下のものがある。

  • Active Directory Domain Services
  • Kerberos Key Distribution Center
  • Intersite Messaging
  • DNS Server
  • DFS Replication

なお、後の4つのサービスは「Active Directory Domain Services」サービスに依存しており、「Active Directory Domain Services」を停止させると、確認メッセージを受けて一斉に停止させることができる。

メンテナンス作業が終了した後で、再び、これらのサービスを起動する。依存関係のことがあるため、最初に「Active Directory Domain Services」サービスを起動してから、他の4つのサービスを起動する必要がある。

Windows Server 2008では、サーバを起動し直さなくても、「Active Directory Domain Services」サービスを停止させるだけでActive Directoryデータベースをメンテナンスできる。

その際に、依存関係がある他のサービスも一緒に停止する必要がある点に注意。

DS復元モードのパスワード変更[W2K3/W2K8]

ディレクトリサービス復元モードでログオンする際に使用するパスワードは、Active Directoryを最初に構成する際に指定するようになっている。

Windows 2000 Serverでは、このパスワードを後から変更することはできず、変更に際してはActive Directoryをいったん削除して作り直す必要があった。しかし、Windows Server 2003以降はntdsutilコマンドの機能を拡張して、ディレクトリサービス復元モードのパスワードを変更できるようになっている。

なお、この操作はデータベースを直接いじるわけではないので、ディレクトリサービス復元モードで起動し直したり(W2K3)、Active Directory関連サービスを停止させたり(W2K8)する必要はない。変更時の手順は以下のようになる。

  1. コマンドプロンプトで「ntdsutil」と入力して、ntdsutilコマンドを実行する
  2. ntdsutilコマンドのプロンプトを表示する。そこで「Set DSRM Password」と入力する。すると、プロンプトがSet DSRM Passwordのものに切り替わる
  3. 「Reset Password on server <新しいパスワード>」と入力する。たとえば、新しいパスワードを「NewPass01」とする場合、「Reset Password on server NewPass01」と入力する
  4. メッセージにしたがって、現在のパスワードと新しいパスワードを順番に入力する
  5. 作業が完了したら、「q」(または「quit」)と入力する。この操作により、ntdsutilのプロンプトに戻る。さらに「q」と入力すると、ntdsutilコマンドを終了する

つまり、ntdsutilコマンドによるパスワード変更では旧パスワードの入力を必要とするため、パスワードを忘れた場合の解決策にはならない。あくまで、安全のためにパスワードを変更するための手段という位置付けになる。パスワードを忘れたときには、Active Directoryを新規に構成し直すしかない。