20.8. 检查无密码访问的帐户可用性
大多数时间,目录服务器返回关于用户帐户的身份验证信息,客户端以该用户身份实际绑定(或尝试绑定)。绑定尝试需要某种形式的用户凭证,通常是密码或证书。虽然目录服务器允许未经身份验证的绑定和匿名绑定,但这些绑定都不会返回任何用户帐户信息。
在某些情况下,客户端需要有关用户帐户的信息 - 特别是是否应该允许帐户进行身份验证 - 为了执行其他操作,但客户端没有或对目录服务器中的用户帐户使用任何凭证。基本上,客户端需要执行一个凭据的、没有验证的绑定操作来检索用户帐户信息(包括密码过期信息(如果帐户有密码)。
这可以通过通过 Account Usability Extension Control 来通过 ldapsearch 来完成。此控制的工作方式如同为给定用户执行经过身份验证的绑定操作,并返回该用户的帐户状态,但不实际绑定到服务器。这允许客户端确定该帐户是否可用于登录,然后将该帐户信息传递给另一个应用,如 PAM。
例如,使用 Account Usability Extension Control 可以允许系统将 Directory 服务器用作其身份后端来存储用户数据,但使用免密码身份验证方法,如智能卡或 SSH 密钥,其中身份验证操作是在目录服务器之外执行。
20.8.1. 使用帐户 Usability Extension Control 搜索条目
Account Usability Extension Control 是 ldapsearch 的扩展。它为每个返回的条目返回一个额外行,它提供了帐户状态以及有关该帐户密码策略的一些信息。然后,客户端或应用程序可以使用该状态来评估尝试为该用户帐户进行的身份验证尝试。基本上,这将控制用户是否应该被允许进行身份验证,而无需执行身份验证操作。
注意
Directory 服务器使用的 OpenLDAP 工具不支持 Account Usability Extension Control。可以使用其他 LDAP 工具,如 OpenDS,或支持控制的其他客户端。
例如,使用 OpenDS 工具,可以使用带有控制 OID (1.3.6.1.4.1.42.2.27.9.5.8)的
-J
来指定控制,或使用 accountusability:true
标志来指定控制:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub-J "accountusability:true"
"(objectclass=*)" # Account Usability Response Control# The account is usable
dn: dc=example,dc=com objectClass: domain objectClass: top dc: example ...
这也可以针对特定条目运行:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "uid=bjensen,ou=people,dc=example,dc=com" -s base-J "accountusability:true"
"(objectclass=*)" # Account Usability Response Control# The account is usable
dn: uid=bjensen,ou=people,dc=example,dc=com ...
注意
默认情况下,只有目录管理器可以使用 Account Usability Extension Control。要允许其他用户使用 Account Usability Extension Control,请在 cn=features 下支持的控制条目上设置 ACI。请参阅 第 20.8.2 节 “更改用户可以执行帐户的搜索功能”。
根据帐户的实际状态,控制会返回不同的消息,以及(如果用户有密码)用户帐户的密码策略设置。
帐户状态 | 控制结果消息 |
---|---|
带有有效密码的活跃帐户 | 帐户可用 |
没有设置密码的活动帐户 | 帐户可用 |
过期的密码 | 密码过期 |
修改帐户的密码策略 | 密码过期 |
帐户被锁定,没有锁定持续时间 | 密码重置 |
帐户被锁定,有一个锁定持续时间 | 自动解锁账户的时间(以秒为单位) |
在第一次登录时应重置帐户的密码 | 密码重置 |
密码已过期,并允许宽限期 | 允许密码过期并允许 X 宽限期 |
密码已过期,安全登录的数量已耗尽 | 密码过期 |
密码将过期(过期警告) | 密码将在 X 秒数后过期 |
20.8.2. 更改用户可以执行帐户的搜索功能
默认情况下,只有目录管理器可以使用 Account Usability Extension Control。其他用户可以通过在支持的控制条目上设置适当的 ACI 来使用 Account Usability Extension Control。控制条目为帐户 Usability Extension Control OID, 1.3.6.1.4.1.42.2.27.9.5.8 命名。
例如,要启用 cn=Administrators,ou=groups,dc=example,dc=com 组的成员读取所有用户的帐户 Usability Extension 控制:
# ldapmodify -D "cn=Directory Manager" -W -x dn: oid=1.3.6.1.4.1.42.2.27.9.5.8,cn=features,cn=config changetype: modify add: aci aci: (targetattr = "*")(version 3.0; acl "Account Usable"; allow (read)(groupdn = "ldap:///cn=Administrators,ou=groups,dc=example,dc=com");)