如何在openldap中设置帐户到期日

如何在openldap中设置帐户到期日,ldap,openldap,Ldap,Openldap,我希望在openldap中实现一个新的帐户策略,允许管理员设置用户帐户的到期日期。但是,我在对象类中找不到任何相关属性 这与密码属性(如pwdMaxAge)无关。此策略用于订阅服务。用户订阅服务器一段时间后,管理员将设置订阅结束的帐户到期日期。如果用户在到期日之前通过身份验证,则在到期日之后将无法通过身份验证 在openldap中可以这样做吗?我在google上搜索发现Microsoft的ActiveDirectory具有AccountExpirationDate属性。查看密码策略扩展。Open

我希望在openldap中实现一个新的帐户策略,允许管理员设置用户帐户的到期日期。但是,我在对象类中找不到任何相关属性

这与密码属性(如pwdMaxAge)无关。此策略用于订阅服务。用户订阅服务器一段时间后,管理员将设置订阅结束的帐户到期日期。如果用户在到期日之前通过身份验证,则在到期日之后将无法通过身份验证


在openldap中可以这样做吗?我在google上搜索发现Microsoft的ActiveDirectory具有AccountExpirationDate属性。

查看密码策略扩展。OpenLDAP 2.3以后支持它。您可能需要编写一些代码来实现所需的扩展请求/响应控制


如果您使用的是OpenLDAP,那么可以使用动态对象覆盖。创建帐户时添加
objectClass=dynamicObject
,并通过动态对象刷新请求设置适当的
entryTTL

无需详细说明-查看上面提到的PPolicy覆盖。它起作用了。您是对的,没有像广告中那样的“帐户过期时间”

一种解决方案是运行一个脚本,该脚本计算帐户的年龄,并添加/修改用户属性pwdPolicySubentry,并将其设置为策略的DN,该策略使任何密码过期1秒,并且不允许用户更改密码


没有客户端可以绕过这一点,但用户条目几乎保持不变。

OpenLDAP或其覆盖层(甚至在
contrib/
中)不直接支持帐户过期

Howard Chu使用ppolicy的pwdMaxAge来实现这一点,这是可以实现的,但我发现这并不理想:如果您已经在使用ppolicy使密码过期(除了使帐户过期),它将与这些设置冲突,如果您配置了grace登录(明智的做法),用户可以更改密码,从而重置过期计时器

因此,实现这一点的方法似乎是运行一个外部任务,将(ppolicy属性)pwdAccountLockedTime设置为表示手动锁定的帐户的幻数,用户无法解锁该帐户

pwdAccountLockedTime

此属性包含用户帐户被锁定的时间。如果帐户已被锁定,则密码可能不再用于对目录中的用户进行身份验证。如果pwdAccountLockedTime设置为000001010000Z,则用户帐户已被永久锁定,只能由管理员解锁。请注意,只有当密码策略属性设置为“TRUE”时,帐户锁定才会生效

此外部任务(最有可能是cronjob)的实现方式是,它在用户记录上循环时从自定义属性(例如,expirationTime)读取过期日期/时间。通过这种方式,您可以在用户记录上存储过期时间/日期,但当然锁定完全依赖于此外部任务的运行


或者您可以编写自己的覆盖。

如果用户帐户类型为

则使用
shadowExpire
,无需所有这些。只需将
pwdAccountLockedTime
设置为密码策略草案中指定的零值。您可以为此使用过期对象。