【AD基礎】グループ ポリシーのデータ構成と適用処理

  • 2022年12月25日
  • AD DS

Active Directory ドメイン サービスでは、管理機能の一つとして、ユーザーやコンピューター、アプリケーションにおけるシステム設定を一元的に管理・配布する仕組みが用意されています。これは「グループ ポリシー」と呼ばれる機能で実現しています。グループ  ポリシーの概要については、以下の記事で紹介しております。

関連記事

Active Directory ドメイン サービスとは、システム管理者が組織内のユーザーやリソースを管理するためのサービスです。 Active Directory の管理機能の一つとして、ユーザーやコンピューター、アプリケーションにおける[…]

ドメインで管理しているユーザーやコンピューターに設定を配布・適用する仕組みとして、ドメイン コントローラーで設定を公開し、各ドメイン参加端末は公開されている設定情報を取得して自身に適用するという動作をしております。

今回は、ドメイン コントローラーで公開しているグループ ポリシーのデータ構成や、クライアント端末側でのポリシーの適用処理の仕組みについて紹介します。

 

グループ ポリシーのデータ構成

ユーザーやパスワードの最小値の文字を指定したり、USB デバイスの使用を制限する等、1つ1つのルールや制限のことを「ポリシー」と呼びます。グループ ポリシーは、各ポリシーを全てまとめた集合体のことであり、AD では「GPO(グループ ポリシー オブジェクト)」といううデータ単位で管理されています。

グループ ポリシーの設定項目には、大きく分けて「コンピューターの構成」と「ユーザーの構成」の2種類があります。「コンピューターの構成」の階層にある設定はコンピューターに適用され、「ユーザーの構成」の階層にある設定はユーザーに適用されるポリシーの一覧となります。

Active Directory では、GPO を複数作成することができ、用途や目的に応じた GPO を作成して、アカウントごとに柔軟に必要なポリシーが適用されるように構成することができます。

GPO は “グループ ポリシー” の設定内容が格納されているオブジェクトとなり、GPO のデータは AD データベースと SYSVOL の2か所で管理されています。AD データベースで管理されているデータを「GPC(Group Policy Container)」、SYSVOL で管理されているデータを「GPT(Group Policy Template)」と呼びます。

  • GPC(Group Policy Container)
    AD データベースで管理されているデータで、GPO の構成情報を管理

  • GPT(Group Policy Template)
    ファイル システム(ファイル共有)で管理されているデータで、GPO のポリシー設定を管理

 

GPO に関する各データ(GPC、GPT) の詳細を見ていきましょう。

 

GPC

GPC(Group Policy Container) とは、AD データベースで管理されている GPO のデータで、GPO の構成情報を管理しています。GPO の構成情報とは、例えば、GPT のバージョンや GPT の配置場所のファイル共有パスなどの情報を格納しています。

GPC は以下のパスにある AD オブジェクトです。

CN={GPO の GUID},CN=Policies,CN=System,DC=<ドメインのDN>

GPC オブジェクトに、ポリシー設定の情報を管理している GPT のファイル共有のパス(gPCFileSysPath 属性)や、GPT のバージョン番号(versionNumber)などの GPO に関する構成情報があります。

基本的にはポリシーの設定に関する情報は、GPT で管理されていますが、一部のポリシーについてはポリシーの設定情報は GPC で管理されています。例えば、ソフトウェア インストールのポリシー、802.1x 認証関連のポリシーなどの設定情報は GPC で管理されています。

ドメインに参加している端末は、ドメイン コントローラーの GPC の情報を参照して、ポリシーの設定を反映させます。

 

GPT

GPT(Group Policy Template)とは、ファイル システムで管理されているデータで、GPO のポリシーの設定(実体)を管理しています。GPT はファイル共有となっており、そのファイル共有のフォルダ名は SYSVOL という名前です。

SYSVOL とは?

SYSVOL フォルダは GPO の各ポリシーの設定内容を管理している場所のことで、ファイル システムで管理されています。SYSVOL のフォルダはファイル共有で公開されており、パスは DFS 名前空間を利用して共有されています。

SYSVOL の既定のローカルの保存場所と、ファイル共有の DFS 名前空間のパスは以下の通りです。

■ SYSVOL のローカルの保存場所
C:\Windows\SYSVOL\domain\Policies

■ SYSVOL のファイル共有のパス
\\<ドメイン名>\SYSVOL

各ドメイン コントローラーのローカルにて、”C:\Windows\SYSVOL\domain\Policies” のフォルダにグループポリシーの各ポリシーの設定内容を管理しています。各ドメイン コントローラーが同じ SYSVOL のデータを管理できるように、DFSR もしくは FRS の仕組みで SYSVOL のデータを複製しています。SYSVOL の複製は、AD データベースの複製の仕組みとは別ですが、複製トポロジーは AD と同じものが利用されます。また、SYSVOL の複製の範囲は、ドメイン単位です。SYSVOL の複製の仕組みとして、どちらが利用されるかは、ドメイン構築時のドメインの機能レベルに依存します。

ドメインの機能レベルが Windows Server 2003 以前:FRS
ドメインの機能レベルが Windows Server 2008 以降:DFSR

また、”C:\Windows\SYSVOL\domain\Policies” のデータは、ファイル共有でドメイン内に公開されています。SYSVOL のパスは、DFS 名前空間を利用したパスとなっており、”\\<ドメイン名>\SYSVOL” のパスでアクセスできます。例えば、nekomaru.com のドメインであれば、SYSVOL のパスは \\nekomaru.com\SYSVOL となります。nekomaru.com に所属している端末は、\\nekomaru.com\SYSVOL からポリシーの設定をダウンロードして、その設定を端末に反映させます。

 

ドメイン コントローラーに SYSVOL 共有と NETLOGON 共有が存在しない場合、そのドメイン コントローラーで Active Directory の機能は利用できません

 

SYSVOL のデータ構成

SYSVOL にはグループポリシーにて定義されているポリシーの設定が保存されていますが、フォルダの構造は以下の通りとなっています。

SYSVOL フォルダの配下のフォルダ/ファイルの構成は、上図の通りです。文字列の先頭が色付きの■から始まっている文字列はフォルダ、何もついていない文字列はファイルです。

SYSVOL 配下にある各フォルダで格納されているデータの種類について紹介します。

domain

domain フォルダには、ドメインで定義されているグループ ポリシーや、スクリプトが格納されたフォルダが格納されています。

Policies

Policies フォルダには、ドメインで定義されているグループ ポリシーの情報が格納されています。GPO ごとにフォルダ分けされています。フォルダの名前は、GPO の GUID と一致します。

各GPO のフォルダには、それぞれ MACHINE、USERS のフォルダと、gpt.ini のファイルが展開されます。

{6AC1786C-016F-11D2-945F-00C04fB984F9}

{6AC1786C-016F-11D2-945F-00C04fB984F9} フォルダは、Default Domain Controllers Policy で定義されているポリシーの設定が格納されているフォルダです。6AC1786C-016F-11D2-945F-00C04fB984F9 という GUID は、Default Domain Controllers Policy に割り当てられる固有の GUID で、どのドメイン環境でも共通です。

{31B2F340-016D-11D2-945F-00C04FB984F9}

{31B2F340-016D-11D2-945F-00C04FB984F9} フォルダは、Default Domain Policy で定義されているポリシーの設定が格納されているフォルダです。31B2F340-016D-11D2-945F-00C04FB984F9 という GUID は、Default Domain Policy に割り当てられている固有の GUID で、どのドメイン環境でも共通です。

MACHINE

MACHINE フォルダは、該当の GPO のコンピューター ポリシーのポリシーの設定が格納されているフォルダです。グループ ポリシーの管理エディターにおける [コンピューターの構成] の配下で設定されているポリシーです。

USER

USER フォルダは、該当の GPO のユーザー ポリシーのポリシーの設定が格納されているフォルダです。グループ ポリシーの管理エディターにおける [ユーザーの構成] の配下に設定されているポリシーです。

gpt.ini

GPT のバージョン番号や、グループ ポリシーの適用する CSE(Client Side Extension) の ID などの情報が記載されているファイルです。ドメインに参加している端末は、グループ ポリシーの適用時には gpt.ini のファイルを参照し、各ポリシーごとにそれぞれ CSE にて適用処理を行います。

Scripts

Scripts フォルダは、NETLOGON 共有と呼ばれるフォルダです。

Windows NT ドメインの頃にログオン スクリプトを保存する目的で使用されていたフォルダです。Active Directory ドメインでは使用されませんが、互換性のために残っています。Active Directory ドメインでは、各 GPO のフォルダの配下に、スタートアップ/シャットダウン スクリプト、ログオン/ログオフ スクリプトは保存されます。

staging/staging areas

staging や staging area のフォルダは “ステージング領域” と呼ばれるデータの管理場所で、SYSVOL の複製処理に使用されるフォルダーです。SYSVOL 配下の GPO のファイルやフォルダが作成・編集されると、その内容をまずはステージング領域にコピーし、複製対象のサーバーと通信して競合がないことを確認してから、変更箇所を複製します。

sysvol

sysvol フォルダは、SYSVOL 共有となります。ファイル共有となっており、ドメイン全体に公開されているフォルダです。

ドメイン名のフォルダ(nekomaru.com)

sysvol 共有の配下には、ドメイン名と同じ名前のフォルダがあります。ファイル共有の配下にあるため、このフォルダも公開されています。このフォルダは、domain フォルダへのジャンクションとなっています。そのため、ドメインに参加している各端末は、domain 配下に存在するグループポリシーの設定の情報を参照することができます。

 

セキュリティ ポリシー

各ポリシーの設定は GPT である SYSVOL フォルダにて管理されています。ポリシー設定の定義の例として、セキュリティ ポリシーの定義の構成について紹介します。

セキュリティ ポリシーとは、[コンピューターの構成] にある以下のポリシーの総称です。

  • アカウント ポリシー
    • パスワードのポリシー
    • アカウント ロックアウトのポリシー
    • Kerberos ポリシー
  • ローカル ポリシー
    • 監査ポリシー
    • ユーザー権利の割り当て
    • セキュリティ オプション

セキュリティ ポリシーの設定内容は、以下のファイルで管理されています。

C:\Windows\SYSVOL¥domain¥Policies¥Machine¥Microsoft¥Windows NT¥SecEdit¥GptTmpl.inf

上図のように、GptTmpl.inf ファイルに GPO のセキュリティ ポリシーで設定されている各ポリシーの設定値が記載されています。

 

グループ ポリシーの適用処理

ドメイン コントローラーで公開されている GPO の情報(GPC、GPT)から、クライアントはポリシーの情報を取得して適用します。ドメインに参加している端末に、グループポリシーの設定が適用における仕組みについて紹介します。

グループ ポリシーの適用タイミング

Windows OS が起動した後、コンピューター ポリシーとユーザー ポリシーは以下のタイミングで適用されます。

  • コンピューター ポリシー
    Windows OS の起動時
  • ユーザー ポリシー
    ユーザーがコンピューターにログオンした時

上記のタイミングにて、OS 起動後に最初のポリシー適用が行われた後も、定期的にポリシーの適用処理が行われます。その際は、ドメイン コントローラー側でポリシーの変更を検知したら、ポリシー情報を取得して適用するという動作になります。グループ ポリシーの更新間隔は以下の通りです。

  • ドメイン メンバー:90 ~ 120 分
  • ドメイン コントローラー:5分

既定の設定では、ドメイン メンバーの更新間隔は、90 分 に 0 ~ 30 分の間のランダムなオフセット間隔が追加されたタイミングとなります。また、ドメイン コントローラーの更新間隔には、ランダムなオフセット間隔は 0 です。

ドメイン メンバー、ドメイン コントローラーの更新間隔は、以下のポリシーにて設定することができます。

■ドメイン メンバーの更新間隔
パス:[コンピューターの構成] – [ポリシー] – [管理用テンプレート] – [システム] – [グループポリシー]
ポリシー:[コンピューターのグループポリシーの更新間隔を設定する]

■ドメイン コントローラーの更新間隔
パス:[コンピューターの構成] – [ポリシー] – [管理用テンプレート] – [システム] – [グループポリシー]
ポリシー:[ドメインコントローラーのグループポリシーの更新間隔を設定する]

 

適用するポリシーの取得の流れ

ドメインに参加している端末にて、グループ ポリシーの適用処理の流れは以下の通りです。

①ドメイン、OU、サイトの gplink 属性値を取得

ドメイン メンバーの端末はセキュアチャネルの接続先のドメイン コントローラーから、自身のアカウントの DN(distinguishedName)を取得します。コンピューター ポリシーの適用の場合は、端末のコンピューター アカウントの DN、ユーザー ポリシーの適用の場合は、ログオン ユーザーのユーザー アカウントの DN となります。

DN からアカウントがどの OU に所属しているか確認が取れるので、ドメインから所属する OU までの全ての階層(ドメイン、OU)の gplink 属性の値をLDAP Search で取得します。gplink 属性には、リンクされた GPO の LDAP パスが登録されています。

また、コンピューターか所属するサイトを gplink 属性の値も LDAP Search で取得します。

①にて、アカウントの適用対象である全ての GPO の LDAP パスの情報を得ることができました。

② GPC から各 GPO の gPCFileSysPath 属性値を取得

アカウントの適用対象となる各 GPO の LDAP パスにアクセスします。LDAP パスにアクセスすると、適用対象の GPO のオブジェクトにアクセスできます。GPO の gPCFileSysPath 属性の値を LDAP Search で取得します。gPCFileSysPath 属性には、各 GPO に紐づく GPT の共有パス(SYSVOL 共有のパス)が登録されています。

②にて、アカウントの適用対象である全ての GPO のポリシー設定の情報が管理されている、SYSVOL 共有の情報を得ることができました。

③ GPT から適用対象の GPO の実体を取得

アカウントの適用対象の GPO の SYSVOL 共有パスにアクセスします。

SYSVOL 共有はドメイン DFS 名前空間として展開されており、名前空間を提供しているサーバーは全てのドメイン コントローラーとなります。SYSVOL 共有にアクセスする時も、一般的な DFS パスへアクセスする動作となります。DFS から接続先サーバー(ドメイン コントローラー)を取得し、ポリシー設定(GPO の実体)を取得する動作の流れは以下の通りです。

  1. \\nekomaru.com\SYSVOL の名前空間をもつ DFS 名前空間サーバーのリストを取得します
  2. 取得したリストの中から最も優先順位の高いドメイン コントローラーに対してファイル共有へ SMB でアクセスします。
  3. gpt.ini ファイルを取得し、クライアントに適用済みのバージョンと比較します。
  4. バージョンが変更されている場合、GPO の実体をダウンロードします。

DFS 名前空間サーバーのリストは、Windows Server 2008 以降においては、ドメイン参加端末が所属しているサイトの情報をもとにリストの順番が決定されます。

また、gpt.ini ファイルを取得した後に、gpt.ini のバージョンとクライアントに適用済みのバージョンと比較した結果、差分がない場合は、SYSVOL で公開されている GPO は更新されていないとみなし、次に続く ④ の GPO を適用する処理は行われません。

④各CSE で GPO を適用

ポリシーの設定(GPO の実体)を取得したら、端末に設定を適用します。

gpt.ini に記載されている CSE を利用して、各 CSE はポリシーにある各設定を端末に適用処理します。

 

CSE(Client Side Extension)

CSE (Client Side Extension) とは、日本訳では「クライアント側拡張」と呼ばれます。

ドメイン コントローラーからグループ ポリシーの取得、適用の処理を担当するコンポーネントは Group Policy Client (gpsvc) と呼ばれるコンポーネントです。gpsvc はグループ ポリシーの適用を総括するコンポーネントであり、グループ ポリシーの実体を取得する部分までを担当するコンポーネントです。

gpsvc が取得したグループ ポリシーを、実際にクライアント上の各コンポーネントに適用する役割を担うのは CSE のコンポーネントとなります。ポリシーの設定項目により、適用処理を行う CSE は異なります。

例えば、以下のポリシーの適用処理を行う CSE は以下の通りです。

  • セキュリティの設定: scecli.dll
  • IE のメンテナンス: iedkcs32.dll
  • フォルダー リダイレクト: fdeploy.dll

ポリシーの適用処理をどの CSE が行うかという情報は、gpt.ini に記載されています。gpsvc は gpt.ini に記載されている CSE を確認して、対象のライブラリに対してポリシーの適用処理を指示します。

各 CSE のコンポーネントの詳細な定義は、以下のレジストリで設定されています。

HKLM¥SOFTWARE¥Microsoft¥Windows NT¥CurrentVersion¥Winlogon¥GPExtensions
 
管理用テンプレートで定義されているポリシー(registry.pol)の適用は、gpsvc が行っています。
 

gpupdate

グループ ポリシーは定期的に更新されますが、手動でポリシーを更新したい場合は gpupdate コマンドを実行します。

gpupdate コマンドは、グループ ポリシーの設定において変更があった箇所のポリシーのみを適用します。変更した箇所のみではなく、全てのグループ ポリシー設定を再適用したい場合は、gpupdate /force コマンドを実行してください。

gpupdate コマンドを実行して手動でポリシーの適用処理をトリガーさせた場合は、その時点で時間の自動更新の間隔は再計算されます。

ポリシーの設定の中には、OS の再起動を行わないと設定が反映されない設定もあります(フォルダーリダイレクトなど)。もし gpupdate コマンドを実行して手動でポリシーを適用しても、設定が反映されていないように見える場合は、一度 OS の再起動も試してみるとよいです。

 

グループ ポリシーの適用結果

グループ ポリシーの適用結果は、WMI レポジトリに格納されます。

ユーザー ポリシーの場合は ¥root¥rsop¥user、コンピューター ポリシーの場合は ¥root¥rsop¥computer の名前空間名に保存されています。WMI レポジトリに格納されているグループ ポリシーの適用結果は、gpresult コマンド、rsop.msc などを用いて確認することができます。

■コマンドの場合

gpresult /h  …  HTML 形式
gpresult /z   …  テキスト形式
 
■MMC スナップイン
1) [ファイル名を指定して実行] を開き、rsop.msc と入力して [OK] をクリックします。
2) [ポリシーの結果セット]より、コンピューター ポリシー、ユーザー ポリシーの適用状況が確認できます。