5.3. 在密码过期后自动禁用帐户一定时间


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

先决条件

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

流程

  1. 启用密码过期功能:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace passwordExp=ondsconf -D "cn=Directory Manager" ldap://server.example.com config replace passwordExp=ondsconf -D "cn=Directory Manager" ldap://server.example.com config replace passwordExp=ondsconf -D "cn=Directory Manager" ldap://server.example.com config replace passwordExp=ondsconf -D "cn=Directory Manager" ldap://server.example.com config replace passwordExp=on
    Copy to Clipboard Toggle word wrap
  2. 启用帐户策略插件:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enabledsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enabledsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enabledsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enabledsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enable
    Copy to Clipboard Toggle word wrap
  3. 配置插件配置条目:

    # 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 --always-record-login-attr lastLoginTime --state-attr non_existent_attribute --alt-state-attr passwordExpirationTime --spec-attr acctPolicySubentry --limit-attr accountInactivityLimitdsconf -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 --always-record-login-attr lastLoginTime --state-attr non_existent_attribute --alt-state-attr passwordExpirationTime --spec-attr acctPolicySubentry --limit-attr accountInactivityLimitdsconf -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 --always-record-login-attr lastLoginTime --state-attr non_existent_attribute --alt-state-attr passwordExpirationTime --spec-attr acctPolicySubentry --limit-attr accountInactivityLimitdsconf -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 --always-record-login-attr lastLoginTime --state-attr non_existent_attribute --alt-state-attr passwordExpirationTime --spec-attr acctPolicySubentry --limit-attr accountInactivityLimitdsconf -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 --always-record-login-attr lastLoginTime --state-attr non_existent_attribute --alt-state-attr passwordExpirationTime --spec-attr acctPolicySubentry --limit-attr accountInactivityLimitdsconf -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 --always-record-login-attr lastLoginTime --state-attr non_existent_attribute --alt-state-attr passwordExpirationTime --spec-attr acctPolicySubentry --limit-attr accountInactivityLimitdsconf -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 --always-record-login-attr lastLoginTime --state-attr non_existent_attribute --alt-state-attr passwordExpirationTime --spec-attr acctPolicySubentry --limit-attr accountInactivityLimitdsconf -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 --always-record-login-attr lastLoginTime --state-attr non_existent_attribute --alt-state-attr passwordExpirationTime --spec-attr acctPolicySubentry --limit-attr accountInactivityLimitdsconf -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 --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 :启用登录时间的日志记录。这需要使用带帐户策略的类服务(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 restartdsctl instance_name restartdsctl instance_name restart
    Copy to Clipboard Toggle word wrap
  5. 创建激活策略条目的帐户:

    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -xldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -xldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -xldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -xldapadd -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 -xldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -xldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -xldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -xldapadd -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 -xldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -xldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -xldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -xldapadd -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" -Wldapmodify -H ldap://server.example.com -x -D "cn=Directory Manager" -Wldapmodify -H ldap://server.example.com -x -D "cn=Directory Manager" -Wldapmodify -H ldap://server.example.com -x -D "cn=Directory Manager" -Wldapmodify -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"ldapsearch -H ldap://server.example.com -x -D "uid=example,ou=People,dc=example,dc=com" -W -b "dc=example,dc=com"ldapsearch -H ldap://server.example.com -x -D "uid=example,ou=People,dc=example,dc=com" -W -b "dc=example,dc=com"ldapsearch -H ldap://server.example.com -x -D "uid=example,ou=People,dc=example,dc=com" -W -b "dc=example,dc=com"ldapsearch -H ldap://server.example.com -x -D "uid=example,ou=People,dc=example,dc=com" -W -b "dc=example,dc=com"ldapsearch -H ldap://server.example.com -x -D "uid=example,ou=People,dc=example,dc=com" -W -b "dc=example,dc=com"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

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat