認可(Authorization) とは、認証済みの利用者に対して、与えられた権限の範囲内の操作だけを許可することを指します。
すべてのユーザーに参照・変更・実行の権限を与えるのではなく、許可されたユーザーだけが対象リソースを操作できるようにします。例えば、人事部のユーザーには各社員の履歴書や年収情報への参照権限を与える一方で、営業部のユーザーには参照権限を付与しないといった形です(最小権限の原則)。
Windows では、この「認可」は ACL(Access Control List:アクセス制御リスト)によって実現されます。Active Directory ドメインを管理する Domain Admins や Enterprise Admins などの重要グループには、管理に必要な高い権限が割り当てられています。一方で、これら重要グループの ACL が誤設定や悪意によって変更されると、ドメイン全体の管理に重大な影響を及ぼしかねません。そこで Active Directory ドメイン サービスは、重要グループの ACL を保護する仕組み(例:AdminSDHolder/SDProp による保護や継承の抑止)を備えています。
本記事では、重要なグループ アカウントの ACL の保護機能について紹介します。
AdminSDHolder とは?
Active Directory ドメイン サービスには、重要なグループやユーザーの ACL(Access Control List:アクセス制御リスト) が適切に維持されているかを監視・強制する保護機能があります。これは、ドメイン運用において重要アカウントへ過剰な権限が誤って(または悪意で)付与されることを防ぐために実装されています。
この保護は、ドメイン内の特殊なコンテナ AdminSDHolder と、定期的に ACL を反映する SDProp(Security Descriptor Propagator) によって実現されます。AdminSDHolder に設定された ACL が、保護対象のアカウントに定期的にコピーされ、継承設定の上書きや不要な権限付与を抑止します。
AdminSDHolder の既定の保護対象となっているグループ アカウントの一覧は以下の通りです。
- Administrators
- Account Operators
- Server Operators
- Print Operators
- Backup Operators
- Domain Admins
- Schema Admins
- Enterprise Admins
- Cert Publishers
- Domain Controllers / Read-only Domain Controllers
- Replicator
- 組み込みの Administrator ユーザーアカウント および KRBTGT アカウント
アクセス権の保護は、PDC エミュレーター保有 DC 上で動作する SDProp によって行われます。SDProp は、保護対象アカウントの セキュリティ記述子(特に DACL) を AdminSDHolder のものと照合し、不一致があれば AdminSDHolder の ACL をコピーして上書きします。その際、継承を無効化(保護ビットを設定) して、不要な継承による変更を防ぎます。
この処理は 既定で 60 分おき に実行され、保護対象は常に AdminSDHolder と同一のアクセス権に揃えられます。したがって、保護対象アカウント側の ACL を直接変更しても、それは一時的なもので、次回の保護サイクルで AdminSDHolder の設定に戻る点に注意が必要です。恒常的な変更が必要な場合は、AdminSDHolder 側の ACL を調整するか、対象を保護範囲から外してください。
保護対象のアカウント
Administrators や Domain Admins など、既定で複数のグループが ACL 設定の保護対象のアカウントとして設定されています。保護対象のアカウントは、adminCount 属性の値が 1 に設定されています。保護対象となっていないアカウントは既定では未設定と設定されています。

AdminSDHolderコンテナ
AdminSDHolder コンテナは、以下のパスに存在しています。
CN=AdminSDHolder,CN=System,DC=<ドメインの DN>
AdminSDHolder は ADSI エディターや Active Directory ユーザーとコンピューターなどの管理ツールより確認できます。AdminSDHolder コンテナの [セキュリティ] タブに設定されている ACL が保護対象のアカウントに設定されます。

AdminSDHolder のアクセス権を変更すれば、保護対象となるアカウントに設定される ACL も変更されます。
AdminSDHolder に所属したアカウントの動作
特定のアカウントにて ACL の保護をしたい場合、AdminSDHolder の既定の保護対象となっているグループ アカウントのメンバーに追加します。
AdminSDHolder の保護対象のグループに所属したユーザーは、1時間ごとに定期的に実行される保護の処理により、adminCount 属性値が1に設定され、親からはアクセス権を引き継がず、アクセス権は AdminSDHolder の ACL に変更されます。

対象のユーザー アカウントの adminCount 属性値や ACL を変更したとしても、定期的に実行される保護の処理により、adminCount 属性値と ACL の設定値は元の設定に戻ります。
また、対象のユーザーを AdminSDHolder のグループから保護対象のグループからメンバーを除外した場合においても、自動で
adminCount 属性および、アクセス権については元には戻らず、引き続き ACL の保護が継続されます。そのため、ユーザーを ACL の保護対象から外す場合には、①保護対象のグループからメンバーを除外し、② adminCount 属性を未構成に設定、③ ACL を任意の設定に変更という作業が必要となります。
dSHeuristics 属性
dSHeuristics 属性はフォレスト全体のグローバル設定を保持する属性です。
dSHeuristics 属性では AdminSDHolder の保護機能の除外設定が定義されています。dSHeuristics 属性の既定値は、
0000000001000000 となり 16 番目の文字が保護機能の除外の設定箇所となります。1~15番目までの文字のうち、10番目の文字の値以外のデフォルト値は 0 となり、10番目の文字は必ず 1 とし、16 番目に保護機能の除外設定の文字を入れます。
保護機能の除外対象とできるグループ アカウントは「Account Operators」「Server Operators」「Print Operators」「Backup Operators」の4つとなります。dSHeuristics 属性の設定用に、各アカウントに対して以下の値が割り当てられています。
| 除外対象とするグループ | 2進数 | 10進数 |
| Account Operators | 0001 | 1 |
| Server Operators | 0010 | 2 |
| Print Operators | 0100 | 4 |
| Backup Operators | 1000 | 8 |
dSHeuristics 属性の既定値の16番目の文字は0となっており、全てのアカウントは保護対象となっています。保護対象から特定のグループを除外したい場合は、除外対象のグループ アカウントの値の合計値(16進数)を16番目の文字に設定します。
AdminSDHolder の保護機能の除外設定
既定で AdminSDHolder となっているグループである「Account Operators」「Server Operators」「Print Operators」「Backup Operators」は、AdminSDHolder の保護から除外することができます。
dSHeuristics 属性値の16番目の文字にて、保護対象の除外の設定を行います。具体的な手順は以下の通りです。
1) 任意のドメイン コントローラーに管理者権限をもつユーザーでログオンします。
2) [ファイル名を実行して実行] を開き、adsiedit.msc を起動します。
3) 画面の左ペインより [ADSI エディター] を選択した状態で、メニューより [操作] – [接続] をクリックします。
4) [接続ポイント] の項目にて、[既定の名前つけコンテキストを選択する] を選択し、[構成] を選択して [OK] をクリックします。
5) 画面の左ペインより、[CN=Configuration,<ドメインDN>] – [CN=Services] – [CN=Windows NT] まで展開し、[CN=Directory Service] を右クリックし、プロパティを開きます。
6) [属性エディター] タブにて、[dSHeuristics] の属性をダブルクリックして属性エディターを開きます。
7) 対象のグループ アカウントを除外する値を設定して [OK] をクリックします。
例えば、Account Operators(0001) と Server Operators(0010) のグループの保護を除外したい場合は、0001 + 0010 = 0011 = 0x3 となり、16番目の数字は 3 となります。そのため、dSHeuristics 属性に設定する値は 0000000001000003 となります。

8) プロパティ画面にて、[適用]、[OK] をクリックして設定を反映させます。