20.10. 配置基于时间的帐户锁定策略


除了锁定帐户进行失败的身份验证尝试外,另一种定义帐户锁定策略的方法是将其基于帐户不活跃或帐户年龄。帐户策略插件使用 相对 时间设置来确定是否应该锁定帐户。
注意
角色或服务类可用于根据 绝对 帐户时间在激活帐户中使用。例如,可以创建 CoS,以激活在特定日期之前创建的每个帐户。
帐户策略插件需要三个配置条目:
  • 插件本身的配置条目。这会设置用于该服务器上配置的所有帐户策略的全局值。
  • 帐户策略配置条目。此条目位于用户目录中,基本上是一个模板,它被引用并应用到用户帐户条目。
  • 应用帐户策略条目的条目。用户帐户可以直接引用帐户策略,或者 CoS 或角色可用于自动将帐户策略应用到一组用户帐户。
    注意
    通过 acctPolicySubentry 属性应用帐户策略。虽然此属性可以直接添加到用户帐户,但此属性是单值 - 这意味着只能将一个帐户策略应用到该帐户。
    在大多数情况下可能会很正常。但是,一个机构可能有意创建两个帐户策略,一个用于帐户不活跃,然后根据年龄进行帐户过期。
    使用 CoS 应用帐户策略,允许将多个帐户策略用于帐户。

20.10.1. 帐户策略插件语法

帐户策略插件本身只有两个配置属性:
  • nsslapd-pluginEnabled,它设定插件是否启用或禁用。此属性默认为 off
  • nsslapd-pluginarg0,指向插件配置目录的 DN。配置条目通常是插件本身的子条目,如 cn=config,cn=Account Policy Plugin,cn=plugins,cn=config
在以前的版本中,帐户策略在两个部分定义:
  • nsslapd-pluginarg0 属性中标识的插件配置条目。这会为插件设置全局配置,用于识别帐户策略配置条目和管理用户帐户条目。这些设置适用于服务器。
    配置条目属性在 Red Hat Directory Server Configuration, Command, Command, and File Reference 中的 Account Policy Plug-in Attributes 部分中进行了描述。
  • 帐户策略配置条目。这类似于模板条目,它为帐户策略设置特定值。用户帐户 - 直接或通过 CoS 条目 - 引用此帐户策略条目。
    下表中描述了帐户策略和用户条目属性:
    Expand
    表 20.2. 帐户策略条目和用户条目属性
    属性 定义 配置或用户条目
    accountpolicy (对象类) 为在activation 或 expiration 策略中的帐户定义模板条目。 配置
    accountInactivityLimit (attribute) 在帐户被锁定前,设置帐户最后一次登录时间(以秒为单位)的时间(以秒为单位)。 配置
    acctPolicySubentry (attribute) 标识属于帐户策略的任何条目(特别是帐户锁定策略)。此属性的值指向应用到该条目的帐户策略的 DN。 User
    createTimestamp (operational 属性) 包含最初创建的日期和时间。 User
    lastLoginTime (operational 属性) 包含给定帐户向目录进行身份验证的时间戳。 User

20.10.2. 帐户身份和帐户过期

帐户策略 插件允许您设置:
  • 帐户过期:帐户在创建帐户后被禁用一定时间。
  • 帐户不活跃:帐户在最后一次成功登录后被禁用了一定时间。这可让您自动禁用未使用的帐户。
禁用的帐户无法再登录。
设置 帐户策略 插件:
  1. 启用帐户策略插件:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enable
    Copy to Clipboard Toggle word wrap
  2. 设置插件配置条目:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy set --config-entry="cn=config,cn=Account Policy Plugin,cn=plugins,cn=config"
    Copy to Clipboard Toggle word wrap
  3. 创建插件配置条目:
    • 要将 CoS 或角色与帐户策略搭配使用,请将 alwaysRecordLogin 值设置为 yes。这意味着每个条目都有登录时间,即使它没有 acctPolicySubentry 属性。
    • 将用于帐户策略评估的 primary 属性设置为 stateAttrName 的值。对于帐户不活跃,请使用 lastLoginTime 属性。对于简单的帐户过期时间,请使用 createTimestamp 属性。
    • 您可以在 altStateAttrName 中设置二级属性,该属性如果 stateAttrName 中定义的主属性不存在,则会检查。如果没有将属性指定为替代默认值 createTimestamp
      警告
      如果 primary 属性的值设置为 lastLoginTimealtStateAttrName to createTimestamp,则现有环境中的用户会在其帐户没有 lastLoginTime 属性且 createTimestamp 比配置的不活跃周期旧的时锁定。
      要实现这个情况,请将 alternative 属性设置为 1.1。这一显式状态将 no 属性用作替代方案。lastLoginTime 属性将在用户下次登录时自动创建。
    • 将 属性设置为,以显示哪个条目应用了一个帐户策略(acctPolicySubentry)。
    • 在帐户策略中设置属性,它用于设置实际超时时间,以秒为单位(accountInactivityLimit)。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy config-entry set "cn=config,cn=Account Policy Plugin,cn=plugins,cn=config" --always-record-login yes --state-attr lastLoginTime --alt-state-attr 1.1 --spec-attr acctPolicySubentry --limit-attr accountInactivityLimit
    Copy to Clipboard Toggle word wrap
  4. 重启服务器以载入新的插件配置:
    # dsctl instance_name restart
    Copy to Clipboard Toggle word wrap
  5. 定义帐户策略:
    # ldapadd -a -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
    
    dn: cn=Account Inactivation Policy,dc=example,dc=com
    
    objectClass: top
    objectClass: ldapsubentry
    objectClass: extensibleObject
    objectClass: accountpolicy
    accountInactivityLimit: 2592000
    cn: Account Inactivation Policy
    Copy to Clipboard Toggle word wrap
  6. 创建服务模板条目的类:
    # ldapadd -a -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
    
    dn: cn=TempltCoS,dc=example,dc=com
    
    objectClass: top
    objectClass: ldapsubentry
    objectClass: extensibleObject
    objectClass: cosTemplate
    acctPolicySubentry: cn=Account Inactivation Policy,dc=example,dc=com
    Copy to Clipboard Toggle word wrap
    帐户策略可以直接在用户条目上定义,而不必使用 CoS。但是,使用 CoS 允许为多个条目可靠地应用和更新帐户策略,并允许将多个策略应用到条目。
  7. 创建服务定义条目的类。CoS 的受管条目是帐户策略属性 acctPolicySubentry。这个示例将 CoS 应用到整个目录树:
    # ldapadd -a -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
    
    dn: cn=DefnCoS,dc=example,dc=com
    
    objectClass: top
    objectClass: ldapsubentry
    objectclass: cosSuperDefinition
    objectclass: cosPointerDefinition
    cosTemplateDn: cn=TempltCoS,dc=example,dc=com
    cosAttribute: acctPolicySubentry default operational-default
    Copy to Clipboard Toggle word wrap
目录服务器允许您配置帐户策略,该策略在密码过期后禁用帐户特定时间。禁用帐户无法再登录。
要设置此配置,请按照 第 20.10.2 节 “帐户身份和帐户过期” 中的流程操作。但是,在配置插件配置条目时,请使用以下设置:
dn: cn=config,cn=Account Policy Plugin,cn=plugins,cn=config

objectClass: top
objectClass: extensibleObject
cn: config
alwaysrecordlogin: yes
stateAttrName: non_existent_attribute
altStateAttrName: passwordExpirationTime
specattrname: acctPolicySubentry
limitattrname: accountInactivityLimit
Copy to Clipboard Toggle word wrap
此配置在 stateAttrName 参数中使用 dummy 值。因此,只有 altStateAttrName 参数中设置的 passwordExpirationTime 属性才会在帐户过期时计算。
要额外在用户条目的 lastLoginTime 属性中记录最后一次成功登录的时间,请设置:
dn: cn=config,cn=Account Policy Plugin,cn=plugins,cn=config

alwaysRecordLoginAttr: lastLoginTime
Copy to Clipboard Toggle word wrap
使用这个配置,如果用户的 passwordExpirationTime 属性和 accountInactivityLimit 参数的值中设定的时间总和,则帐户会自动禁用。使用这个配置,如果用户的 passwordExpirationTime 属性和 accountInactivityLimit 参数中的值总和超过 alwaysRecordLoginAttr 属性的时间,则会自动禁用帐户,因为最新更新 alwaysRecordLoginAttr 属性。
还可以使用帐户策略插件来跟踪用户登录时间,而无需 设置过期时间或不活跃期限。在这种情况下,帐户策略插件用于将 lastLoginTime 属性添加到用户条目中,但不需要设置其他策略规则。
在这种情况下,将帐户策略插件设置为正常,以跟踪登录时间。但是,不要创建一个 CoS 来对要跟踪的登录信息执行操作。
  1. 启用帐户策略插件:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enable
    Copy to Clipboard Toggle word wrap
  2. 创建插件配置条目以记录登录时间:
    • alwaysRecordLogin 值设置为 yes,以便每个条目都有登录时间。
    • lastLoginTime 属性设置为用于帐户策略的属性(stateattrname)。
    • 将 属性设置为,以显示哪个条目应用了一个帐户策略(acctPolicySubentry)。
    • 在帐户策略中设置属性,用于设置实际的超时时间,以秒为单位(accountInactivityLimit)。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy config-entry set "cn=config,cn=Account Policy Plugin,cn=plugins,cn=config" --always-record-login yes --state-attr lastLoginTime --alt-state-attr createTimestamp --spec-attr acctPolicySubentry --limit-attr accountInactivityLimit
    Copy to Clipboard Toggle word wrap
  3. 重启服务器以载入新的插件配置:
    # dsctl instance_name restart
    Copy to Clipboard Toggle word wrap

20.10.5. 解锁不活跃帐户

如果因为帐户达到不活跃的限制而被锁住,您可以使用以下方法之一重新激活它:
  • 使用 dsidm 工具:
    # dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" account unlock "uid=example"
    Copy to Clipboard Toggle word wrap
  • lastLoginTime 属性重置为当前时间戳来手动:
    # ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
    
    dn: uid=example,ou=people,dc=example,dc=com
    changetype: modify
    replace: lastLoginTime
    lastLoginTime: 20210901000000Z
    Copy to Clipboard Toggle word wrap
    lastLoginTime 属性将其值存储在 GMT/UTC 时间(Zulu 时区)中,由附加到时间戳的 Z 表示。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat