细粒度密码策略(FGPP)通过密码设置对象(PSO)为特定用户或组配置独立密码与账户锁定规则,要求域功能级别≥Windows Server 2008、使用Domain Admins权限创建PSO,并通过msDS-PSOAppliesTo属性绑定目标对象,一个用户仅匹配一个PSO(按msDS-PasswordSettingsPrecedence优先级生效)。

在 Active Directory 中配置细粒度密码策略(Fine-Grained Password Policies,FGPP),是为了给特定用户或安全组设置独立于默认域策略的密码与账户锁定规则。它不依赖传统 GPO,而是通过密码设置对象(PSO)实现,适用于 Windows Server 2008 及更高版本,且域功能级别必须至少为 Windows Server 2008。
确认前提条件
- 域控制器运行 Windows Server 2008 或更新版本
- 域功能级别已提升至 Windows Server 2008 或更高(不能是 Windows 2000/2003 模式)
- 你拥有 Domain Admins 或 Password Policy Administrator 权限
- 默认域策略已备份(建议操作,避免误配影响全局)
创建密码设置对象(PSO)
PSO 是细粒度策略的载体,每个 PSO 可绑定到一个或多个用户/组:
- 打开 Active Directory Administrative Center(ADAC)或使用 PowerShell
- 在左侧导航树中,展开域 → 右键点击 System 容器 → 选择 New → Password Settings
- 或使用 PowerShell(以管理员身份运行):
New-ADPasswordSettings -Name "AdminPSO" ` -MinPasswordLength 12 ` -ComplexityEnabled $true ` -LockoutDuration "00:30:00" ` -LockoutObservationWindow "00:30:00" ` -LockoutThreshold 5 ` -MaxPasswordAge "90.00:00:00" ` -MinPasswordAge "1.00:00:00" ` -PasswordHistoryCount 24
⚠️ 注意:
-LockoutDuration和-LockoutObservationWindow单位为hh:mm:ss;-MaxPasswordAge单位为dd.hh:mm:ss
将 PSO 应用到目标用户或组
PSO 不自动生效,需显式指定适用对象:
- 在 ADAC 中,双击刚创建的 PSO → 点击 Attribute Editor → 找到
msDS-PSOAppliesTo属性 → 点击编辑 → 添加目标用户的 Distinguished Name(DN) - 更推荐方式:将目标用户加入一个安全组,再把该组 DN 添加到
msDS-PSOAppliesTo - 或用 PowerShell 绑定(示例绑定到组):
$pso = Get-ADPasswordSettings -Identity "AdminPSO" $group = Get-ADGroup "Domain Admins" Set-ADObject -Identity $pso.DistinguishedName ` -Add @{"msDS-PSOAppliesTo"=$group.DistinguishedName}
✅ 规则:一个用户最多只能被一个 PSO 匹配(优先级由 PSO 的
msDS-PasswordSettingsPrecedence属性决定,数值越小优先级越高)
验证与排查要点
- 使用
Get-ADUserResultantPasswordPolicy -Identity "username"查看某用户实际生效的 PSO - PSO 不适用于计算机账户,仅作用于用户对象
- 密码重置(管理员执行)和密码更改(用户自助)受不同规则约束:
- 密码历史、最短使用期限仅在用户主动改密时强制
- 最长使用期限、最小长度、复杂性要求在重置和改密时均生效
- 修改 PSO 后无需手动刷新策略,变更立即对新密码操作生效(旧密码仍可继续使用至过期)
细粒度密码策略不是 GPO 的延伸,而是一套独立的对象机制,适合保护高权限账户(如域管理员、服务账户)或合规敏感岗位。合理设计 PSO 数量与优先级,能兼顾安全性与运维可控性。

















