2.6. 配置基于时间的帐户锁定策略
您可以使用 Account Policy 插件配置不同的基于时间的锁定策略,例如:
2.6.1. 在最后成功登录后自动禁用帐户一定时间 复制链接链接已复制到粘贴板!
按照以下步骤配置基于时间的锁定策略,该策略在 dc=example,dc=com
条目下的激活用户,其不会登录超过 21 天。
此帐户不活动功能可以确保,例如,如果员工离开了公司,管理员是否忘记删除帐户,那么目录服务器会在一定时间后激活该帐户。
流程
启用 Account Policy 插件:
dsconf <instance_name> plugin account-policy enable
# dsconf <instance_name> plugin account-policy enable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置插件配置条目:
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
# 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 Copied! Toggle word wrap Toggle overflow 这个命令使用以下选项:
-
--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
属性存储不活跃的时间。
-
重启实例:
dsctl <instance_name> restart
# dsctl <instance_name> restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在activation 策略条目中创建帐户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow accountInactivityLimit
属性中的值在上一次登录后配置 Directory Server inactivates accounts1814400
秒(21 天)。创建 CoS 模板条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此模板条目引用帐户停用策略。
创建 CoS 定义条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此定义条目引用 CoS 模板条目,并导致
acctPolicySubentry
属性出现在每个用户条目中,值为cn=Account Inactivation Policy,dc=example,dc=com
。
验证
将用户的
lastLoginTime
属性设置为比您配置的不活跃时间旧的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 尝试以这个用户身份连接到该目录:
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 Copied! Toggle word wrap Toggle overflow 如果目录服务器拒绝访问并返回这个错误,帐户不活跃可以正常工作。
2.6.2. 在创建帐户后自动禁用帐户一定时间 复制链接链接已复制到粘贴板!
按照以下步骤,在 dc=example,dc=com
条目中配置该帐户在管理员创建后 60 天后过期。
例如,使用帐户到期功能来确保外部 worker 的帐户被锁定在创建后一定的时间。
流程
启用 Account Policy 插件:
dsconf <instance_name> plugin account-policy enable
# dsconf <instance_name> plugin account-policy enable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置插件配置条目:
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
# 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 Copied! Toggle word wrap Toggle overflow 这个命令使用以下选项:
-
--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
属性存储最长期限。
-
重启实例:
dsctl <instance_name> restart
# dsctl <instance_name> restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建帐户过期策略条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow accountInactivityLimit
属性中的值配置帐户在创建后过期5184000
秒(60 天)。创建 CoS 模板条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此模板条目引用帐户到期策略。
创建 CoS 定义条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此定义条目引用 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"
# 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 Copied! Toggle word wrap Toggle overflow 如果目录服务器拒绝访问并返回此错误,帐户到期可以正常工作。
2.6.3. 密码到期后自动禁用帐户 复制链接链接已复制到粘贴板!
按照以下步骤配置基于时间的锁定策略,该策略在 dc=example,dc=com
条目下的激活用户,其不会更改其密码超过 28 天。
前提条件
-
用户必须在其条目中设置
passwordExpirationTime
属性。
流程
启用密码过期功能:
dsconf <instance_name> config replace passwordExp=on
# dsconf <instance_name> config replace passwordExp=on
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用 Account Policy 插件:
dsconf <instance_name> plugin account-policy enable
# dsconf <instance_name> plugin account-policy enable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置插件配置条目:
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
# 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 Copied! Toggle word wrap Toggle overflow 这个命令使用以下选项:
-
--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
属性会保存帐户在上次密码更改后被激活的时间。
-
重启实例:
dsctl <instance_name> restart
# dsctl <instance_name> restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在activation 策略条目中创建帐户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow accountInactivityLimit
属性中的值配置在更改密码后,目录服务器在激活帐户2419200
秒(28 天)。创建 CoS 模板条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此模板条目引用帐户停用策略。
创建 CoS 定义条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此定义条目引用 CoS 模板条目,并导致
acctPolicySubentry
属性出现在每个用户条目中,值为cn=Account Inactivation Policy,dc=example,dc=com
。
验证
将用户的
passwordExpirationTime
属性设置为比您配置的不活跃时间旧的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 尝试以这个用户身份连接到该目录:
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 Copied! Toggle word wrap Toggle overflow 如果目录服务器拒绝访问并返回这个错误,帐户不活跃可以正常工作。
2.6.4. 在帐户不活跃和密码过期时自动禁用帐户 复制链接链接已复制到粘贴板!
在使用 checkAllStateAttrs
设置进行身份验证时,您可以同时应用帐户不活跃和密码过期。默认情况下,当插件配置条目中没有 checkAllStateAttrs
时,或者在将此参数设置为 no
时,插件会检查 state 属性 lastLoginTime
。如果条目中没有属性,则插件会检查备用 state 属性。
您可以将 main state 属性设置为不存在的属性,并在您希望插件根据 passwordExpirationtime
属性处理过期时将备用 state 属性设置为 passwordExpirationtime
。当您启用此参数时,它会检查 main state 属性,以及帐户是否微调,然后检查备用状态属性。
这与密码策略的密码过期不同,因为如果密码过期时间超过不活跃的限制,则帐户策略插件会完全禁用帐户。使用密码策略过期时,用户仍然可以登录并更改其密码。帐户策略插件完全阻止用户进行任何操作,管理员必须重置帐户。
流程
创建插件配置条目并启用设置:
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
# 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 Copied! Toggle word wrap Toggle overflow 重启服务器以载入新的插件配置:
dsctl <instance_name> restart
# dsctl <instance_name> restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告checkAllStateAttrs
设置设计为仅在 alternate state 属性设置为passwordExpiratontime
时工作。将它设置为createTimestamp
可能会导致不必要的结果,条目可能会被锁定。