# Active Directory 中 ACL 深入解析:ACE 类型、ACCESS_MASK 和控制访问权限
Active Directory 使用 22 种 ACE 类型,分为 4 类用于访问管理。第一类包括 ACCESS_ALLOWED_ACE_TYPE、ACCESS_DENIED_ACE_TYPE、SYSTEM_AUDIT_ACE_TYPE、SYSTEM_MANDATORY_LABEL_ACE_TYPE 和 SYSTEM_SCOPED_POLICY_ID_ACE_TYPE。这些 ACE 针对 ACCESS_MASK 和主体的 SID 进行操作,实现基本的权限授予和拒绝。
第二类——ACCESS_ALLOWED_OBJECT_ACE_TYPE 和 ACCESS_DENIED_OBJECT_ACE_TYPE——扩展了功能。它支持 ACCESS_MASK、扩展权限的 GUID,以及向子对象的继承。这种类型在 AD 中占主导地位,因为其灵活性。
第三类(ACCESS_ALLOWED_CALLBACK_ACE_TYPE、ACCESS_DENIED_CALLBACK_ACE_TYPE、SYSTEM_AUDIT_CALLBACK_ACE_TYPE、SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE)在 ACCESS_MASK 和 SID 上添加条件表达式。逻辑规则会评估访问令牌——例如,根据设备声明限制访问。
第四类将对象 ACE 与条件表达式结合:ACCESS_ALLOWED_CALLBACK_OBJECT_ACE、ACCESS_DENIED_CALLBACK_OBJECT_ACE、SYSTEM_AUDIT_CALLBACK_OBJECT_ACE、SYSTEM_AUDIT_OBJECT_ACE_TYPE。不过,此处的验证机制会忽略条件表达式。
安全描述符中缺少 GENERIC 权限
ACCESS_MASK 是一个 32 位字段,其中各个位定义权限。标准映射包括 GENERIC_READ、GENERIC_WRITE 和 GENERIC_ALL,但这些位在安全描述符中被禁止。设置它们会导致不可预测的结果,并且授权算法会忽略它们。
在通过 AccessCheckByTypeResultListAndAuditAlarmByHandle 进行访问检查时,带有 GenericMapping 的 GENERIC 位很重要。此参数将 GENERIC 权限映射到对象特定权限。AD 单独定义了自己的映射,与文件系统或服务的映射不同。
创建 ACE 时,GENERIC 位会被阻止。在实践中,GENERIC_ALL 只是基于 AD 标准映射的对象特定位的组合。
ACCESS_MASK 标志和控制访问权限
关键标志:
- RIGHT_DS_CREATE_CHILD / RIGHT_DS_DELETE_CHILD:objectGUID 是子类型的 schemaID(例如 OU=Computers 中的 computer)。没有 GUID 时——适用于所有类型。
- RIGHT_DS_LIST_CONTENTS:读取子对象;忽略 objectGUID。
- RIGHT_DS_WRITE_PROPERTY_EXTENDED:objectGUID 用于验证写入,但通过属性名称检查。
- RIGHT_DS_READ_PROPERTY / RIGHT_DS_WRITE_PROPERTY:objectGUID 是属性集或 schemaID。没有 GUID 时——所有属性。
- RIGHT_DS_DELETE_TREE:删除对象树。
- RIGHT_DS_LIST_OBJECT:对象在 List Object 模式下的可见性(dSHeuristics)。
- RIGHT_DS_CONTROL_ACCESS:objectGUID 用于扩展权限。没有 GUID 时——所有。
控制访问权限:扩展权限、验证写入和属性集
控制访问权限分为三类:
- 扩展权限——执行操作的权限(例如,域同步)。
- 验证写入——带验证检查的特定属性修改。
- 属性集——访问属性组,以实现更紧凑的 ACL。
计算机对象上的 AllExtendedRights 不会授予对 msDS-AllowedToActOnBehalfOfOtherIdentity(RBCD)的写入访问权限。这是来自 User-Account-Restrictions 属性集(GUID=4c164200-20c0-11d0-a768-00aa006e0529)的验证写入。它需要单独的 WRITE_PROPERTY 或属性集权限。
AD 层次结构中的 ACE 继承
带有 OBJECT_INHERIT_ACE、CONTAINER_INHERIT_ACE、NO_PROPAGATE_INHERIT_ACE、INHERIT_ONLY_ACE 和 INHERITED_ACE 等标志的 ACE 会传播到子对象。简单类型会继承到任何容器。对象 ACE(带 GUID)受 InheritedObjectType 限制。
关键要点
- 22 种 ACE 类型分为 4 类:基本、对象、回调和对象回调。
- GENERIC-* 位不会存储在 SD 中;它们仅用于检查期间的映射。
- 控制访问权限包括扩展权限(操作)、验证写入(属性)和属性集(组)。
- RBCD 需要验证写入权限,不受 AllExtendedRights 覆盖。
- ACE 继承通过标志和 InheritedObjectType 进行精确控制。
— Editorial Team
暂无评论。