我希望在 openldap 中实施一个新的帐户策略,允许管理员设置用户帐户的到期日期。但是,我在对象类中找不到任何相关属性。
这与 pwdMaxAge 等密码属性无关。此政策的用途是订阅服务。一旦用户订阅服务器一段时间,管理员将设置订阅结束的帐户到期日期。用户在到期日之前通过身份验证,并且在到期日之后将无法通过身份验证。
在openldap中可以这样做吗?我谷歌发现微软的 ActiveDirectory 有 AccountExpirationDate 属性。
OpenLDAP 或它的覆盖(甚至在contrib/
)中没有直接支持帐户过期。
Howard Chu建议为此使用 ppolicy 的pwdMaxAge,它可以工作,但我发现这不太理想:如果您已经在使用 ppolicy 来过期密码(除了过期帐户),它将与这些设置冲突如果您配置了宽限登录(理智的做法),用户可以更改他的密码,从而重置到期计时器。
因此,似乎实现这一点的最佳方法(不是一个好方法)是运行一个外部任务,将(ppolicy 属性)pwdAccountLockedTime设置为指示手动锁定帐户的幻数,该帐户无法由用户解锁.
pwdAccountLockedTime
此属性包含用户帐户被锁定的时间。如果帐户已被锁定,则密码可能不再用于对目录的用户进行身份验证。如果pwdAccountLockedTime设置为000001010000Z,则用户的帐户已被永久锁定,只能由管理员解锁。请注意,帐户锁定仅在pwdLockout密码策略属性设置为“ TRUE ”时生效。
这个外部任务(很可能是一个 cronjob)可以这样实现,即它在循环遍历用户记录时从用户记录上的自定义属性(例如expirationTime )读取到期日期/时间。这样,您可以将过期时间/日期存储在用户记录中,但当然锁定完全依赖于这个外部任务的运行。
或者您可以编写自己的叠加层。
查看密码策略扩展。从 OpenLDAP 2.3 开始支持它。您可能需要编写一些代码来实现所需的扩展请求/响应控件。
如果您使用的是 OpenLDAP,则可以使用动态对象覆盖。objectClass=dynamicObject
在创建账号时添加,并entryTTL
通过动态对象刷新请求设置一个合适的。
如果shadowExpire
用户帐户属于类型,则使用shadowAccount
无需详细说明 - 看看上面提到的 PPolicy 覆盖。有用。你是对的,没有像 AD 那样的“帐户过期时间”。
一种解决方案是运行一个脚本来计算帐户的年龄并添加/修改用户属性 pwdPolicySubentry 并将其设置为策略的 DN,该策略使任何 1 秒前的密码过期并且不允许用户更改密码.
没有客户能解决这个问题,但用户条目几乎完好无损。