DACL 中的 ACE 顺序
当 进程 尝试访问安全对象时,系统会在对象的 自由访问控制列表(DACL)中逐步执行 访问控制项(ACE),直到找到允许或拒绝所请求的访问的 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 按正确的顺序添加。