Active Directory 权限模型
域的搭建要点、OU 的划分逻辑、三层账户模型、组的分层与委派,以及把「权限跟岗位走」落实到目录结构上的方法。
域控本身
两台域控做多主复制,不要做主从。主从方案恢复主域控的时间是以小时计的,多主的代价只是需要偶尔用 FSMO 转移。
# 提升为域控(第一台)
Install-ADDSForest `
-DomainName "corp.example.internal" `
-DomainNetbiosName "CORP" `
-SafeModeAdministratorPassword (Read-Host -AsSecureString) `
-InstallDns:$true
DNS 是域控的一部分,不是可选项。域里 DNS 坏了,登录会失败,组策略会失败,报错信息还完全不提 DNS——这是最耗时间的一类故障。
三层账户模型
搭域之前先把账户结构想清楚,这是后面所有权限的地基:
CORP\域用户 日常登录、办公
│ 管理:AD 正常管理
▼
DOMAIN\ITAdmin IT 运维(加入各电脑本地管理员组)
│ 管理:AD 组策略 Restricted Groups
▼
.\AdminLocal(本机) 紧急备用、离线修复
管理:LAPS 随机密码 + 定期轮换
三层的分工是刻意的:
- 日常办公永远用域账户,不碰本地账户,这样登录、注销、审计全部落在域日志里。
- ITAdmin 通过 Restricted Groups 进入各机本地管理员组,IT 人员不再共享一个「万能密码」,权限随组走。
.\AdminLocal交给 LAPS 托管,随机、轮换、只在 AD 里——它是域控故障时唯一还能进系统的门。
OU 的划分
OU 结构是这套模型的骨架,它要同时满足两个互相拉扯的要求:
- 组策略要能作用域到它(要跟部门/岗位对齐)。
- 委派管理要能作用域到它(要跟 IT 的管理边界对齐)。
大多数组织里这两个是一致的,所以按部门建 OU 就行。少数不一致的时候,以组策略的作用域为主,把委派拆到更细的子 OU。
corp.example.internal
├── Users
│ ├── Corp
│ │ ├── Finance
│ │ ├── Engineering
│ │ ├── HR
│ │ └── IT
│ └── Guests
├── Computers
│ ├── Servers
│ ├── Workstations
│ └── Managed
└── ServiceAccounts ← 服务账号单放,且必须设长随机密码
ServiceAccounts 单独一层不是洁癖:服务账号在 Users 里时,域用户「改密码」策略会作用于它,而服务账号的密码是不能随便改的。
组的设计
三层,不要更多:
角色组(Role) Finance.Reconciliation
↑ 直接成员是人
岗位组(Job) Finance.Accountant
↑ 直接成员是角色组
资源组(Resource) App.Finance.ERP ← 权限授给这里
权限只授到资源组。这样换人时只需要动人所在的角色组,任何针对资源的授权都不需要重新检查。
域内置组要锁死:Domain Admins 排除特定账号(尤其服务账号)、Domain Users 移出「登录到域控」的权限。默认状态下把域用户加进本地管理员是最常见的提权入口。
密码策略
Set-ADDefaultPasswordPolicy -Identity "corp.example.internal\Default Domain Policy" `
-MinPasswordLength 12 -ComplexityEnabled $true `
-MinPasswordAge 1 -MaxPasswordAge 365 -LockoutThreshold 5 -LockoutDuration 30
MaxPasswordAge 365 配合强制改密,比 90 造成的实际安全收益高得多,同时避免了用户为了应付频繁过期而把密码写在便利贴上。锁定阈值 5 次是合理的平衡点:既能挡住在线撞库,又不至于让一台域控重启就锁掉所有人。
审计
开了这个才有审计记录。没开的话,所有权限操作都是无痕的:
Set-ADObject -Identity "CN= corp.example.internal,CN=Directory Service,..." `
-@{auditPolicy = "SUCCESS FAIL"; '@msDS-ResultantSetPolicy@' = $null}
Set-ADAuditPolicy -PreAuditEvents -Category "Authentication","Directory Access" -Success Enabled
配合 Sysmon 的 4662 事件(见 Sysmon),能看到「谁在什么时候改了哪条 ACL」。
坑
- DNS 转发器配了外网 DNS。域内机器会把内网域名解析到公网,拿到的是运营商的拦截页。域控的转发器里只放内部 DNS。
- 时间不同步。Kerberos 依赖时钟同步,偏差超过 5 分钟会直接登录失败,而报错是「密码错误」。域控本身必须先指向可靠的时间源。
- 删除 OU 用工具批量做。ADSI Edit 或者第三方工具删 OU 时会留下孤儿对象,事后极难排查。优先用图形界面,或者写脚本显式设置
ProtectedFromAccidentalDeletion。