第 24 讲:AdminSDHolder 与保护组
第 24 讲:AdminSDHolder 与保护组
麻烦
小王刚接手域运维,遇到一件怪事:他给 Domain Admins 加了一条委托,让审计账号能读它的成员列表。改完用 dsacls 一看,权限在;过一小时喝杯茶回来,没了。再改,又没。他以为是 AD 复制冲突,折腾半天——其实是另一套机制在「修正」他。前几讲讲的是权利(user rights)和 GPO 分配,都属于「谁能做什么」;这一讲讲一个反过来的东西:有些对象的 ACL,你改了也不算数。
这一讲只发明:AdminSDHolder——特权组的「权限模板」
为什么要发明这个。在 AD 里,Domain Admins、Enterprise Admins 这些特权组是整个域的钥匙。要是它们上面的 ACL 能被随便改、能靠继承从上级 OU 流下来,那任何能动 OU 的人都能给特权组塞一条权限——这就是横向提权。
所以 AD 给这些组上了一把专门的锁,三个零件:
- 域里有一个固定对象,位置是
CN=AdminSDHolder,CN=System,DC=...,可以理解为一张特权组权限模板; - 有一个后台进程 SDProp(Security Descriptor Propagator),默认每 60 分钟在 PDC 模拟器(PDCE)上跑一次;
- 它把 AdminSDHolder 上的 ACL 抄写到一批被保护的组和账户上——覆盖你手动加的任何东西,同时把这些对象的继承关掉。
这就是小王碰到的怪事:他改的 Domain Admins 是受保护组,SDProp 一跑,就把他的改动「还原」成模板的样子。
来源:Appendix C - Protected Accounts and Groups in Active Directory
口诀:
AdminSDHolder 是模板,SDProp 每小时抄一遍。
受保护组的 ACL 不归你管,也不继承父 OU。
谁会被保护:保护组与 adminCount
哪些对象会进这张「保护名单」?是一份固定的内置名单,称为 protected accounts and groups,常见的有:
Domain Admins/Enterprise Admins/Schema AdminsAdministratorsAccount Operators/Server Operators/Print Operators/Backup OperatorsCert Publishers(在某些版本里)
注意两个连带效应:
- 名单是递归的:你只要是上面这些组的成员,你这个账户本身也会被保护——ACL 会被 SDProp 重写、继承也会被关掉。
- SDProp 把对象划进保护名单时,会顺手把它的
adminCount属性设为 1。所以反过来找受保护对象,就一条 LDAP 过滤:(admincount=1)——这正是下面「怎么看见」要用的招。
(曾经被保护、后来移出组的账户,adminCount 不会自动清零,会留个 1,是历史痕迹,排查时要留意。)
来源:同上附录 C。
和日常文件 ACL 的差别:该找谁、不该硬刚
读者前面在卷一/卷二学的 ACL 运维,多是文件、文件夹或普通 OU——那里你加权限、删权限,改了就生效。到 AdminSDHolder 这里,规矩变了:
| 普通对象(文件 / 普通 OU) | 受保护组(Domain Admins 等) | |
|---|---|---|
| 改的 ACL 会留吗 | 会 | 不会(60 分钟内被 SDProp 抄回模板) |
| 继承父级吗 | 看配置,通常继承 | 强制不继承 |
| 想加权限该改哪 | 改对象本身 | 改 AdminSDHolder 模板(所有受保护组一起改) |
所以正确姿势不是「我偏要给 Domain Admins 加这一条」,而是:
- 确实要让某个运维账号管理所有特权组——去改 AdminSDHolder 这个模板(
dsacls或 ADSI Edit),等下一轮 SDProp,所有受保护组就都带上了; - 只想动一个组、又怕被还原——这条路本身就被设计成走不通,这正是它的目的,别硬刚。
这一讲只建立「正确地图」:告诉你这块地方有一套自动还原机制、它叫什么、在哪。至于把它当后门(改模板塞权限)的做法属于攻击利用范畴,不在本书的运维视角里展开。
怎么看见
界面:ADSI Edit → 连到「默认命名上下文」→ 展开 CN=System → 右键 CN=AdminSDHolder → 属性 → 安全,能看到那张模板 ACL。
命令——找出所有被保护的对象(adminCount=1):
Import-Module ActiveDirectory
# 被保护的用户
Get-ADUser -LDAPFilter "(admincount=1)" |
Select-Object Name, SamAccountName, DistinguishedName
# 被保护的组
Get-ADGroup -LDAPFilter "(admincount=1)" |
Select-Object Name, GroupCategory典型输出(真实环境会列出 Domain Admins、Enterprise Admins 等及其成员):
Name SamAccountName
---- --------------
Administrator Administrator
张工(域管) zhangg
Backup backup-svc
...看模板本身——dsacls 直接打印 AdminSDHolder 的 ACL(把 DC=corp,DC=local 换成你自己的域名):
dsacls "CN=AdminSDHolder,CN=System,DC=corp,DC=local"改完模板想立刻验证:SDProp 默认 60 分钟才跑一次。想马上看效果,可临时调小 PDC 模拟器上的这个注册表值(单位秒,默认 3600),改完需重启 NTDS 服务才生效,验证完务必改回 3600:
HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\AdminSDProtectFrequency来源:Appendix C - Protected Accounts and Groups in Active Directory
收束
你现在会了: 域里有一张「特权组权限模板」叫 AdminSDHolder,有一个叫 SDProp 的后台进程每 60 分钟把它抄到一批受保护组和账户上,覆盖你的改动、关掉继承;被保护对象的标志是 adminCount=1,想统一加权限要改模板而不是改单个组。
下一讲才需要: 视线从 AD 回到本机——注册表里那些键,ACL 又是怎么记的、跟文件 ACL 有什么不同。
← 上一章:第 23 讲:GPO 权利分配
· 回书稿索引
→ 下一章:第 25 讲:注册表 ACL