Active Directory オブジェクトおける ACE の優先順位を決定するルールについて

Windows プラットフォーム サポート担当の秋山です。

今日は、Active Directory オブジェクトにおけるアクセス許可リスト (ACL) の NTFS のアクセス権の場合とは異なる意外な動作についてご紹介したいと思います。
OU のプロパティの [セキュリティ] タブで、"すべての子オブジェクトの削除 - 拒否" のアクセス許可エントリ (ACE) を Everyone に対して設定したはずなのに、 OU 配下のユーザー オブジェクトを削除できてしまうのはなぜ??という疑問をお持ちになったことのある方がいらっしゃいましたら、ご一読いただけますと幸いです。

1. 拒否よりも許可が優先される? Active Directory オブジェクトにおける ACL の意外な動作
----------------------------------
Active Directory オブジェクトにおける ACL の動作は、NTFS アクセス許可とは少し異なります。
具体的には、継承された "拒否" の ACE よりも、オブジェクト自身に対して明示的に設定されている "許可" の ACE の方が優先されます (継承された拒否の ACE の優先度が低い)。

例えば、 OU のセキュリティ設定で "Everyone" に対して、"すべての子オブジェクトの削除 - 拒否" を設定した場合、 OU 配下のユーザー オブジェクトについても上位の OU から継承される "すべての子オブジェクトの削除 - 拒否" の ACE が設定されます。
この状態であれば、OU 配下のユーザー オブジェクトは削除できないようになったと感じます。

しかしながら、OU 配下の各ユーザー オブジェクト自身には、"Account Operators" グループに対して既定で "フル コントロール" の ACE が明示的に設定されています。
そのため、 "Account Operators" グループに所属するユーザーでは明示的な許可の ACE が優先され、 OU 配下のユーザー オブジェクトを削除できます。

このように、NTFS アクセス許可のように継承されてきた ACE も含めて拒否の ACE が許可の ACE よりも優先されるわけではありませんので、ご注意下さい。

2. Active Directory オブジェクトおける ACE の優先順位を決定するルールについて
----------------------------------
Active Directory オブジェクトおける ACE の優先順位は、下記にようなルールに基づいて決定されます。
(ここでは、上位 OU の配下に下位 OU が存在し、下位 OU の配下に対象のオブジェクトが存在していることを想定します。)

ルール 1:
ACE が継承されてきている場合、対象のオブジェクトに最も近い階層の ACE が優先されます。
つまり、対象のオブジェクトに直接設定されている ACE の方が、下位 OU に設定されている ACE よりも優先され、下位 OU に設定されている ACE の方が、上位 OU に設定されている ACE よりも優先されます。

ルール 2:
同じ階層で設定されている ACE に関しては、"許可" よりも "拒否" の方が優先されます。
つまり、例えば下位 OU において Account Operators に対しては "拒否" が設定されており、Everyone に対しては "許可" が設定されていた場合には、Account Operators に所属するユーザーに関しては "拒否" の方が優先されます。

3. 具体例
----------------------------------
最後に具体例を以下にまとめてみました。
A_OU という OU の配下に user1 というユーザー オブジェクトがあります。

- 例 1
A_OU: Account Operators に対して "すべての子オブジェクトの作成/削除" の許可を設定します。
user1: Account Operators に対して "フル コントロール" の許可を設定します。

この例の場合、user1 に明示的な "許可" が設定されていることにより、Account Operators に所属するユーザーは user1 を削除することができます。

- 例 2
A_OU: Account Operators に対して "すべての子オブジェクトの作成/削除" の許可を設定します。また、 Everyone に対して "すべての子オブジェクトの作成/削除" の拒否を設定します。
user1: 明示的な ACE は何も設定されていません。

この例の場合、Account Operators に所属するユーザーに関しては、A_OU に設定されている許可よりも A_OU に設定されている拒否の方が優先されるため、user1 を削除することはできません。

- 例 3
A_OU: Account Operators に対して "すべての子オブジェクトの作成/削除" の許可が設定します。また、 Everyone に対して "すべての子オブジェクトの作成/削除" の拒否を設定します。
user1: Account Operators に対して "フル コントロール" の許可が設定します。

この例は前述のルール 1 とルール 2 が混ざったパターンです。
A_OU に着目すると、許可の ACE よりも拒否の ACE の方が優先されます。
しかし、A_OU から継承されてきた拒否の ACE よりも、user1 に明示的に設定されている許可の ACE の方が優先されるため、Account Operators に所属するユーザーは user1 を削除できます。

- 参考資料
Subordinate Explicit Grant Overrides Inherited Denial
URL: <https://support.microsoft.com/en-us/kb/233419>

Access Control Entry Inheritance for Active Directory Objects
URL: <https://support2.microsoft.com/kb/221241/en-us>

コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。