【AD基礎】FSMOとは?FSMOの各役割について詳説!

  • 2022年10月15日
  • 2023年6月8日
  • AD DS

Active Directory ドメイン サービスを利用すると、システム管理者が各端末やユーザーを一元的に管理することができます。管理を担っているのがドメイン コントローラーというサーバーとなりますが、その中でも特別な役割をもったドメイン コントローラーが存在します。

その特別な役割を総称して「FSMO」もしくは「操作マスター」と呼ばれます。

今回は、FSMO の各役割について詳細に紹介します。

 

FSMOとは

FSMO(Flexible Single Master Operations)とは、ドメイン コントローラーがもてる特別な役割のことです。一般的には、FSMO は “フィズモ”と呼ばれています。FSMO には、以下の 5 つの役割が定義されており、各役割に与えられたの処理を行います。

 

  • スキーマ マスター
  • ドメイン名前付けマスター
  • PDC エミュレーター
  • RID マスター
  • インフラストラクチャー マスター

 

既定では、フォレスト ルート ドメインの最初のドメイン コントローラーが、全ての FSMO の役割を保持する構成となっています。FSMO の名前に “Flexible” という英単語が含まれている通り、役割を自由に移動させて、どのドメイン コントローラーも役割を担うことが可能です。FSMO の各役割が配置される数や、役割を保持しているドメイン コントローラーを参照、変更を行える管理ツールは以下の通りです。

 

FSMO 役割名 配置数 設定の参照/変更を行える管理ツール
スキーマ マスター フォレストごとに 1 台 Active Directory スキーマ
ドメイン名前付けマスター フォレストごとに 1 台 Active Directory ドメインと信頼関係
PDC エミュレーター ドメインごとに 1 台 Active Directory ユーザーとコンピューター
RID マスター ドメインごとに 1 台 Active Directory ユーザーとコンピューター
インフラストラクチャー マスター ドメインごとに 1 台 Active Directory ユーザーとコンピューター

 

 

スキーマ マスター

スキーマ マスターとは、AD のスキーマを変更できる役割のことです。

AD スキーマとは、AD オブジェクトのデータ構造を定義したものとなります。例えば、ユーザー オブジェクトであれば、名前や電話番号、部署や役職などの情報を格納することができます。このように、オブジェクトにどのような属性を付与できるのか、また属性値のデータ形式などの、オブジェクトのデータ構造が定義されたものをスキーマと呼びます。

AD スキーマは、AD データベースのスキーマ パーティションに格納されています。AD スキーマは重要な情報であるため、スキーマ パーティションの情報を変更できるのは、スキーマ マスターの役割をもつドメイン コントローラーのみとなっています。スキーマ マスターの役割を保持できるドメイン コントローラーは、フォレストに 1 台だけとなります。

また、フォレストの機能レベルの変更も、スキーマ マスター上で行われます。フォレストの機能レベルを変更する場合は、Enterprise Admins の権限をもつユーザーで操作する必要があります。

 

ドメイン名前付けマスター

ドメイン名前付けマスターとは、フォレストにドメインを追加したり、削除する役割のことです。また、ドメイン名前付けマスターは、AD データベースに名前付きコンテキスト(Naming Context)を追加できる唯一のドメイン コントローラーで、ドメイン パーティションやアプリケーション パーティションを追加することができます。ドメイン名前付けマスターの役割を保持できるドメイン コントローラーは、フォレストに 1 台だけとなります。

ドメイン名前付けマスターの役割は、グローバル カタログの機能を保持しているドメイン コントローラーに持たせることをおすすめします。ドメインを追加したり、アプリケーション パーティションを追加する時に、同一フォレストに、作成するパーティションと同名のパーティションがないかを確認する処理が行われます。もし、ドメイン名前付けマスターの役割をもつドメイン コントローラーがグローバル カタログであれば、この確認処理をローカルで行うことができるため、処理にかかる時間が短く済みます。

 

PDC エミュレーター

PDC エミュレーターは、複数の役割を担った重要な役割となります。Windows NT 時代のドメインにおける PDC(Primary Domain Controller)が果たしていた役割を代行しています。具体的には PDC エミュレーターでは、以下のような役割を担っています。

 

  • アカウントのパスワード変更の即時複製先
  • アカウント ロックアウトの緊急複製先
  • パスワード ポリシーの緊急複製先
  • GPO の編集
  • TDO の作成やパスワードの更新
  • NTP 時刻同期における最上位の NTP サーバー
  • ドメイン マスター ブラウザー

 

PDC エミュレーターは、ドメインに 1 台のみとなります。

 
 NT ドメインとは
Windows NT 時代には、まだ Active Directory という言葉は存在せず、NT ドメインでの管理の仕組みは現在の AD ドメインとは全く異なります。NT ドメインでは、プライマリー ドメイン コントローラー(PDC)と呼ばれるデータを更新できるドメイン コントローラーと、バックアップ ドメイン コントローラー(BDC)と呼ばれるデータを更新できないドメイン コントローラーで構成されます。
BDC は PDC からデータを複製してくることにより、PDC と同じデータを保持していますが、そのデータは読み取りのみが可能で、書き込みをすることができないという特徴があります。
PDC エミュレーターが担う各役割について、詳細を紹介します。

 

アカウントのパスワード変更の即時複製

パスワードの変更は PDC エミュレーターに即時複製されるため、PDC エミュレーターの役割をもつドメイン コントローラーは全てのアカウントの最新のパスワードを保持しています。
複数のドメイン コントローラーで構成されているドメイン環境である場合、クライアント端末からアカウントのパスワード変更の通知を受け取ったドメイン コントローラーは、自身の AD データベースにてデータを変更し、また PDC エミュレーターへパスワードの変更を通知します。PDC エミュレーターはパスワードの変更の通知を受け取ったら、AD データベースにてデータを変更します。(クライアント端末からアカウントのパスワード変更の通知を受け取ったドメイン コントローラーが PDC エミュレーターの場合は、そのまま自身の AD データベースを変更するのみとなります)
PDC エミュレーターの役割をもっていないドメイン コントローラーが、クライアント端末から認証要求を受け取った結果、パスワード間違いとなった場合を想定します。そのドメイン コントローラーはパスワード間違いによる認証失敗とせずに、PDC エミュレーターに認証要求を転送します。PDC エミュレーターにてパスワードが一致した場合は、転送元のドメイン コントローラーへ認証成功したことを通知します。もともと認証要求を受け取ったドメイン コントローラーはクライアント端末へ認証成功を応答します。

PDC エミュレーターが最新のパスワードを保持する構成になっているのは、ドメイン コントローラー間の AD データベースの複製遅延を考慮しているためです。前述の通り、アカウントのパスワードが変更されると、変更通知を受け取ったドメイン コントローラーと、即時複製先の PDC エミュレーターの 2 台にて最新のパスワードに変更されます。それ以外のドメイン コントローラーに関しては、通常の複製スケジュールで新しいパスワードが複製される動作となります。

ドメイン コントローラー間の複製に時間がかかっており、新しいパスワードが複製されてきていないドメイン コントローラーにて認証要求を受け取ったら、パスワード間違いにより認証が失敗してしまいます。ユーザーは正しいパスワードを入力しているにも関わらず、複製遅延により認証失敗となってしまうという状況を回避するために、PDC エミュレーターは常に最新のパスワードを保持している状態として、認証失敗した場合には PDC エミュレーターに認証要求を転送する動作になっています。

 

badPwdCount 属性値のリセットの即時複製

アカウントの badPwdCount 属性の値のリセットについても、PDC エミュレーターに即時複製されます。badPwdCount 属性は、アカウント ロックアウトの機能で利用される属性となります。

アカウント ロックアウトとは、グループ ポリシーで設定した回数だけ連続して認証に失敗すると、一定期間、そのアカウントでログオンできないようにするセキュリティの機能です。連続して認証失敗した回数をカウントするために、アカウントのカウンターの属性(badPwdCount 属性)に認証に失敗した数を計上します。認証に連続して失敗すると、badPwdCount 属性の値に失敗した回数の値が計上されますが、その後に認証に成功すると badPwdCount 属性の値は 0 にリセットされます。認証が成功したドメイン コントローラーのみで badPwdCount 属性がリセットされるのではなく、PDC エミュレーターにも badPwdCount 属性をリセットするように通知されます。

 

GPO の編集

Active Directory ドメイン サービスでは、ドメインに参加している端末に設定を配布することができます。ドメインで配布される設定の内容は、グループ ポリシー オブジェクトと呼ばれるオブジェクトの中に格納されています。この GPO の設定内容を編集するには、[グループ ポリシーの管理] という管理コンソールを利用します。

ドメイン コントローラーで GPO を編集するために、[グループ ポリシーの管理] を起動すると、既定で PDC エミュレーターに接続して、GPO を編集するという動作になっています。この動作は、どのドメイン コントローラーで GPO を編集しても、GPO の設定の更新情報が失われないようにするためです。

ただし、PDC エミュレーター上でしか GPO を編集できないというわけではありません。もし、[グループ ポリシーの管理] を起動した際に、PDC エミュレーターに接続できなかった場合は、他のドメイン コントローラーに接続して、GPO を編集することもできます。

 

NTP 時刻同期における最上位の NTP サーバー

Active Directory のドメイン環境では、主に Kerberos 認証と NTLM 認証と呼ばれる認証方式が利用されます。優先して利用される Kerberos 認証では、5 分以上の時刻ずれが発生していると認証に失敗します。そのため、ドメイン環境で管理されている全ての端末では、システム時刻がずれないように、NTP プロトコルを利用して時刻同期される仕組みとなっています。

各ドメイン コントローラーは NTP サーバーとしても動作しており、ドメイン内の各端末はドメイン コントローラーから提示された時刻に合わせています。PDC 以外のドメイン コントローラーは、PDC エミュレーターから提示された時刻に合わせています。PDC エミュレーターは、NTP 時刻同期における最上位の NTP サーバー(ルートサーバー)となります。

マスター ブラウザー

エクスプローラーの左ペインに表示されている [ネットワーク] というアイコンをクリックすると、ネットワーク上に存在するコンピューターが表示される動作があります。この機能は “コンピューター ブラウジング” という仕組みを利用して実現されています。このコンピューター ブラウジングの仕組みにおいて、PDC エミュレーターは “ドメイン マスター ブラウザー” と呼ばれる役割を果たしています。

ただし、コンピューター ブラウジングはレガシーな機能であり、Windows Server 2008 R2 以降では既定で無効になっており、現在はほぼ利用されていません。

 

RID マスター

Windows OS ではフォルダーやファイルに対して、特定のユーザーやグループに対してアクセス権を設定することができます。ユーザーやグループのように、アクセス権を許可する対象として指定できるものを “セキュリティ プリンシパル” と呼びます。各セキュリティ プリンシパルを一意に特定できるように、セキュリティ ID (Security ID:SID) が割り振られています。SID は以下のように “ドメイン SID” と “相対識別子(Relative Identifier ID:RID)” の 2 つの構成で成り立っています。

ドメイン SID はドメインに割り当てらている SID となり、ドメイン SID に各ユーザーやグループ固有の番号である RID を追加して、それをユーザーやグループの SID として利用します。

ドメイン コンピューターでユーザーやグループを作成すると、新しく固有の SID が発行されて割り当てられます。Active Directory はマルチ マスターの仕組みとなるので、どのドメイン コントローラーでもユーザーやグループを作成することができます。各ドメイン コントローラーが作成したオブジェクトに自由に SID を割り当てても問題が発生しないように、RID マスターが存在します。

RID マスターは、各ドメイン コントローラーに RID に利用できる値の範囲(プール)を割り当てる役割をもっています。既定では 500 ずつの RID プールを割り当てます。各ドメイン コントローラーでは、RID の残数が 20% 以下になると、追加で RID プールを要求します。

ドメイン コントローラーは割り当てられた RID プールの中から、未使用の RID を利用して、作成したオブジェクトの SID を決めます。そのため、各ドメイン コントローラーが独自に SID を設定しても、ドメイン内でオブジェクトの SID が重複しない仕組みとなっています。RID マスターは、ドメインに 1 台のみとなります。

 

インフラストラクチャ マスター

インフラストラクチャ マスターは、フォレスト内に複数のドメインが存在する環境にて動作します。インフラストラクチャー マスターは、ファントム オブジェクトを更新し、別のドメイン コントローラーに対して複製を行う役割を行います。インフラストラクチャー マスターは、ドメインに 1 台のみとなります。

インフラストラクチャ マスターが行う処理の具体的な流れは以下の通りです。

  1. 他のドメインのアカウントを、自ドメインのグループのメンバーに追加した場合、ファントム オブジェクトと呼ばれるオブジェクトが作成されます。このファントム オブジェクトでは、追加した他ドメインのアカウントに関する情報が保持されており、グローバル カタログの役割を持たないドメイン コントローラーは、ファントム オブジェクトを参照して、他ドメインのアカウントに関する情報を取得します。

    一方、グローバル カタログの役割をもつドメイン コントローラーでは、同一フォレスト内の他ドメインの情報も管理してるため、ファントム オブジェクトは参照せず、グローバル カタログとして管理する AD データベース内の情報を参照します。

  2. ファントム オブジェクトの元の情報となる他のドメインのアカウントが、名前の変更や削除された等の更新があった場合、ファントム オブジェクトについても更新が必要となります。
  3. ファントム オブジェクトを更新するために、インフラストラクチャ マスターは以下の処理を行います。
    1. グローバル カタログの情報と、自身が保持するファントム オブジェクトのデータを比較します
    2. 比較の結果、更新があることを検知すると、グローバル カタログから最新の情報を取得して、ファントム オブジェクトを更新します
    3. 最新のファントム オブジェクトの情報を、自ドメインの他のドメイン コントローラーへ複製します

 

補足:インフラストラクチャ マスターとグローバル カタログの同居について

グローバル カタログの役割をもつドメイン コントローラーはファントム オブジェクトを参照しません。もし、グローバル カタログの役割をもつドメイン コントローラーにインフラストラクチャ マスターの役割を割り当てると、ファントム オブジェクトの更新に必要な ① の”グローバル カタログの情報と、自身が保持するファントム オブジェクトのデータを比較” する処理が行われなくなります。比較の処理が行われないと、それ以降の更新や複製の処理も行われません。そのため、グローバル カタログの役割をもつドメイン コントローラー上では、インフラストラクチャ マスターの役割は果たせなくなります。

そのため、基本的には、グローバル カタログの役割をもつドメイン コントローラーに、インフラストラクチャ マスターの役割は割り当てないように配置することをおすすめします。次の条件を全て満たす場合は、グローバル カタログとインフラストラクチャ マスターが同居した場合、インフラストラクチャー マスターが機能せずに問題が発生する可能性があります。

 

  • フォレスト内に複数のドメインが存在する
  • ドメイン内に複数のドメイン コントローラーが存在する
  • ドメイン内にグローバル カタログではないドメイン コントローラーが存在する

 

上記の条件を満たさない、以下のようなドメイン環境であれば、グローバル カタログとインフラストラクチャ マスターが同居していても、特に問題はありません。

 

  • 単一ドメインのフォレスト (ファントム オブジェクトは作成されないため)
  • ドメイン内のドメイン コントローラーが全てグローバル カタログ (ファントム オブジェクトは参照されないため)

 

 

FSMO の役割をもつDCの確認手順

FSMO の各役割をどのドメイン コントローラーが保持しているかは、netdom コマンドで確認することができます。任意のドメイン コントローラーへログオンして、コマンド プロンプト上で以下のコマンドを実行すると、各役割を保持するドメイン コントローラーを確認することができます。

C:\>netdom query fsmo
スキーマ マスター   TEST01DC01.test01.local
ドメイン名前付けマスター   TEST01DC01.test01.local
PDC   TEST01DC01.test01.local
RID プール マネージャー   TEST01DC01.test01.local
インフラストラクチャ マスター   TEST01DC01.test01.local
コマンドは正しく完了しました。
 
 

FSMO通常転送

FSMO の各役割を別のドメイン コントローラーへ移動することもできます。ドメイン コントローラーの端末のメンテナンスにおいて、一時的に利用不可になる状況の場合に、別のドメイン コントローラーへ役割を移動して、ドメインの運用に影響がでないように構成することができます。

各役割を通常転送する手順は以下の通りです。

1) FSMO の役割を転送する先のドメイン コントローラーに管理者権限をもつユーザーでログオンします。

2) 管理者権限でコマンド プロンプトを開きます。

3) 以下の通りにコマンドを実行します。

C:\>ntdsutil
ntdsutil: roles
fsmo maintenance: connections
server connections: connect to server localhost
localhost に結合しています…
ローカルでログオンしているユーザーの資格情報を使って localhost に接続しました。
server connections: q
fsmo maintenance: transfer pdc
fsmo maintenance: transfer rid master
fsmo maintenance: transfer infrastructure master
fsmo maintenance: transfer naming master
fsmo maintenance: transfer schema master
fsmo maintenance: q
ntdsutil: q

C:\>

※太文字の部分を入力してください。transfer コマンドを実行すると、役割を転送しても問題ないか確認するポップアップ メッセージが表示されますので、[はい] をクリックしてください。

 

また、上記の FSMO の通常転送の手順は、5 つの全ての役割を転送しています。特定の役割のみを転送する場合は、対象の役割のみを transfer コマンドで転送してください。

 

FSMO強制転送

FSMO の役割をもつドメイン コントローラーが利用不可の状態となっている場合、ドメインに影響がでないように FSMO の役割を転送することをおすすめいたします。ただし、FSMO が利用不可の場合、FSMO の役割を通常転送しようとしても、転送元のドメイン コントローラーへアクセスできないために、転送に失敗します。そのような場合は、FSMO の役割を強制的に転送することができます。

FSMO の役割の強制転送の手順は以下の通りです。

1) FSMO の役割を転送する先のドメイン コントローラーに管理者権限をもつユーザーでログオンします。

2) 管理者権限でコマンド プロンプトを開きます。

3) 以下の通りにコマンドを実行します。

C:\>ntdsutil
ntdsutil: roles
fsmo maintenance: connections
server connections: connect to server localhost
localhost に結合しています…
ローカルでログオンしているユーザーの資格情報を使って localhost に接続しました。
server connections: q
fsmo maintenance: seize pdc
fsmo maintenance: seize rid master
fsmo maintenance: seize infrastructure master 
fsmo maintenance: seize naming master
fsmo maintenance: seize schema master
fsmo maintenance: q
ntdsutil: q

C:\>

 

 

楽天ブックス
¥3,630 (2023/06/08 11:21時点 | 楽天市場調べ)
楽天ブックス
¥4,400 (2023/06/08 11:24時点 | 楽天市場調べ)