DACL 中 ACE 的顺序
当进程尝试访问安全对象时,系统会在对象的任意访问控制列表中 (ACE) (DACL) 逐步执行访问控制项,直到找到允许或拒绝所请求访问的 ACE。 DACL 允许用户的访问权限可能因 DACL 中 ACE 的顺序而异。 因此,Windows XP 操作系统在安全对象的 DACL 中定义了 ACE 的首选顺序。 首选顺序提供了一个简单的框架,可确保拒绝访问的 ACE 实际上拒绝访问。 有关系统用于检查访问的算法的详细信息,请参阅 DACL 如何控制对对象的访问。
对于 Windows Server 2003 和 Windows XP,ACE 的正确顺序因引入特定于对象的 ACE 和自动继承而变得复杂。
以下步骤描述了首选顺序:
- 所有显式 ACE 都放在任何继承的 ACE 之前的组中。
- 在显式 ACE 组中,拒绝访问的 ACE 放置在允许访问的 ACE 之前。
- 继承的 ACE 按继承顺序放置。 首先从子对象的父级继承 ACE,然后从祖父级继承 ACE,依此类而论。
- 对于每个继承的 ACE 级别,拒绝访问的 ACE 放置在允许访问的 ACE 之前。
当然,并非 ACL 中需要所有 ACE 类型。
AddAccessAllowedAceEx 和 AddAccessAllowedObjectAce 等函数将 ACE 添加到 ACL 的末尾。 调用方负责确保按正确的顺序添加 ACE。