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


您可以使用 Account Policy 插件配置不同的基于时间的锁定策略,例如:

按照以下步骤配置基于时间的锁定策略,该策略在 dc=example,dc=com 条目下的激活用户,其不会登录超过 21 天。

此帐户不活动功能可以确保,例如,如果员工离开了公司,管理员是否忘记删除帐户,那么目录服务器会在一定时间后激活该帐户。

流程

  1. 启用 Account Policy 插件:

    # dsconf <instance_name> plugin account-policy enable
    Copy to Clipboard Toggle word wrap
  2. 配置插件配置条目:

    # dsconf <instance_name> 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

    这个命令使用以下选项:

    • --always-record-login yes :启用登录时间的日志。这需要使用 Service (CoS)或具有帐户策略的角色,即使它没有设置 acctPolicySubentry 属性。
    • --state-attr lastLoginTime :配置 Account Policy 插件将最后一个登录时间保存在用户的 lastLoginTime 属性中。
    • --Alt-state-attr 1.1 :禁用使用 alternative 属性来检查主属性是否不存在。默认情况下,Directory 服务器使用 createTimestamp 属性作为替代方案。但是,如果目录服务器没有设置 lastLoginTime 属性,并且 createTimestamp 比配置的不活跃期旧,则目录服务器会自动注销现有用户。禁用 alternative 属性会导致 Directory 服务器在下次登录时自动将 lastLoginTime 属性添加到用户条目中。
    • --spec-attr acctPolicySubentry: Configures Directory Server 将策略应用到设置了 acctPolicySubentry 属性的条目。您可以在 CoS 条目中配置此属性。
    • --limit-attr accountInactivityLimit: 配置 account inactivation 策略条目中的 accountInactivityLimit 属性存储不活跃的时间。
  3. 重启实例:

    # dsctl <instance_name> restart
    Copy to Clipboard Toggle word wrap
  4. 在activation 策略条目中创建帐户:

    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=Account Inactivation Policy,dc=example,dc=com
    objectClass: top
    objectClass: ldapsubentry
    objectClass: extensibleObject
    objectClass: accountpolicy
    accountInactivityLimit: 1814400
    cn: Account Inactivation Policy
    Copy to Clipboard Toggle word wrap

    accountInactivityLimit 属性中的值在上一次登录后配置 Directory Server inactivates accounts 1814400 秒(21 天)。

  5. 创建 CoS 模板条目:

    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=TemplateCoS,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

    此模板条目引用帐户停用策略。

  6. 创建 CoS 定义条目:

    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=DefinitionCoS,dc=example,dc=com
    objectClass: top
    objectClass: ldapsubentry
    objectclass: cosSuperDefinition
    objectclass: cosPointerDefinition
    cosTemplateDn: cn=TemplateCoS,dc=example,dc=com
    cosAttribute: acctPolicySubentry default operational-default
    Copy to Clipboard Toggle word wrap

    此定义条目引用 CoS 模板条目,并导致 acctPolicySubentry 属性出现在每个用户条目中,值为 cn=Account Inactivation Policy,dc=example,dc=com

验证

  1. 将用户的 lastLoginTime 属性设置为比您配置的不活跃时间旧的值:

    # ldapmodify -H ldap://server.example.com -x -D "cn=Directory Manager" -W
    
    dn: uid=example,ou=People,dc=example,dc=com
    changetype: modify
    replace: lastLoginTime
    lastLoginTime: 20210101000000Z
    Copy to Clipboard Toggle word wrap
  2. 尝试以这个用户身份连接到该目录:

    # ldapsearch -H ldap://server.example.com -x -D "uid=example,ou=People,dc=example,dc=com" -W -b "dc=example,dc=com"
    ldap_bind: Constraint violation (19)
    	additional info: Account inactivity limit exceeded. Contact system administrator to reset.
    Copy to Clipboard Toggle word wrap

    如果目录服务器拒绝访问并返回这个错误,帐户不活跃可以正常工作。

2.6.2. 在创建帐户后自动禁用帐户一定时间

按照以下步骤,在 dc=example,dc=com 条目中配置该帐户在管理员创建后 60 天后过期。

例如,使用帐户到期功能来确保外部 worker 的帐户被锁定在创建后一定的时间。

流程

  1. 启用 Account Policy 插件:

    # dsconf <instance_name> plugin account-policy enable
    Copy to Clipboard Toggle word wrap
  2. 配置插件配置条目:

    # dsconf <instance_name> plugin account-policy config-entry set "cn=config,cn=Account Policy Plugin,cn=plugins,cn=config" --always-record-login yes --state-attr createTimestamp --alt-state-attr 1.1 --spec-attr acctPolicySubentry --limit-attr accountInactivityLimit
    Copy to Clipboard Toggle word wrap

    这个命令使用以下选项:

    • --always-record-login yes :启用登录时间的日志。这需要使用 Service (CoS)或具有帐户策略的角色,即使它没有设置 acctPolicySubentry 属性。
    • --state-attr createTimestamp: 配置 Account Policy 插件使用 createTimestamp 属性的值来计算帐户是否过期。
    • --Alt-state-attr 1.1 :禁用使用 alternative 属性来检查主属性是否不存在。
    • --spec-attr acctPolicySubentry: Configures Directory Server 将策略应用到设置了 acctPolicySubentry 属性的条目。您可以在 CoS 条目中配置此属性。
    • --limit-attr accountInactivityLimit: 配置 account expiration 策略条目中的 accountInactivityLimit 属性存储最长期限。
  3. 重启实例:

    # dsctl <instance_name> restart
    Copy to Clipboard Toggle word wrap
  4. 创建帐户过期策略条目:

    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=Account Expiration Policy,dc=example,dc=com
    objectClass: top
    objectClass: ldapsubentry
    objectClass: extensibleObject
    objectClass: accountpolicy
    accountInactivityLimit: 5184000
    cn: Account Expiration Policy
    Copy to Clipboard Toggle word wrap

    accountInactivityLimit 属性中的值配置帐户在创建后过期 5184000 秒(60 天)。

  5. 创建 CoS 模板条目:

    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=TemplateCoS,dc=example,dc=com
    objectClass: top
    objectClass: ldapsubentry
    objectClass: extensibleObject
    objectClass: cosTemplate
    acctPolicySubentry: cn=Account Expiration Policy,dc=example,dc=com
    Copy to Clipboard Toggle word wrap

    此模板条目引用帐户到期策略。

  6. 创建 CoS 定义条目:

    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=DefinitionCoS,dc=example,dc=com
    objectClass: top
    objectClass: ldapsubentry
    objectclass: cosSuperDefinition
    objectclass: cosPointerDefinition
    cosTemplateDn: cn=TemplateCoS,dc=example,dc=com
    cosAttribute: acctPolicySubentry default operational-default
    Copy to Clipboard Toggle word wrap

    此定义条目引用 CoS 模板条目,并导致 acctPolicySubentry 属性出现在每个用户条目中,值为 cn=Account Expiration Policy,dc=example,dc=com

验证

  • 尝试以存储在 dc=example,dc=com 条目中的用户身份连接到目录,其 createTimestamp 属性设为超过 60 天前的值:

    # ldapsearch -H ldap://server.example.com -x -D "uid=example,dc=example,dc=com" -W -b "dc=example,dc=com"
    ldap_bind: Constraint violation (19)
    	additional info: Account inactivity limit exceeded. Contact system administrator to reset.
    Copy to Clipboard Toggle word wrap

    如果目录服务器拒绝访问并返回此错误,帐户到期可以正常工作。

2.6.3. 密码到期后自动禁用帐户

按照以下步骤配置基于时间的锁定策略,该策略在 dc=example,dc=com 条目下的激活用户,其不会更改其密码超过 28 天。

前提条件

  • 用户必须在其条目中设置 passwordExpirationTime 属性。

流程

  1. 启用密码过期功能:

    # dsconf <instance_name> config replace passwordExp=on
    Copy to Clipboard Toggle word wrap
  2. 启用 Account Policy 插件:

    # dsconf <instance_name> plugin account-policy enable
    Copy to Clipboard Toggle word wrap
  3. 配置插件配置条目:

    # dsconf <instance_name> plugin account-policy config-entry set "cn=config,cn=Account Policy Plugin,cn=plugins,cn=config" --always-record-login yes --always-record-login-attr lastLoginTime --state-attr non_existent_attribute --alt-state-attr passwordExpirationTime --spec-attr acctPolicySubentry --limit-attr accountInactivityLimit
    Copy to Clipboard Toggle word wrap

    这个命令使用以下选项:

    • --always-record-login yes :启用登录时间的日志。这需要使用 Service (CoS)或具有帐户策略的角色,即使它没有设置 acctPolicySubentry 属性。
    • --always-record-login-attr lastLoginTime :配置 Account Policy 插件将最后的登录时间保存在用户的 lastLoginTime 属性中。
    • --state-attr non_existent_attribute :将用于评估帐户策略的主时间属性设为不存在的 dummy 属性名称。
    • --Alt-state-attr 'passwordExpirationTime :配置插件以使用 passwordExpirationTime 属性作为要检查的替代属性。
    • --spec-attr acctPolicySubentry: Configures Directory Server 将策略应用到设置了 acctPolicySubentry 属性的条目。您可以在 CoS 条目中配置此属性。
    • --limit-attr accountInactivityLimit :配置帐户策略条目中的 accountInactivityLimit 属性会保存帐户在上次密码更改后被激活的时间。
  4. 重启实例:

    # dsctl <instance_name> restart
    Copy to Clipboard Toggle word wrap
  5. 在activation 策略条目中创建帐户:

    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=Account Inactivation Policy,dc=example,dc=com
    objectClass: top
    objectClass: ldapsubentry
    objectClass: extensibleObject
    objectClass: accountpolicy
    accountInactivityLimit: 2419200
    cn: Account Inactivation Policy
    Copy to Clipboard Toggle word wrap

    accountInactivityLimit 属性中的值配置在更改密码后,目录服务器在激活帐户 2419200 秒(28 天)。

  6. 创建 CoS 模板条目:

    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=TemplateCoS,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

    此模板条目引用帐户停用策略。

  7. 创建 CoS 定义条目:

    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=DefinitionCoS,dc=example,dc=com
    objectClass: top
    objectClass: ldapsubentry
    objectclass: cosSuperDefinition
    objectclass: cosPointerDefinition
    cosTemplateDn: cn=TemplateCoS,dc=example,dc=com
    cosAttribute: acctPolicySubentry default operational-default
    Copy to Clipboard Toggle word wrap

    此定义条目引用 CoS 模板条目,并导致 acctPolicySubentry 属性出现在每个用户条目中,值为 cn=Account Inactivation Policy,dc=example,dc=com

验证

  1. 将用户的 passwordExpirationTime 属性设置为比您配置的不活跃时间旧的值:

    # ldapmodify -H ldap://server.example.com -x -D "cn=Directory Manager" -W
    
    dn: uid=example,ou=People,dc=example,dc=com
    changetype: modify
    replace: passwordExpirationTime
    passwordExpirationTime: 20210101000000Z
    Copy to Clipboard Toggle word wrap
  2. 尝试以这个用户身份连接到该目录:

    # ldapsearch -H ldap://server.example.com -x -D "uid=example,ou=People,dc=example,dc=com" -W -b "dc=example,dc=com"
    ldap_bind: Constraint violation (19)
    	additional info: Account inactivity limit exceeded. Contact system administrator to reset.
    Copy to Clipboard Toggle word wrap

    如果目录服务器拒绝访问并返回这个错误,帐户不活跃可以正常工作。

在使用 checkAllStateAttrs 设置进行身份验证时,您可以同时应用帐户不活跃和密码过期。默认情况下,当插件配置条目中没有 checkAllStateAttrs 时,或者在将此参数设置为 no 时,插件会检查 state 属性 lastLoginTime。如果条目中没有属性,则插件会检查备用 state 属性。

您可以将 main state 属性设置为不存在的属性,并在您希望插件根据 passwordExpirationtime 属性处理过期时将备用 state 属性设置为 passwordExpirationtime。当您启用此参数时,它会检查 main state 属性,以及帐户是否微调,然后检查备用状态属性。

这与密码策略的密码过期不同,因为如果密码过期时间超过不活跃的限制,则帐户策略插件会完全禁用帐户。使用密码策略过期时,用户仍然可以登录并更改其密码。帐户策略插件完全阻止用户进行任何操作,管理员必须重置帐户。

流程

  1. 创建插件配置条目并启用设置:

    # dsconf <instance_name> 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 --check-all-state-attrs yes
    Copy to Clipboard Toggle word wrap
  2. 重启服务器以载入新的插件配置:

    # dsctl <instance_name> restart
    Copy to Clipboard Toggle word wrap
    警告

    checkAllStateAttrs 设置设计为仅在 alternate state 属性设置为 passwordExpiratontime 时工作。将它设置为 createTimestamp 可能会导致不必要的结果,条目可能会被锁定。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat