细粒度密码策略(fgpp)通过pso对象、优先级设置(msds-passwordsettingsprecedence,1–1000,值越小优先级越高)及绑定用户或全局安全组三者协同实现,仅支持域功能级别≥windows server 2008,须用adsi edit在cn=policies下创建并关联dn至msds-psoapplied属性。
细粒度密码策略(fgpp)不是“给某个用户单独配一套策略”这么简单,而是通过策略对象 + 优先级绑定 + 目标主体三者协同实现的。核心逻辑是:策略不直接写在用户身上,而是创建一个独立的密码设置对象(pso),再把它“指派”给用户或组,并靠优先级决定谁生效。
Windows域中用PSO管理特定用户
仅适用于域功能级别 ≥ Windows Server 2008 的域;不能直接应用到OU,必须通过用户对象或全局安全组绑定:
- 先确认域功能级别:打开“Active Directory域和信任关系” → 右键域名 → “提升域功能级别”,确保为2008或更高
- 用ADSI Edit(不是ADUC图形界面)连接到Default Naming Context,导航至 CN=System,CN=DomainName → CN=Policies
- 右键CN=Policies → 新建msDS-PasswordSettings对象,填名称(如PSO-SpecialUser-120Days),关键设msDS-PasswordSettingsPrecedence=10(数值越小,优先级越高)
- 设置具体参数:msDS-MinimumPasswordLength=14、msDS-MaximumPasswordAge=10368000(120秒)、msDS-LockoutThreshold=3等
- 找到目标用户(或更推荐:新建一个全局安全组,把该用户加进去),右键 → 属性 → Attribute Editor → 编辑msDS-PSOApplied → 添加刚创建PSO的完整DN
Linux中对单个用户启用独立密码策略
Linux本身不支持“为某用户单独设一套密码策略”,但可通过PAM与shadow数据结合实现效果近似的目标:
在 Windows 11 上"直接发声"的 TTS(从 WSL2/TUI 调用 powershell.exe + System.Speech)。适用于用户说"说出来/读出来/语音播报/用TTS",或反馈"没声音/tts 生成的 mp3 是空的/播不出来",以及需要中文语音但 OpenClaw 内置 tts 不可用时。
- 所有用户默认受全局PAM策略(如/etc/pam.d/common-password中pam_pwquality.so)约束;要差异化,需绕过该模块对特定用户生效
- 方法一:在PAM配置中加条件判断,例如用pam_succeed_if.so识别用户名,再跳过复杂度检查:
auth [success=1 default=ignore] pam_succeed_if.so user = "specialuser"
password [default=ok] pam_pwquality.so minlen=8 - 方法二:用chage命令单独控制该用户的密码生命周期(只影响shadow字段,不影响复杂度):
chage -M 60 -m 7 -W 14 specialuser(最长60天、最短7天、提前14天警告) - 注意:/etc/login.defs只影响新用户创建,对已有用户无效;真正起效的是shadow数据库中的值,可用chage -l specialuser验证
为什么不能直接“选中用户→点密码策略→填参数”?
这是由系统底层设计决定的:
- Windows AD中,密码策略本质是Kerberos策略的一部分,全局策略走GPO下发,细粒度策略必须用PSO这种特殊LDAP对象,且仅能绑定到用户或全局安全组——这是架构限制,不是操作缺陷
- Linux中,PAM是服务级插件框架,它面向的是login、sshd等服务调用,不是用户对象本身;没有“用户专属策略存储区”,所有策略都靠配置文件+运行时条件判断模拟
- 强行手动改/etc/shadow某行字段(如maxdays)虽能临时生效,但下次passwd命令或PAM校验可能覆盖它,不稳定也不可维护
实用建议:怎么管得准又省事
别执着于“只管一个人”,换成“管一小群人”更可靠:
- Windows下:为需要特殊策略的用户新建一个全局安全组(如“HighPrivilegeUsers”),把PSO绑给这个组,后续增减人员只需改组成员,不用反复编辑属性
- Linux下:在/etc/group里建专用组(如“strictpwd”),用pam_succeed_if.so按组判断:
auth [success=1 default=ignore] pam_succeed_if.so user ingroup strictpwd - 无论哪种系统,都要用标准命令验证结果:Windows用dsquery * -filter "(sAMAccountName=specialuser)" -attr msDS-ResultantPSO;Linux用chage -l specialuser和普通用户身份执行passwd实测修改过程










