7.4. 选择适当的验证方法
有关安全策略的基本决定是用户如何访问该目录。匿名用户访问该目录,或者每个用户都需要使用用户名和密码(验证)登录目录?
了解目录服务器提供的身份验证方法。该目录对所有用户使用相同的身份验证机制,无论它们是人员还是 LDAP 感知应用程序。
7.4.1. 匿名和未经身份验证的访问 复制链接链接已复制到粘贴板!
匿名访问提供了目录最简单的访问形式。通过匿名访问权限,连接到该目录的任何人都可以访问数据。
当您配置匿名访问时,您无法跟踪谁执行哪种搜索类型,而只有某人执行搜索。您可以尝试阻止特定的用户或组访问某些类型的目录数据,但如果匿名访问允许该数据,则仍可以通过匿名绑定到目录来访问数据。
您可以限制匿名访问。通常,目录管理员仅允许匿名访问读、搜索和比较特权,而不用于写入、添加、删除或自我写入特权。通常,管理员限制对包含通用信息(如名称、电话号码和电子邮件地址)的属性子集的访问。您不应该允许匿名访问更敏感数据,如政府身份识别号,例如美国、家电话号码和地址以及工资信息。
如果您需要严格访问目录数据的规则,您可以完全禁用匿名访问。
当用户试图使用用户名绑定但没有用户密码属性时,未经身份验证的 绑定是。例如:
ldapsearch -x -D "cn=jsmith,ou=people,dc=example,dc=com" -b "dc=example,dc=com" "(cn=joe)"
ldapsearch -x -D "cn=jsmith,ou=people,dc=example,dc=com" -b "dc=example,dc=com" "(cn=joe)"
如果用户没有尝试提供密码,目录服务器会授予匿名访问权限。未经身份验证的绑定不需要绑定 DN 为现有条目。
与匿名绑定一样,您可以通过限制对数据库的访问来禁用未经身份验证的绑定以提高安全性。另外,您可以禁用未经身份验证的绑定,以防止客户端的绑定失败。有些应用程序可能认为它已成功验证到该目录,因为它收到了一个绑定成功消息,因此无法传递密码,而只是与未经身份验证的绑定连接。
7.4.2. 简单绑定和安全绑定 复制链接链接已复制到粘贴板!
如果不允许匿名访问,用户必须对该目录进行身份验证,然后才能访问目录的内容。通过简单的密码身份验证,客户端通过发送可重复使用的密码来向服务器进行身份验证。
例如,客户端使用 bind 操作向目录进行身份验证,它提供可分辨名称和一组凭证。服务器在目录中查找与客户端 DN 对应的条目,并检查客户端给出的密码是否与以该条目存储的值匹配。如果存在,服务器会验证客户端。如果没有,身份验证操作会失败,客户端会收到错误消息。
绑定 DN 通常与个人的条目对应。但是,一些目录管理员更喜欢绑定为机构条目,而不是作为个人绑定。目录要求用于绑定的条目具有允许 userPassword
属性的对象类。这样可确保目录识别绑定 DN 和密码。
大多数 LDAP 客户端从用户隐藏绑定 DN,因为用户可能会发现要记住的 DN 字符的长字符串。当客户端尝试从用户隐藏绑定 DN 时,它会使用以下绑定算法:
-
用户输入唯一标识符,如用户 ID。例如,
fchen
。 -
LDAP 客户端应用程序搜索该标识符的目录,并返回相关的可分辨名称。例如:
uid=fchen,ou=people,dc=example,dc=com
。 - LDAP 客户端应用程序使用检索到的区分名称和用户提供的密码绑定到目录。
简单的密码身份验证提供了一种简单的方法来验证用户,但它需要额外的安全方法。考虑将其使用限制为组织内部网。要通过 extranet 与业务合作伙伴间的连接使用,或与互联网上的客户进行传输,可能最好需要安全(加密)连接。
简单密码验证的缺陷是以纯文本形式发送密码。如果未授权用户正在侦听,这可能会破坏目录的安全性,因为该用户能够模仿授权用户。nsslapd-require-secure-binds
配置属性需要使用 TLS 或启动 TLS 在安全连接中进行简单的密码身份验证。这会有效地加密纯文本密码,使其不能被恶意参与者嗅探。
使用 nsslapd-require-secure-binds
配置属性,通过 TLS 或 Start TLS 打开安全连接。SASL 身份验证或基于证书的身份验证也可以进行。当目录服务器和客户端应用程序相互建立安全连接时,客户端通过不以明文传输密码来执行带有额外保护级别的简单绑定。
7.4.3. 基于证书的验证 复制链接链接已复制到粘贴板!
另一种形式的目录身份验证涉及使用数字证书绑定到目录。当用户首次访问密码时,该目录会提示用户输入密码。但是,密码不与 目录中存储的密码不匹配,而是会打开用户证书数据库。
如果用户提供正确的密码,目录客户端应用程序会从证书数据库获取身份验证信息。然后,客户端应用程序和目录使用此信息通过将用户证书映射到目录 DN 来识别用户。目录允许或拒绝访问此身份验证过程中确定的目录 DN。
7.4.4. 代理身份验证 复制链接链接已复制到粘贴板!
代理身份验证是一种特殊的身份验证形式,因为请求访问该目录的用户没有绑定到自己的 DN,而是使用 proxy DN。
代理 DN 是一个实体,它有适当的权限来执行用户请求。当个人或应用程序收到代理权限时,它们将任何 DN 指定为代理 DN,但目录管理器 DN 除外。
代理权限的一个主要优点是,LDAP 应用程序可以使用单个线程和一个绑定来服务多个用户对目录服务器发出请求。客户端应用程序使用代理 DN 绑定到目录服务器,而不是为每个用户绑定和身份验证。
代理 DN 在 LDAP 操作中指定,客户端应用提交。例如:
ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -X "dn:cn=joe,dc=example,dc=com" -f mods.ldif
ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -X "dn:cn=joe,dc=example,dc=com" -f mods.ldif
在这个版本中,管理器条目 cn=Directory Manager
会收到用户 cn=joe
的权限,以将修改应用到 mods.ldif
文件。管理器不需要提供用户密码来进行此更改。
代理机制非常强大,您必须谨慎使用。代理权限在访问控制列表(ACL)范围内授予,当您授予用户代理权限时,这个用户可以代理目标下任何用户。您不能将代理权限限制为特定用户。
例如,如果条目具有对 dc=example,dc=com
树的代理权限,则此条目可以执行任何操作。因此,请确保在目录的最低可能级别上设置代理访问控制指令(ACI)。
7.4.5. 直通身份验证(PTA) 复制链接链接已复制到粘贴板!
直通身份验证(PTA) 是 Directory 服务器将任何身份验证请求从一台服务器转发到另一台服务器时。
例如,当目录服务器将实例的所有配置信息存储在另一个目录实例中时,目录服务器对 User Directory 服务器使用直通身份验证来连接到配置目录服务器。PTA 插件处理目录服务器到目录服务器直通身份验证。
许多系统已经具有 Unix 和 Linux 用户的身份验证机制,如可插拔验证模块(PAM)。您可以配置 PAM 模块,以告知 Directory 服务器为 LDAP 客户端使用现有验证存储。目录服务器与 PAM 服务交互,以使用 PAM 直通身份验证插件来验证 LDAP 客户端。
使用 PAM 直通身份验证时,当用户尝试绑定到目录服务器时,目录服务器会将凭据转发到 PAM 服务。如果凭据与 PAM 服务中的信息匹配,则用户可以成功绑定到 Directory 服务器,且所有目录服务器访问控制限制和帐户设置。
您可以将目录服务器配置为使用 PAM,但您不能将 PAM 配置为使用 Directory 服务器进行身份验证。
您可以使用系统安全服务守护进程(SSSD)配置 PAM 服务。只需将 PAM 直通身份验证插件指向 SSSD 使用的 PAM 文件,如 /etc/pam.d/system-auth
。SSSD 可以使用各种不同的身份提供程序,包括 Active Directory、红帽目录服务器或其他目录,如 OpenLDAP 或本地系统设置。
7.4.6. 免密码身份验证 复制链接链接已复制到粘贴板!
身份验证会首先评估用户帐户是否可以进行身份验证。帐户必须遵循以下条件:
- 它必须处于活动状态。
- 不能锁定。
- 它必须根据任何适用的密码策略具有有效的密码。
有时,当用户不应该或无法绑定到目录服务器时,客户端应用需要执行用户帐户的身份验证。例如,系统可能使用 PAM 管理系统帐户,并将 PAM 配置为使用 LDAP 目录作为其身份存储。但是,系统使用免密码凭证,如 SSH 密钥或 RSA 令牌,且这些凭据无法传递给目录服务器。
红帽目录服务器支持用于 LDAP 搜索 的帐户 Usability Extension Control 扩展。此扩展会为每个返回的条目返回一个额外行,给出帐户状态以及有关该帐户密码策略的一些信息。然后,客户端或应用程序可以使用该状态来评估该用户帐户外的身份验证尝试。基本上,这控制信号用户是否被允许进行身份验证,而无需执行身份验证操作。
另外,您可以将此扩展与系统级服务(如 PAM)搭配使用,允许免密码登录,这些登录仍使用 Directory 服务器来存储身份,甚至控制帐户状态。
默认情况下,只有目录管理器可以使用帐户 Usability Extension Control。要允许其他用户使用控制,请在支持的控制条目 oid=1.3.6.1.4.1.42.2.27.9.5.8,cn=features,cn=config
上设置适当的 ACI。