FGPP是AD中可为特定用户或安全组单独配置密码策略的机制,本质区别在于突破域级单策略限制、支持多策略优先级排序且不依赖GPMC管理。
FGPP 是什么,和普通密码策略有什么本质区别
细颗粒度密码策略(Fine-Grained Password Policy,FGPP)不是对整个域统一生效的设置,而是允许你为特定用户或组单独定义密码复杂度、过期时间、锁定阈值等——它绕过了域默认的 Default Domain Policy,在 Active Directory 中通过 msDS-PasswordSettings 对象实现。关键点在于:一个域只能有一个默认策略,但可以有多个 FGPP 策略对象,且它们之间支持优先级排序(msDS-PasswordSettingsPrecedence 值越小优先级越高)。
常见误操作是试图在 gpmc 里编辑 fgpp —— 它根本不出现在组策略管理控制台中。必须用 adsi edit、powershell 或 aduc 的“高级功能”视图才能创建和绑定。
用 PowerShell 创建并绑定 FGPP 到安全组
推荐使用 ActiveDirectory 模块,比手动编辑 ADSI 更可靠。注意:执行账户需有 Schema Admins 或 Enterprise Admins 权限(至少是 Domain Admins + 对 System\Password Settings Container 的写权限)。
步骤如下:
- 确保目标 OU 下已存在用于承载策略的安全组(如
SG-Privileged-Users),不能是通讯组或 DL - 运行
New-ADFineGrainedPasswordPolicy,指定-Precedence(例如10),避免与已有策略冲突 - 用
Add-ADFineGrainedPasswordPolicySubject将组加入策略主体,不是用“安全标识符”而是直接传入DistinguishedName或SamAccountName - 策略生效不依赖组策略刷新,但用户下次登录时才会加载新策略;若用户已登录,需注销重进或等待 Kerberos TGT 刷新(通常 10 小时)
示例命令:
New-ADFineGrainedPasswordPolicy -Name "PSO-Admins" -Precedence 10 -MinPasswordLength 14 -ComplexityEnabled $true -LockoutDuration "00:30:00" -LockoutObservationWindow "00:30:00" -LockoutThreshold 5 -MaxPasswordAge "90.00:00:00" -MinPasswordAge "1.00:00:00"
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Admins" -Subjects "CN=SG-Privileged-Users,CN=Users,DC=contoso,DC=com"
为什么设置了 FGPP 却没生效?排查这几点
最常被忽略的是优先级覆盖和主体类型限制:
-
msDS-PasswordSettingsPrecedence值必须唯一,且低于其他冲突策略;如果两个 PSO 同时匹配同一用户,只生效 precedence 最小的那个 - FGPP 只能绑定到用户对象或全局/通用安全组(
groupType & 0x80000000),不能绑到嵌套组里的嵌套成员——AD 不递归解析嵌套组来判断策略归属 - 用户对象上会生成
msDS-ResultantPSO属性,用Get-ADUser -Properties msDS-ResultantPSO可验证当前实际生效的 PSO 名称;为空说明没匹配到任何 FGPP - 如果用户同时属于多个受策略保护的组,AD 只取 precedence 最高的那个策略,不会合并规则
FGPP 和 Kerberos 策略混用时的隐性冲突
FGPP 控制密码生命周期,但 Kerberos 票据有效期由域控制器上的 Kerberos Policy(即 Default Domain Controllers Policy)决定。两者独立,但容易造成体验割裂:
- 比如设了
MaxPasswordAge 30天,但 KerberosMaximum lifetime for user ticket是 10 小时——用户改密后仍可能因 TGT 过期频繁输密码 -
LockoutDuration在 FGPP 中设为 30 分钟,但若域控制器的Account Lockout Duration(在 DC 策略中)设为 0(即永不自动解锁),则 FGPP 的锁定时长会被忽略 - 所有 FGPP 的
LockoutObservationWindow必须 ≤ 域策略中的Reset account lockout counter after,否则 AD 拒绝应用该 PSO
真正难调试的,是当用户处于多层组嵌套+跨域信任+RODC 缓存环境下,msDS-ResultantPSO 可能延迟更新或返回空值。这时候得直接查 DC 上的 NTDS 数据库快照,或者用 repadmin /showobjmeta 看策略对象复制状态。

















