20.4. 管理密码策略

密码策略通过强制实施一定级别的安全性来最小化使用密码的风险。例如,密码策略可以定义:
  • 用户必须根据时间表更改其密码。
  • 用户必须提供非主要密码。
  • 密码语法必须满足某些复杂性要求。
警告
当使用密码管理员帐户或 目录管理器 (root DN)设置密码时,将绕过密码策略且不验证。不要将这些帐户用于常规用户密码管理。仅使用它们来执行需要绕过密码策略的密码管理任务。
目录服务器支持精细的密码策略,因此密码策略可以应用到整个目录(global 密码策略)、一个特定子树(subtree-levellocal 密码策略) 或一个特定用户 (user-levellocal密码策略)。
应用到用户帐户的完整密码策略由以下元素组成:
  • 密码策略检查的类型或级别。此信息指示服务器是否应该检查并强制实施全局密码策略,还是本地(子树/用户级别)密码策略。
    密码策略在反转的 pyramid 中工作,从常规到特定的。全局密码策略由子树级密码策略替代,该策略由用户级密码策略替代。仅对条目强制执行一个密码策略;密码策略不会被添加。这意味着,如果在全局或子树级别策略中配置了特定属性,但没有在用户级密码策略中,则属性在尝试登录时不会用于用户,因为 active, applied 策略是用户级策略。
  • 密码添加和修改信息。密码信息包括密码语法和密码历史记录详情。
  • 绑定信息。绑定信息包括允许的宽限期数量、密码参与属性和跟踪绑定失败。
注意
建立密码策略后,可以通过配置帐户锁定策略来保护用户密码免受潜在的威胁。帐户锁定可防止尝试通过重复猜测用户密码来破坏目录的黑客。

20.4.1. 配置全局密码策略

默认情况下禁用全局密码策略设置。本节提供了一些配置全局密码策略的示例。
注意
配置密码策略后,配置帐户锁定策略。详情请查看 第 20.9 节 “配置基于密码的帐户锁定策略”

20.4.1.1. 使用命令行配置全局密码策略

使用 dsconf 工具显示并编辑全局密码策略设置:
  1. 显示当前设置:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com pwpolicy get
    Global Password Policy: cn=config
    ------------------------------------
    passwordstoragescheme: PBKDF2_SHA256
    passwordChange: on
    passwordMustChange: off
    passwordHistory: off
    passwordInHistory: 6
    ...
  2. 调整密码策略设置。例如,要启用密码语法检查并将密码的最小长度设置为 12 个字符,请输入:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com pwpolicy set --pwdchecksyntax=on --pwdmintokenlen=12
    如需可用设置的完整列表,请输入:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com pwpolicy set --help
  3. 启用密码策略:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com pwpolicy set --pwdlockout on

20.4.1.2. 使用 Web 控制台配置全局密码策略

使用 Web 控制台配置全局密码策略:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 打开 Database 菜单。
  4. 密码策略 菜单中,选择 Global Policy
  5. 设置全局密码策略设置。您可以在以下类别中设置参数:
    • 常规设置,如密码存储方案
    • 密码过期设置,如密码过期的时间。
    • 帐户锁定设置,例如在应锁定帐户的登录尝试次数后。
    • 密码语法设置,如最小密码长度。
    要显示参数的 cn=config 条目中的工具提示和对应属性名称,请将鼠标光标悬停在设置上。详情请查看 红帽目录服务器配置、命令和文件参考 中的参数描述。
  6. 点击 Save

20.4.2. 使用本地密码策略

与定义整个目录的设置的全局密码策略不同,本地密码策略是特定用户或子树的策略。
当精细的密码策略没有设置密码语法时,如果 nsslapd-pwpolicy-inherit-global 参数为 on,则可以从全局策略继承语法。
如果定义了 --pwpinheritglobal 选项,则 local 策略中的 passwordcheck Locator 选项设置为 OFF,并在全局策略中继承以下属性到本地策略:
  • passwordchecksyntax
  • passwordminlength
  • passwordmindigits
  • passwordminalphas
  • passwordminuppers
  • passwordminlowers
  • passwordminspecials
  • passwordmin8bit
  • passwordmaxrepeats
  • passwordmincategories
  • passwordmintokenlength

20.4.2.1. 其中目录服务器存储本地密码策略条目

当您使用 dsconf localpwp adduserdsconf localpwp addsubtree 命令时,Directory 服务器会创建一个用于存储策略属性的条目:
  • 对于子树(如 ou=body,dc=example,dc=com),添加了以下条目:
    • 在子树级别上的容器条目(nsPwPolicyContainer),用于保存子树及其所有子项的各种密码策略相关条目。例如:
      dn: cn=nsPwPolicyContainer,ou=people,dc=example,dc=com
      objectClass: top
      objectClass: nsContainer
      cn: nsPwPolicyContainer
    • 用于保存特定于子树的所有密码策略属性的实际密码策略规格条目(nsPwPolicyEntry)。例如:
      dn: cn="cn=nsPwPolicyEntry,ou=people,dc=example,dc=com",
       cn=nsPwPolicyContainer,ou=people,dc=example,dc=com
      objectclass: top
      objectclass: extensibleObject
      objectclass: ldapsubentry
      objectclass: passwordpolicy
    • 具有指向上述(nsPwPolicyEntry)条目的 pwdpolicysubentry 值的 CoS 模板条目(nsPwTemplateEntry)条目。例如:
      dn: cn="cn=nsPwTemplateEntry,ou=people,dc=example,dc=com",
       cn=nsPwPolicyContainer,ou=people,dc=example,dc=com
      objectclass: top
      objectclass: extensibleObject
      objectclass: costemplate
      objectclass: ldapsubentry
      cosPriority: 1
      pwdpolicysubentry: cn="cn=nsPwPolicyEntry,ou=people,dc=example,dc=com",
           cn=nsPwPolicyContainer,ou=people,dc=example,dc=com
    • 子树级别的 CoS 规格条目。例如:
      dn: cn=newpwdpolicy_cos,ou=people,dc=example,dc=com
      objectclass: top
      objectclass: LDAPsubentry
      objectclass: cosSuperDefinition
      objectclass: cosPointerDefinition
      cosTemplateDn: cn=cn=nsPwTemplateEntry\,ou=people\,dc=example,dc=com,
       cn=nsPwPolicyContainer,ou=people,dc=example,dc=com
      cosAttribute: pwdpolicysubentry default operational
  • 对于用户(例如,uid=user_name,ou=body,dc=example,dc=com),添加了以下条目:
    • 父级别的容器条目(nsPwPolicyContainer),用于保存用户及其所有子项的各种密码策略相关条目。例如:
      dn: cn=nsPwPolicyContainer,ou=people,dc=example,dc=com
      objectClass: top
      objectClass: nsContainer
      cn: nsPwPolicyContainer
    • 用于保存特定于用户的密码策略属性的实际密码策略规格条目(nsPwPolicyEntry)。例如:
      dn: cn="cn=nsPwPolicyEntry,uid=user_name,ou=people,dc=example,dc=com",
       cn=nsPwPolicyContainer,ou=people,dc=example,dc=com
      objectclass: top
      objectclass: extensibleObject
      objectclass: ldapsubentry
      objectclass: passwordpolicy

20.4.2.2. 配置本地密码策略

配置本地密码策略:
注意
目前,您只能使用命令行设置本地密码策略。
  1. 验证子树或用户条目是否已存在本地密码策略。例如:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com localpwp get "ou=People,dc=example,dc=com"
    Error: The policy wasn't set up for the target dn entry or it is invalid
    如果不存在本地策略,请创建一个:
    • 创建子树密码策略:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com localpwp addsubtree "ou=People,dc=example,dc=com"
    • 创建用户密码策略:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com localpwp adduser "uid=user_name,ou=People,dc=example,dc=com"
    重要
    当您创建新的本地策略时,上一命令会自动将 cn=config 条目中的 nsslapd-pwpolicy-local 参数设置为 on
    如果不应该启用本地密码策略,请手动将参数设置为 off
    dsconf -D "cn=Directory Manager" ldap://server.example.com pwpolicy set --pwdlocal off
  2. 设置本地策略属性。例如,要启用密码过期并将最长密码过期时间设置为 14 天(1209600 秒):
    • 在子树密码策略中:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com localpwp set --pwdexpire=on --pwdmaxage=1209600 "ou=People,dc=example,dc=com"
    • 在用户密码策略中:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com localpwp set --pwdexpire=on --pwdmaxage=1209600 "uid=user_name,ou=People,dc=example,dc=com"
    如需可用设置的完整列表,请输入:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com localpwp set --help