如何禁用 LDAP 帐户?

如何禁用 LDAP 帐户?

LDAP 使用 posixAccount 模式和相关属性,我想知道是否有一种标准化的方法来禁用帐户。重新启用帐户显然应该重新启用以前的密码。

我知道passwd --lock在加密密码前面添加了一个感叹号/etc/passwd。相同的约定是否适用于 LDAP 条目的 userPasswd 字段?

更新:我知道底层的 PAM/NSS,我的问题专门针对 LDAP 服务器。一旦帐户被锁定,我希望用户无法打开到 LDAP 服务器本身的经过身份验证的连接(使用他自己的凭据)。这是因为一些服务使用成功的经过身份验证的 LDAP 连接作为简单的身份验证机制,而不使用 PAM 来完成此任务(这在 Web 界面中很常见)。

答案1

你可能有兴趣尝试slapo政策(密码策略覆盖),如建议的那样这里. 这确实是一种标准,但对于您要做的事情来说,这可能有点过头了。具体来说,有趣的属性是

密码账户锁定时间

此属性包含用户帐户被锁定的时间。如果帐户已被锁定,则密码可能不再用于向目录验证用户身份。如果 pwdAccountLockedTime 设置为 000001010000Z,则用户帐户已被永久锁定,只能由管理员解锁。

答案2

呵呵。

Unix/Linux 和标准化的做事方式。你真是个有趣的小伙子。我知道,我知道,在很多情况下,做事都有标准的方式,但 LDAP 肯定不是其中之一。LDAP 与 Perl 的座右铭“有多种方法可以做”押韵。

密码文件 /etc/passwd(或者,/etc/shadow准确地说,它将起作用。您的系统使用 PAM(用于身份验证)和 NSS 库(用于名称查找)来解析帐户信息,并且对于用户空间应用程序,只要结果是标准格式,则结果是来自 pam_ldap、pam_mysql、nss_files、nss_bdb、nss_mysql、nss_ldap 还是其他来源,都是透明的。

因此,当谈到 LDAP 时...

  • 有些人喜欢利用ldap修改
  • 其他人使用图形客户端,例如格奇或者亮度
  • 其他人使用 Perl 和 Net::LDAP 或其他脚本语言及其 LDAP 绑定
  • 其他人使用PHPMyAdmin和类似的 Web 界面

您喜欢哪种方式?如果使用 passwd 命令,则只需将系统与 pam_ldap 和 nss_ldap 挂钩即可。然后所有熟悉的实用程序将继续照常工作。

答案3

没有标准的方法,但是有几种方法可以实现这一点,每种方法都是 ldap.conf(或 pam-ldap.conf,取决于您的发行版及其 pam_ldap 构建时设置)中的配置选项:

pam_filter:将自定义过滤器与 LDAP 中表示非活动帐户的属性一起使用。

pam_check_host_attr:pam_ldap 将检查用户对象上是否有匹配的“主机”属性。如果以这种方式实现,则如果用户能够登录,则可以将主机名从此属性中删除/添加。这不会影响他的密码。

pam_check_service_attr:尚未使用过,但其工作方式应与 pam_check_host_attr 类似。

答案4

您说您使用 posixAccount 模式 (RFC 2307)。它附带解释建议,但即使您说某些服务不遵循它:

“有多种服务使用与 LDAP 的成功认证连接作为简单的认证机制”

因此:无论您的服务做什么都已经超出了标准,所以不需要继续寻找标准。(RFC 2307 不建议这样做)。

然而,您的(某些)服务所做的并不罕见(?)而且非常合理:使用 LDAP 中的绑定操作来测试某些给定的凭据是否“有效”。您甚至可以通过不向任何 LDAP 客户端透露 userPassword 属性来强制执行这种类型的集中身份验证。也就是说,没有合理的 posixAccount 消费实现可以使用缺失的属性来成功验证任何人,不是吗?

以及如何禁用 LDAP poxisAccount 的成功绑定操作在服务器中是一个“私人”服务器配置问题,我猜不是标准中需要讨论的问题。

如果您对服务器本身(或可能多个服务器本身)没有控制权,而只能控制其中的数据,那么将密码(哈希)可逆地破坏为不可匹配的内容的技巧可能会奏效。

但请注意,正如 Lasse Kliemann 所提到的,一些 LDAP 服务器具有灵活的匹配规则:将 userPassword 字段从 更改{ssha}asdasdfasdf!{ssha}asdadsfasdf可能会导致他们相信后者是纯文本密码... 如果遇到这种糟糕的配置,{ssha}xasdadsfasdf应该这样做。阅读代码以确保无误。;-)

相关内容