Sun Java System Directory Server Enterprise Edition 6.1 管理指南

第 7 章 目录服务器密码策略

用户连接到目录服务器时,系统将对该用户进行验证。根据验证期间建立的标识,目录可以为用户授予访问权限和资源限制。本章中的帐户一般指用户条目。帐户还反映用户在目录上执行操作的权限。在本章的密码策略讨论中,每个帐户都与用户条目和密码相关联。

本章还将介绍帐户激活(密码策略的一个方面)。目录管理者可以直接对帐户进行锁定和解除锁定,此操作独立于密码策略。

本章不包含验证方法。某些验证方法(如 SASL GSSAPI 和基于客户端 SSL 证书的验证)不需要使用密码。本章中与密码策略有关的信息不适用于此类验证方法。有关配置验证机制的说明,请参见第 5 章,目录服务器安全性

本章也不包含 Directory Server 6.1 和以前的 Directory Server 版本之间的密码策略兼容性问题。在创建 Directory Server 6.1 实例时,密码策略实现默认使用 Directory Server 5 兼容模式,以便于从早期版本进行升级。要充分利用本章中介绍的密码策略功能,您需要更改密码策略兼容性模式。有关设置密码兼容性模式的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.1 Migration Guide》中的“Password Policy Compatibility”

本章包含以下主题:

密码策略和工作单

本部分介绍密码策略设置,并提供一个工作单,以帮助您定义符合要求的密码策略。


注 –

要使用默认的密码策略,请参见管理默认密码策略


密码策略设置

在目录服务器中指定密码策略时,需要修改或创建包含对象类 pwdPolicy(5dsoc) 的条目。

为特定类型的用户定义密码策略时,需要考虑以下注意事项:

本章的后续部分将介绍如何处理密码策略的这些方面。可以使用用于定义密码策略的工作单阐明要实现的每种密码策略。

帐户锁定策略

本部分介绍用于管理帐户锁定的策略属性。

目录服务器帐户一般指用户条目,以及用户在目录上执行操作的权限。每个帐户都与绑定 DN 和用户密码相关联。当入侵者看上去要尝试破解密码时,您希望目录服务器锁定帐户。锁定可阻止入侵者使用帐户进行绑定。锁定还可阻止入侵者继续进行攻击。

作为管理员,您还可以手动停用某个帐户或共享某个角色的所有用户的帐户。有关说明,请参见手动锁定帐户。但是,密码策略的一个重要部分就是指定目录服务器在什么情况下锁定帐户,而需要您的干预。

首先,您必须指定目录服务器可以在发生太多失败绑定时使用 pwdLockout(5dsat) 自动锁定帐户。目录服务器会跟踪尝试绑定到帐户的连续失败次数。可以使用 pwdMaxFailure(5dsat) 指定在目录服务器锁定帐户之前所允许的连续失败次数。

目录服务器将严格按照密码策略锁定帐户。此操作完全为机械性操作。帐户锁定的原因可能不是入侵者对帐户发动攻击,而是用户键入了错误的密码。因此,可以使用 pwdFailureCountInterval(5dsat) 指定目录服务器在清除失败尝试记录之前等待下一次尝试的时间。可以使用 pwdLockoutDuration(5dsat) 指定在目录服务器自动对帐户解除锁定之前锁定持续的时间。如果用户并非出于恶意而犯下了合理错误,管理员无需介入帐户解除锁定。

如果在复制拓扑中复制用户数据,则会将锁定属性与其他条目数据一起复制。pwdIsLockoutPrioritized(5dsat) 属性的默认设置为 TRUE,以便优先复制锁定属性更新。因此,用户在被锁定之前绑定到任何单个副本的连续失败尝试次数不能超过 pwdMaxFailure 次,而对于其他副本,被锁定之前可尝试的绑定次数可能更少。有关如何确保用户在整个复制拓扑中被锁定之前恰好进行 pwdMaxFailure 次尝试的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.1 Deployment Planning Guide》中的“Preventing Authentication by Using Global Account Lockout”

密码更改策略

本部分介绍用于管理密码更改的策略属性。

在许多部署中,目录服务器是标识数据的系统信息库。用户应该可以更改自己的密码(由 pwdAllowUserChange(5dsat) 指定),因此您无需更改密码。

允许用户更改自己的密码之后,您可能还希望控制用户可以在哪些情况下更改密码。可以使用 pwdSafeModify(5dsat) 指定要更改密码的用户必须首先提供正确的现有密码,然后才能替换密码。有关如何修改密码的示例,请参见pwdSafeModifyTRUE 时从命令行修改密码。可以使用 pwdInHistory(5dsat) 指定目录服务器记住的密码个数,以阻止用户重复使用相同的密码。也可以通过设置 pwdMinAge(5dsat) 来阻止用户过于频繁地更改密码。

在许多情况下,您(管理员)或者您管理的应用程序会在目录中创建用户条目。您可以指定在用户首次绑定到新帐户时要更改的用户密码值。您可能还必须重置用户密码,重置密码后,用户在下次使用该帐户时应该更改密码。目录服务器具有特定属性 pwdMustChange(5dsat),可以使用该属性指示当其他用户重置密码值后,用户是否必须更改密码。

还可以指定当目录管理者通过设置 passwordRootdnMayBypassModsChecks(5dsat) 更改密码时,可以不必遵循策略。

密码内容策略

本部分介绍用于管理密码内容的策略属性。

虽然一般不会在目录搜索中返回密码值,但攻击者仍有可能获取对目录数据库的访问权限。因此,密码值一般以某种受支持的散列格式(使用 passwordStorageScheme(5dsat) 指定)存储。

可以通过设置 pwdMinLength(5dsat) 来强制密码至少包含指定数目的字符。

还可以通过设置 pwdCheckQuality(5dsat) 来强制检查密码是否满足最低密码质量的定义。执行检查时,目录服务器将检查密码是否至少达到最小长度。服务器也会检查密码是否不包含任何 cngivenNamemail, ousnuid 属性值。此外,启用严格密码检查插件时,目录服务器还会检查密码是否不包含该插件所使用的字典文件中的字符串。服务器也会检查密码是否包含不同类型字符的正确组合。

可以使用 dsconf set-server-prop 命令启用严格密码检查。可以使用 pwd-strong-check-enabled 属性打开插件,然后重新启动服务器以使更改生效。可以使用 pwd-strong-check-require-charset 属性指定密码所需的字符集。pwd-strong-check-require-charset 属性使用以下值的掩码:

lower

新密码必须包含小写字符。

upper

新密码必须包含大写字符。

digit

新密码必须包含数字。

special

新密码必须包含特殊字符。

any-two

新密码必须至少包含上述字符集中的两种,每种至少包含一个字符。

any-three

新密码必须至少包含上述字符集中的三种,每种至少包含一个字符。

pwd-strong-check-require-charset 属性的默认设置为 lower && upper && digit && special

密码过期策略

本部分介绍用于管理密码过期的策略属性。

要确保用户定期更改密码,可以通过设置 pwdMaxAge(5dsat),将目录服务器配置为当密码达到特定存留期后将密码设置为过期。

必须通知用户其密码即将过期。可以将目录服务器配置为返回一个警告,指明用于绑定的密码即将过期。可以使用 pwdExpireWarning(5dsat) 定义在过期之前多久将会在客户端进行绑定时返回警告。请注意,客户端应用程序将收到该警告。用户不会直接收到警告。客户端应用程序在收到密码即将过期的警告时必须通知最终用户。

通过设置 pwdGraceAuthNLimit(5dsat),可允许用户使用过期密码进行一次或多次绑定尝试。因此,未能及时更改密码的用户仍可以进行绑定以更改密码。请注意,当用户使用宽限登录进行绑定时,该用户可以执行任何操作。宽限登录的工作方式就像密码尚未过期一样。

每次修改条目上的密码时,目录服务器都会更新操作属性 pwdChangedTime(5dsat)。因此,如果您准备启用密码过期,则已超过存留期限的用户密码会在您启用密码过期后立即过期。如果您不希望发生这种情况,请使用警告和宽限登录。

跟踪上次验证时间的策略

本部分介绍密码策略属性 pwdKeepLastAuthTime(5dsat) 的使用。

设置 pwdKeepLastAuthTime 之后,目录服务器将在每次用户验证时跟踪上次成功绑定的时间。此时间记录在用户条目的 pwdLastAuthTime(5dsat) 操作属性上。

由于此行为会为每次成功的绑定操作添加更新,因此在默认情况下不会激活 pwdKeepLastAuthTime 功能。您必须明确打开此功能才能在部署中使用。

用于定义密码策略的工作单

此工作单旨在帮助您通过命令行界面或使用目录服务控制中心 (Directory Service Control Center, DSCC) 定义要实现的密码策略。请为每个密码策略使用一个工作单。

记录密码策略条目的 DN 之后,请记录与每个策略范围中的属性设置有关的决策。另外,请记录使用这些设置的理由。

密码策略工作单 

密码策略条目标识名 

dn: cn=

策略范围 

属性 

在此处填写您的设置 

在此处填写使用这些设置的理由 

帐户锁定 

pwdFailureCountInterval(5dsat)

   

pwdIsLockoutPrioritized(5dsat)

           

           

pwdLockout(5dsat)

           

           

pwdLockoutDuration(5dsat)

           

           

pwdMaxFailure(5dsat)

           

           

密码更改 

passwordRootdnMayBypassModsChecks(5dsat)

           

           

pwdAllowUserChange(5dsat)

           

           

pwdInHistory(5dsat)

           

           

pwdMinAge(5dsat)

           

           

pwdMustChange(5dsat)

           

           

pwdSafeModify(5dsat)

           

           

密码内容 

passwordStorageScheme(5dsat)

           

           

pwdCheckQuality(5dsat)

           

           

pwdMinLength(5dsat)

   

密码过期 

pwdExpireWarning(5dsat)

           

           

pwdGraceAuthNLimit(5dsat)

           

           

pwdMaxAge(5dsat)

           

           

跟踪上次验证时间 

pwdKeepLastAuthTime(5dsat)

           

           


注 –

pwdCheckQuality 属性设置为 2 时,服务器可以执行其他检查。如果还启用了密码检查插件,则该插件的设置将影响对新密码值执行哪些检查。


管理默认密码策略

默认密码策略将应用于目录实例中未定义专用策略的所有用户。但是,默认密码策略不会应用于目录管理员。有关策略范围的详细信息,请参见应用哪个密码策略

默认密码策略是可以使用 dsconf 命令进行配置的策略。还可以通过读取 cn=Password Policy,cn=config 查看默认密码策略。

本部分显示了每个策略范围的策略属性以及相关的 dsconf 服务器属性。此外,还介绍了如何查看和更改默认密码策略设置。

密码策略属性和 dsconf 服务器属性之间的关联

下表显示了每个密码策略范围的密码策略属性和相关的 dsconf 服务器属性。

策略范围 

策略属性 

dsconf 服务器属性

帐户锁定 

pwdFailureCountInterval

pwd-failure-count-interval

pwdLockout

pwd-lockout-enabled

pwdLockoutDuration

pwd-lockout-duration

pwdMaxFailure

pwd-max-failure-count

密码更改 

passwordRootdnMayBypassModsChecks

pwd-root-dn-bypass-enabled

pwdAllowUserChange

pwd-user-change-enabled

pwdInHistory

pwd-max-history-count

pwdMinAge

pwd-min-age

pwdMustChange

pwd-must-change-enabled

pwdSafeModify

pwd-safe-modify-enabled

密码内容 

pwdCheckQuality

pwd-check-enabledpwd-accept-hashed-password-enabledpwd-strong-check-dictionary-pathpwd-strong-check-enabledpwd-strong-check-require-charset

pwdMinLength

pwd-min-length

passwordStorageScheme

pwd-storage-scheme

密码过期 

pwdExpireWarning

pwd-expire-warning-delay

pwdGraceAuthNLimit

pwd-grace-login-limit

pwdMaxAge

pwd-max-age

跟踪上次验证时间 

pwdKeepLastAuthTime

pwd-keep-last-auth-time-enabled


注 –

pwdCheckQuality 相关的属性可用于配置密码检查插件。因此,这五种属性适用于整个服务器实例,从而也适用于包含 pwdCheckQuality: 2 的其他密码策略。


Procedure查看默认密码策略设置

可以使用 dsconf 命令查看默认密码策略设置。

您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 读取默认密码策略配置。


    $ dsconf get-server-prop -h host -p port | grep ^pwd-
    pwd-accept-hashed-pwd-enabled      :  N/A
    pwd-check-enabled                  :  off
    pwd-compat-mode                    :  DS5-compatible-mode
    pwd-expire-no-warning-enabled      :  on
    pwd-expire-warning-delay           :  1d
    pwd-failure-count-interval         :  10m
    pwd-grace-login-limit              :  disabled
    pwd-keep-last-auth-time-enabled    :  off
    pwd-lockout-duration               :  1h
    pwd-lockout-enabled                :  off
    pwd-lockout-repl-priority-enabled  :  on
    pwd-max-age                        :  disabled
    pwd-max-failure-count              :  3
    pwd-max-history-count              :  disabled
    pwd-min-age                        :  disabled
    pwd-min-length                     :  6
    pwd-mod-gen-length                 :  6
    pwd-must-change-enabled            :  off
    pwd-root-dn-bypass-enabled         :  off
    pwd-safe-modify-enabled            :  off
    pwd-storage-scheme                 :  SSHA
    pwd-strong-check-dictionary-path   :  /local/ds6/plugins/words-english-big.txt
    pwd-strong-check-enabled           :  off
    pwd-strong-check-require-charset   :  lower
    pwd-strong-check-require-charset   :  upper
    pwd-strong-check-require-charset   :  digit
    pwd-strong-check-require-charset   :  special
    pwd-supported-storage-scheme       :  CRYPT
    pwd-supported-storage-scheme       :  SHA
    pwd-supported-storage-scheme       :  SSHA
    pwd-supported-storage-scheme       :  NS-MTA-MD5
    pwd-supported-storage-scheme       :  CLEAR
    pwd-user-change-enabled            :  on

Procedure更改默认密码策略设置

可以通过使用 dsconf 命令设置服务器属性来更改默认密码策略。


注 –

在完成此过程之前,请阅读并完成用于定义密码策略的工作单


您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 将工作单中的设置转换为 dsconf 命令属性设置。

  2. 使用 dsconf set-server-prop 命令适当地更改默认密码策略属性。

    例如,以下命令允许目录管理员在修改密码时违反默认策略:


    $ dsconf set-server-prop -h host -p port pwd-root-dn-bypass-enabled:on

管理专用密码策略

专用密码策略是在 pwdPolicy(5dsoc) 条目中定义的。可以在目录树中的任意位置定义策略,通常在使用策略所管理的帐户复制的子树中定义。策略的 DN 采用 cn=policy name,subtree 格式。

定义密码策略之后,可以通过在所需的用户条目中设置 pwdPolicySubentry(5dsat) 属性来指定该密码策略。

本部分包含以下主题:

应用哪个密码策略

目录服务器允许您配置多个密码策略。本部分介绍默认密码策略和专用密码策略。本部分还介绍当多个密码策略可应用于给定帐户时应执行哪个策略。

首次创建目录服务器实例时,该实例有一个默认密码策略。默认密码策略在配置条目 cn=PasswordPolicy,cn=config 中表示。默认密码策略将应用于目录中除目录管理员之外的所有帐户。

与在所有目录服务器密码策略中一样, cn=PasswordPolicy,cn=config 具有对象类 pwdPolicy(5dsoc)sunPwdPolicy(5dsoc)


注 –

创建目录服务器实例时,密码策略属性仍处于 Directory Server 5 兼容模式,以便从早期版本进行升级。在 Directory Server 5 兼容模式下,目录服务器还会处理具有对象类 passwordPolicy(5dsoc) 的密码策略条目。

完成升级之后,您可以在完整功能模式下使用新的密码策略,如《Sun Java System Directory Server Enterprise Edition 6.1 Migration Guide》中所述。管理上的变化对目录应用程序没有任何影响。

本章介绍使用新密码策略功能的密码策略配置。


可以更改默认密码策略以覆盖默认设置。可以使用 dsconf(1M) 命令设置默认密码策略的服务器属性。通常,此类服务器属性的名称都以 pwd- 前缀开头。更改此类属性的设置时,将覆盖实例的默认密码策略。但是,复制操作不会复制对副本所做的更改。对默认密码策略所做的更改是实例配置的一部分,而不是目录数据的一部分。

除了配置默认密码策略以外,还可以配置专用密码策略。专用密码策略是由目录树中的条目定义的。专用密码策略条目与默认密码策略具有相同的对象类 pwdPolicy(5dsoc),因此将使用相同的策略属性。由于专用密码策略是常规的目录条目,因此策略条目的复制方式与常规目录条目的复制方式相同。

用户条目可通过操作属性 pwdPolicySubentry(5dsat) 的值来引用专用密码策略。用户条目引用专用密码策略时,该专用密码策略将覆盖实例的默认密码策略。在许多部署中,您需要指定用户角色。通过设置 pwdPolicySubentry 值,可以将角色配置为与服务类 (Class of Service, CoS) 一起使用,以确定应用于用户帐户的密码策略。要覆盖由角色设置的密码策略,请直接在该用户的条目上更改 pwdPolicySubentry 值。

下面对本部分内容进行一下总结:最初将应用默认密码策略。 您可以更改默认密码策略以覆盖默认值。然后,您可以创建专用密码策略条目以覆盖默认密码策略。使用角色和 CoS 指定密码策略时,可以通过为单个条目指定密码策略来覆盖 CoS 指定的策略。

Procedure创建密码策略

可以使用与创建和修改其他目录条目相同的方式来创建和修改专用密码策略。以下过程说明如何使用文本编辑器在 LDIF 中编写密码策略条目。接下来,可以在 ldapmodify 命令中使用 -a 选项将该密码策略条目添加到目录。

您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

开始之前

如果没有特殊说明,此处显示的示例数据均来自 Example.ldif

  1. 完成要创建的策略的密码策略工作单。

    用于定义密码策略的工作单中提供了样例。

  2. 根据工作单,在 LDIF 中编写密码策略条目。

    例如,以下策略条目将为 Example.com 的临时员工指定密码策略,Example.com 的子树根为 dc=example,dc=com

    dn: cn=TempPolicy,dc=example,dc=com
    objectClass: top
    objectClass: pwdPolicy
    objectClass: sunPwdPolicy
    objectClass: LDAPsubentry
    cn: TempPolicy
    pwdAttribute: userPassword
    pwdCheckQuality: 2
    pwdLockout: TRUE
    pwdLockoutDuration: 300
    pwdMaxFailure: 3
    pwdMustChange: TRUE

    除了默认密码策略设置之外,此处显示的策略还指定其他行为。系统将执行密码质量检查。连续出现三次失败绑定之后,帐户将被锁定五分钟(300 秒)。重置密码后必须更改密码。为用户帐户指定策略后,此处明确指定的设置将覆盖默认密码策略。

  3. 将密码策略条目添加到目录。

    例如,以下命令将为 dc=example,dc=com 下的 Example.com 临时员工添加密码策略。该密码策略已保存到名为 pwp.ldif 的文件中。


    $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f pwp.ldif
    Enter bind password: 
    adding new entry cn=TempPolicy,dc=example,dc=com
    
    $ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w --b dc=example,dc=com \
    "(&(objectclass=ldapsubentry)(cn=temppolicy))"
    Enter bind password:
    version: 1
    dn: cn=TempPolicy,dc=example,dc=com
    objectClass: top
    objectClass: pwdPolicy
    objectClass: LDAPsubentry
    cn: TempPolicy
    pwdCheckQuality: 2
    pwdLockout: TRUE
    pwdLockoutDuration: 300
    pwdMaxFailure: 3
    pwdMustChange: TRUE
    $

    Example.ldif 中所示,kvaughan 是具有 dc=example,dc=com 条目修改权限的人力资源经理。Vaughan 的绑定密码(如 Example.ldif 中所示)为 bribery

另请参见

要指定您所定义的策略将要管理的用户帐户,请参见为单个帐户指定密码策略使用角色和 CoS 指定密码策略

Procedure为单个帐户指定密码策略

此过程将为单个用户帐户指定现有的密码策略。


注 –

要完成此过程,您必须具有要指定的专用密码策略。请参见创建密码策略


您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

如果没有特殊说明,此处显示的示例数据均来自 Example.ldif

  1. 将密码策略 DN 添加到用户条目的 pwdPolicySubentry 属性值。

    例如,以下命令将创建密码策略中定义的密码策略指定给 David Miller 条目(其 DN 为 uid=dmiller,ou=people,dc=example,dc=com):


    $ cat pwp.ldif 
    dn: uid=dmiller,ou=people,dc=example,dc=com
    changetype: modify
    add: pwdPolicySubentry
    pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com
    
    $ ldapmodify -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f pwp.ldif 
    Enter bind password: 
    modifying entry uid=dmiller,ou=people,dc=example,dc=com
    
    $ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w - -b dc=example,dc=com \
    "(uid=dmiller)" pwdPolicySubentry
    Enter bind password:
    version: 1
    dn: uid=dmiller, ou=People, dc=example,dc=com
    pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com
    $

    Example.ldif 中所示,kvaughan 是具有 dc=example,dc=com 条目修改权限的人力资源经理。Vaughan 的绑定密码(如 Example.ldif 中所示)为 bribery

Procedure使用角色和 CoS 指定密码策略

此过程通过应用角色和服务类 (Class of Service, CoS) 为一组用户指定现有的专用密码策略。有关角色和 CoS 的详细信息,请参见第 9 章,目录服务器组、角色和 CoS


注 –

要完成此过程,您必须具有要指定的专用密码策略。请参见创建密码策略


您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

如果没有特殊说明,此处显示的示例数据均来自 Example.ldif

  1. 为要由密码策略管理的条目创建角色。

    例如,以下命令将为 Example.com 的临时员工创建过滤角色。


    $ cat tmp.ldif
    dn: cn=TempFilter,ou=people,dc=example,dc=com
    objectclass: top
    objectclass: LDAPsubentry
    objectclass: nsRoleDefinition
    objectclass: nsComplexRoleDefinition
    objectclass: nsFilteredRoleDefinition
    cn: TempFilter
    nsRoleFilter: (&(objectclass=person)(status=contractor))
    description: filtered role for temporary employees
    
    $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f tmp.ldif
    Enter bind password: 
    modifying entry cn=TempFilter,ou=people,dc=example,dc=com
    
    $

    Example.ldif 中所示,kvaughan 是具有 dc=example,dc=com 条目修改权限的人力资源经理。Vaughan 的绑定密码(如 Example.ldif 中所示)为 bribery

  2. 创建用于生成密码策略条目 DN 的服务类。

    此 DN 是用户(具有您所创建的角色)的 pwdPolicySubentry 属性值。

    例如,以下命令将为 Example.com 的临时员工创建过滤角色。这些命令将为具有此角色的用户指定 cn=TempPolicy,dc=example,dc=com


    $ cat cos.ldif
    dn: cn=PolTempl,dc=example,dc=com
    objectclass: top
    objectclass: nsContainer
    
    dn: cn="cn=TempFilter,ou=people,dc=example,dc=com",
     cn=PolTempl,dc=example,dc=com
    objectclass: top
    objectclass: extensibleObject
    objectclass: LDAPsubentry
    objectclass: costemplate
    cosPriority: 1
    pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com
    
    dn: cn=PolCoS,dc=example,dc=com
    objectclass: top
    objectclass: LDAPsubentry
    objectclass: cosSuperDefinition
    objectclass: cosClassicDefinition
    cosTemplateDN: cn=PolTempl,dc=example,dc=com
    cosSpecifier: nsRole
    cosAttribute: pwdPolicySubentry operational
    
    $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f cos.ldif
    Enter bind password: 
    modifying entry cn=TempFilter,ou=people,dc=example,dc=com
    
    $

    状态为 contractor 的用户现在要遵循密码策略 cn=TempPolicy,dc=example,dc=com

Procedure设置首次登录密码策略

在许多部署中,应用于新帐户的密码策略与应用于已建帐户的密码策略不同。本部分介绍首次登录密码策略。此策略为用户提供三天时间使用新建帐户并设置新密码,之后将锁定该帐户。对于已重置密码的用户而言,此策略的工作方式相同。

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 为新建帐户创建专用密码策略。

    例如, 添加一个将过期时间设置为三天(259,200 秒)的密码策略条目。此密码策略还将 pwdMustChange(5dsat) 设置为 TRUE,这意味着用户在首次绑定时必须更改其密码。


    $ cat firstLogin.ldif
    dn: cn=First Login,dc=example,dc=com
    objectClass: top
    objectClass: LDAPsubentry
    objectClass: pwdPolicy
    objectClass: sunPwdPolicy
    cn: First Login
    passwordStorageScheme: SSHA
    pwdAttribute: userPassword
    pwdInHistory: 0
    pwdExpireWarning: 86400
    pwdLockout: TRUE
    pwdMinLength: 6
    pwdMaxFailure: 3
    pwdMaxAge: 259200
    pwdFailureCountInterval: 600
    pwdAllowUserChange: TRUE
    pwdLockoutDuration: 3600
    pwdMinAge: 0
    pwdCheckQuality: 2
    pwdMustChange: TRUE
    
    $ ldapmodify -a -D cn=admin,cn=Administrators,cn=config -w - -f firstLogin.ldif
    Enter bind password: 
    adding new entry cn=First Login,dc=example,dc=com
    
    $
  2. 创建包含所有新建帐户的角色。

    创建此角色时,将设置用于区分新建帐户和已建帐户的方法。

    1. 将新帐户定义为 pwdReset(5dsat) 属性设置为 TRUE 的帐户。

      当其他用户(如密码管理员)更改该用户的密码时,pwdReset 将被设置为 TRUE

    2. 创建用于标识新帐户的角色。

      例如,以下命令将为已重置密码的帐户创建角色。


      $ cat newRole.ldif 
      dn: cn=First Login Role,ou=people,dc=example,dc=com
      objectclass: top
      objectclass: LDAPsubentry
      objectclass: nsRoleDefinition
      objectclass: nsComplexRoleDefinition
      objectclass: nsFilteredRoleDefinition
      cn: First Login Role
      nsRoleFilter: (pwdReset=TRUE)
      description: Role to assign password policy for new and reset accounts
      
      $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f newRole.ldif
      Enter bind password: 
      adding new entry cn=First Login Role,ou=people,dc=example,dc=com
      
      $ 
  3. 使用服务类为新建帐户指定密码策略。


    $ cat newCoS.ldif 
    dn: cn=First Login Template,dc=example,dc=com
    objectClass: top
    objectClass: nsContainer
    
    dn: cn="cn=First Login Role,ou=people,dc=example,dc=com",
     cn=First Login Template,dc=example,dc=com
    objectClass: top
    objectClass: extensibleObject
    objectClass: LDAPSubEntry
    objectClass: CoSTemplate
    cosPriority: 1
    pwdPolicySubentry: cn=First Login,dc=example,dc=com
    
    dn: cn=First Login CoS,dc=example,dc=com
    objectClass: top
    objectClass: LDAPSubEntry
    objectClass: CoSSuperDefinition
    objectClass: CoSClassicDefinition
    cosTemplateDN: cn=First Login Template,dc=example,dc=com
    cosSpecifier: nsRole
    cosAttribute: pwdPolicySubentry operational
    
    $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -f newCoS.ldif
    Enter bind password: 
    adding new entry cn=First Login Template,dc=example,dc=com
    
    adding new entry cn="cn=First Login Role,ou=people,dc=example,dc=com",
     cn=First Login Template,dc=example,dc=com
    
    adding new entry cn=First Login CoS,dc=example,dc=com
    
    $

示例 7–1 检查密码策略指定

请添加与所添加的角色相符的新用户。添加用户是为了验证新用户是否遵循新的密码策略,而现有用户不会遵循该策略。


$ cat quentin.ldif
dn: uid=qcubbins,ou=People,dc=example,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: qcubbins
givenName: Quentin
sn: Cubbins
cn: Quentin Cubbins
mail: quentin.cubbins@example.com
userPassword: ch4ngeM3!
description: New account

$ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f quentin.ldif
Enter bind password: 
adding new entry uid=qcubbins,ou=People,dc=example,dc=com

$ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w - \
-b dc=example,dc=com uid=qcubbins nsrole pwdPolicySubentry
Enter bind password:
version: 1
dn: uid=qcubbins,ou=People,dc=example,dc=com
nsrole: cn=first login role,ou=people,dc=example,dc=com
pwdPolicySubentry: cn=First Login,dc=example,dc=com
$ ldapsearch -b dc=example,dc=com uid=bjensen nsrole pwdPolicySubentry
version: 1
dn: uid=bjensen, ou=People, dc=example,dc=com
$ 

请注意,Barbara Jensen 的现有帐户由默认密码策略管理。但是,Quentin Cubbins 的新帐户将由您定义的密码策略管理。


pwdSafeModifyTRUE 时从命令行修改密码

用户的密码策略将 pwdSafeModify 设置为 TRUE 时,必须同时提供旧密码和新密码才能更改密码。命令 dsconf set-server-prop pwd-safe-modify-enabled:on 对默认密码策略具有相同的效果。

可以使用 ldappasswd(1) 命令更改密码。此命令支持安全密码修改。此命令将执行 RFC 3062(LDAP Password Modify Extended Operation

可以使用 ldapmodify(1) 命令更改密码。此时向 ldapmodify 命令传递的 LDIF 应该如下所示:

dn: DN of user whose password you are changing
changetype: modify
delete: userPassword
userPassword: old password
-
add: userPassword
userPassword: new password

您还可以使用 LDAP 密码修改扩展操作。使用密码修改扩展操作重置密码中介绍了如何设置扩展操作支持。

重置过期密码

密码策略执行密码过期时,某些用户可能未及时更改密码。本部分说明如何更改已过期的密码。


注 –

每次修改条目上的密码时,目录服务器都会更新操作属性 pwdChangedTime(5dsat)。因此,如果您准备启用密码过期,则已超过存留期限的用户密码会在您启用密码过期后立即过期。如果您不希望发生这种情况,请使用警告和宽限登录。


本部分包含使用密码修改扩展操作重置密码以及在密码过期时允许宽限验证的过程。

本部分介绍的机制可供管理员使用,或者供处理用户与目录之间实际交互的应用程序使用。通常,您需要依赖于应用程序来确保最终用户使用机制的方式实际上与预期相同。

Procedure使用密码修改扩展操作重置密码

密码过期时用户帐户将被锁定。重置密码时,将对帐户解除锁定。其他用户(如管理员)可以重置密码。重置密码后,目录服务器将对用户帐户解除锁定。目录服务器提供 RFC 3062(LDAP Password Modify Extended Operation)支持。可以使用扩展操作允许目录管理者或目录应用程序通过密码重置对帐户解除锁定。

允许使用密码修改扩展操作时应特别谨慎,如以下过程所示。请仅为您所信任的管理员和应用程序授予访问权限。请勿以明文形式在网络中传送密码。

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 为用户授予对密码管理员或密码管理应用程序的访问权限。

  2. 允许密码管理员使用密码修改扩展操作。

    以下命令将设置一个 ACI,以允许密码管理员角色的成员在通过 SSL 进行连接时使用密码修改扩展操作:


    $ cat exop.ldif
    dn: oid=1.3.6.1.4.1.4203.1.11.1,cn=features,cn=config
    objectClass: top
    objectClass: directoryServerFeature
    oid: 1.3.6.1.4.1.4203.1.11.1
    cn: Password Modify Extended Operation
    aci: (targetattr != "aci")(version 3.0;
     acl "Password Modify Extended Operation
     "; allow( read, search, compare, proxy ) (roledn = "
     ldap:///cn=Password Managers,dc=example,dc=com" and authmethod = "SSL");)
    
    $ ldapmodify -a -D cn=admin,cn=Administrators,cn=config -w - -f exop.ldif
    Enter bind password: 
    adding new entry oid=1.3.6.1.4.1.4203.1.11.1,cn=features,cn=config
    
    $

    cn=features,cn=config 下的条目允许您管理对特定操作(使用密码修改扩展操作)的访问权限。

  3. 让密码管理员重置用户密码。

    此步骤将对用户帐户解除锁定,可以使用 ldappasswd(1) 命令完成此步骤。

  4. (可选的)如果用户必须更改密码,请让密码管理员通知用户。

    如果管理用户条目的密码策略包含 pwdMustChange: TRUE,则用户必须在重置密码后更改其密码。

Procedure在密码过期时允许宽限验证

此过程介绍如何为用户提供宽限验证,以允许用户更改已过期的密码。

宽限验证应该由处理密码策略请求和响应控制的应用程序进行管理。此过程显示一个如何在应用程序中使用此控制的简单示例。

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 确保用户可以访问使用密码策略请求和响应控制的应用程序。

    应用程序应确保用户正确处理宽限验证。

  2. 允许应用程序使用密码策略控制。

    以下命令将设置一个 ACI,以允许密码管理员角色的成员使用密码策略控制:


    $ cat ctrl.ldif
    dn: oid=1.3.6.1.4.1.42.2.27.8.5.1,cn=features,cn=config
    objectClass: top
    objectClass: directoryServerFeature
    oid: 1.3.6.1.4.1.42.2.27.8.5.1
    cn: Password Policy Controls
    aci: (targetattr != "aci")(version 3.0; acl "Password Policy Controls
     "; allow( read, search, compare, proxy ) roledn = "
     ldap:///cn=Password Managers,dc=example,dc=com";)
    
    $ ldapmodify -a -D cn=admin,cn=Administrators,cn=config -w - -f ctrl.ldif
    Enter bind password: 
    adding new entry oid=1.3.6.1.4.1.42.2.27.8.5.1,cn=features,cn=config
    
    $

    cn=features,cn=config 下条目的唯一用途就是允许您管理对特定操作(使用密码策略请求和响应控制)的访问权限。

  3. 将密码策略中的 pwdGraceAuthNLimit 设置为密码过期后允许的验证次数。

  4. 确保应用程序能指导最终用户在宽限验证失效之前正确更改已过期的密码。

设置帐户属性

以下部分说明如何设置帐户的浏览限制、大小限制、时间限制和空闲超时。

Procedure设置帐户的浏览限制

  1. 使用 ldapmodify 命令设置 nsLookThroughLimit 的值。

    以下命令可删除 Barbara Jensen 的浏览限制:


    $ ldapmodify -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password: 
    dn: uid=bjensen,ou=people,dc=example,dc=com
    changetype: modify
    add: nsLookThroughLimit
    nsLookThroughLimit: -1
    ^D
    modifying entry uid=bjensen,ou=people,dc=example,dc=com
    
    ^D
    $

Procedure设置帐户的大小限制

  1. 使用 ldapmodify 命令设置 nsSizeLimit 的值。

    以下命令可删除 Barbara Jensen 的大小限制:


    $ ldapmodify -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password: 
    dn: uid=bjensen,ou=people,dc=example,dc=com
    changetype: modify
    add: nsSizeLimit
    nsSizeLimit: -1
    ^D
    modifying entry uid=bjensen,ou=people,dc=example,dc=com
    
    ^D
    $

Procedure设置帐户的时间限制

  1. 使用 ldapmodify 命令设置 nsTimeLimit 的值。

    以下命令可删除 Barbara Jensen 的时间限制:


    $ ldapmodify -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password: 
    dn: uid=bjensen,ou=people,dc=example,dc=com
    changetype: modify
    add: nsTimeLimit
    nsTimeLimit: -1
    ^D
    modifying entry uid=bjensen,ou=people,dc=example,dc=com
    
    ^D
    $

Procedure设置帐户的空闲超时

  1. 使用 ldapmodify 命令设置 nsIdleTimeout 的值。

    以下命令将 Barbara Jensen 的空闲超时时间设置为五分钟(300 秒):


    $ ldapmodify -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password: 
    dn: uid=bjensen,ou=people,dc=example,dc=com
    changetype: modify
    add: nsIdleTimeout
    nsIdleTimeout: 300
    ^D
    modifying entry uid=bjensen,ou=people,dc=example,dc=com
    
    ^D
    $

手动锁定帐户

目录服务器允许您将密码策略配置为在进行指定次数的失败绑定尝试后锁定帐户。有关详细信息,请参见帐户锁定策略。本部分介绍目录管理员可以使用的手动帐户锁定和激活工具。

目录管理员可以在不使用锁定持续时间计时器的情况下管理帐户锁定。在手动重置密码之前,锁定的帐户将保持锁定状态。目录管理员还可以无限期地停用某些帐户。

本部分说明如何检查帐户状态、停用帐户以及重新激活帐户。

Procedure检查帐户状态

请按以下所述检查帐户状态。


注 –

您必须以目录管理员身份进行绑定。


无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 使用 ns-accountstatus 命令检查帐户或角色的状态。

    以下命令将检查 Barbara Jensen 的帐户状态:


    $ ns-accountstatus -D "cn=Directory Manager" -j pwd.txt \
     -I uid=bjensen,ou=people,dc=example,dc=com
    uid=bjensen,ou=people,dc=example,dc=com activated.
    $

    有关详细信息,请参见 ns-accountstatus(1M) 手册页。

Procedure停用帐户

请按以下所述停用帐户或角色。


注 –

您必须以目录管理员身份进行绑定。


无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 使用 ns-inactivate 命令停用帐户或角色。

    以下命令将停用 Barbara Jensen 的帐户:


    $ ns-inactivate -D "cn=Directory Manager" -j pwd.txt \
    -I uid=bjensen,ou=people,dc=example,dc=com
    uid=bjensen,ou=people,dc=example,dc=com inactivated.
    $

    有关详细信息,请参见 ns-inactivate(1M) 手册页。

Procedure重新激活帐户

请按以下所述对帐户或角色解除锁定。


注 –

您必须以目录管理员身份进行绑定。


无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 使用 ns-activate 命令重新激活帐户或角色。

    以下命令将使 Barbara Jensen 的帐户再次处于活动状态:


    $ ns-activate -D "cn=Directory Manager" -j pwd.txt \
    -I uid=bjensen,ou=people,dc=example,dc=com
    uid=bjensen,ou=people,dc=example,dc=com activated.
    $

    有关详细信息,请参见 ns-activate(1M) 手册页。