PSO 为什么需要
AD 域默认只有一套密码策略,作用到所有用户。单域场景下,若按普通员工的可接受强度设定,特权账号就偏弱;若按特权账号设定,全员改密成本又太高。细粒度密码策略(PSO)解决的正是这个矛盾:给指定用户或组单独下发更严的强度、期限与锁定策略。
基本信息
| 适用平台 | Active Directory,域功能级别 2008 及以上 |
|---|---|
| 创建命令 | New-ADFineGrainedPasswordPolicy |
| 应用对象 | 用户对象或全局/通用安全组(用 Add-ADFineGrainedPasswordPolicySubject) |
| 优先级 | Precedence 数字越小越优先 |
典型使用场景
- 特权账号加严:给 Domain Admins 单独下发更长的口令与更短的期限
- 服务账号治理:给不便使用 gMSA 的服务账号设定更长的口令与更严的历史要求
- 应急账号保护:对少数高价值账号设置独立策略,避免与全员策略互相牵制
- 整改汇报:用 resultant policy 查询结果,证明特权账号策略确实生效
创建与应用 PSO
创建与应用 PSO
# 创建 PSO:口令至少 20 位,历史 24 次,60 天更换,5 次失败锁定 30 分钟
New-ADFineGrainedPasswordPolicy -Name 'Privileged-Accounts' -Precedence 10 -MinPasswordLength 20 -PasswordHistoryCount 24 -MaxPasswordAge '60.00:00:00' -LockoutThreshold 5 -LockoutDuration '00:30:00' -ComplexityEnabled $true
# 应用到特权组
Add-ADFineGrainedPasswordPolicySubject -Identity 'Privileged-Accounts' -Subjects 'Domain Admins'
# 核查
Get-ADFineGrainedPasswordPolicy -Filter * | Select-Object Name, Precedence, MinPasswordLength确认实际生效的策略
确认实际生效的策略
# 对具体账号查询最终生效结果,不要靠推演
Get-ADUserResultantPasswordPolicy -Identity 'admin1' | Select-Object Name, MinPasswordLength, MaxPasswordAge
# 查看某用户被直接应用的 PSO
Get-ADUser -Identity 'admin1' -Properties msDS-ResultantPSO | Select-Object Name, msDS-ResultantPSO关键属性读法
| 属性 | 含义 | 注意点 |
|---|---|---|
| Precedence | 优先级 | 数值越小越优先,冲突时以此判定 |
| MinPasswordLength | 最短口令长度 | 特权账号建议明显高于域默认值 |
| PasswordHistoryCount | 口令历史次数 | 与 pam 侧的历史策略思路一致 |
| LockoutThreshold | 锁定阈值 | 设为 0 表示不锁定,通常不可接受 |
| msDS-ResultantPSO | 实际生效的 PSO | 最终判据,复测时以此为准 |
PSO 只作用于用户对象:gMSA 托管服务账号的密钥由系统自动轮换,不受 PSO 约束,涉及服务账号时要分别说明。
给组下发 PSO 前先确认组内包含应急账号:把仅有的备用管理员锁死,恢复流程会非常被动。锁定阈值与期限要留出可恢复余地。
PSO 的变更要像 GPO 一样纳入版本管理:记录每次调整的优先级与参数,多人协作时才能解释为什么某账号的口令要求突然变了。