20.12. 启用不同类型的绑定

每当实体登录或访问目录服务器时,它将 绑定到 目录。有很多不同类型的绑定操作,有时根据绑定方法(如简单绑定或自动绑定)以及一些根据用户绑定的身份绑定到该目录(匿名和未经身份验证的绑定)。
以下小节包含可提高绑定安全性(如 第 20.12.1 节 “需要安全绑定”)或简化绑定操作(如 第 20.12.4 节 “配置自动绑定”)的配置参数。

20.12.1. 需要安全绑定

一个简单的绑定是使用简单的绑定 DN 密码组合与目录服务器进行身份验证时。虽然可以使用密码文件而不是直接通过命令行发送密码,但这两种方法仍需要通过线发送或访问纯文本密码。这使得密码容易受到破坏连接的任何人。
可能需要简单的绑定通过安全连接(TLS 或 STARTTLS)进行,这样可有效地加密明文密码,因为它使用 bind 操作发送。(也可以使用替代方案来简单绑定,如 SASL 身份验证和基于证书的身份验证。)
重要
除了常规用户登录到服务器和 LDAP 操作外,服务器到服务器的连接也会受到简单绑定的安全连接的影响。复制、同步和数据库链都可以在服务器之间使用简单的绑定,例如:
如果启用了 nsslapd-require-secure-binds 属性,请确保复制协议、同步协议和串联配置指定安全连接。否则,这些操作将失败。
注意
对绑定操作需要安全连接只适用于 经过身份验证的绑定。没有密码(匿名和未经身份验证的绑定)的绑定操作可以通过标准连接进行。
  1. nsslapd-require-secure-binds 配置参数设置为 on
    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-require-secure-binds=on
  2. 重启实例:
    # dsctl instance_name restart

20.12.2. 禁用匿名绑定

如果用户试图在不提供任何用户名或密码的情况下连接到目录服务器,则这是一个 匿名绑定。匿名绑定简化了常见的搜索和读取操作,如检查目录或电子邮件地址,而无需用户首先向目录进行身份验证。
注意
默认情况下,允许匿名绑定(on)用于搜索和读取操作。这允许访问 常规目录条目,其中包括用户和组条目,以及根 DSE 等配置条目。另一个选项 rootdse 允许匿名搜索和读取访问搜索根 DSE 本身,但限制对所有其他目录条目的访问。
但是,匿名绑定存在风险。必须就位适当的 ACI,才能限制对敏感信息的访问,并禁止修改和删除等操作。此外,匿名绑定可用于拒绝服务攻击或恶意人员访问服务器。
第 18.11.1.1.3 节 “授予匿名访问权限” 包括一个设置 ACI 的示例,以控制匿名用户可以访问哪些,第 14.5.4 节 “在匿名绑定上设置资源限值” 包含有关为匿名用户放置资源限值的信息。
如果这些选项不提供足够级别的安全性,则可以完全禁用匿名绑定:
  1. nsslapd-allow-anonymous-access 配置参数设为 off
    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-allow-anonymous-access=off
  2. 重启实例:
    # dsctl instance_name restart
注意
禁用匿名绑定后,用户无法使用其 RDN 登录。需要提供完整的 DN 才能登录。
另外,当禁用匿名绑定时,会自动禁用未经身份验证的绑定。

20.12.3. 允许未验证的绑定

未经身份验证的绑定是到目录服务器的连接,用户提供了一个空密码。使用默认设置,目录服务器在这种情况下拒绝访问:
# ldapsearch -w "" -p 389 -h server.example.com -b "dc=example,dc=com" \
     -s sub -x "(objectclass=*)"

ldap_bind: Server is unwilling to perform (53)
	additional info: Unauthenticated binds are not allowed
警告
红帽建议不要启用未经身份验证的绑定。此验证方法允许用户在不提供密码作为任何帐户(包括目录管理器)的情况下绑定。绑定后,用户可以使用用于绑定的帐户的权限访问所有数据。
要启用不安全的未经身份验证的绑定,请在 上将 nsslapd-allow-unauthenticated-binds 配置选项设置为:
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-allow-unauthenticated-binds=on

20.12.4. 配置自动绑定

Autobind 是一种根据本地 UNIX 凭证连接到目录服务器的方法,该凭据映射到目录本身中存储的身份。Autobind 在两个部分进行配置:
在配置自动绑定前,请先确保启用了 LDAPI。然后,配置自动绑定映射(在 第 20.12.4.2 节 “配置 自动绑定 功能”中)。

20.12.4.1. Autobind 和 LDAPI 概述

进程间通信(IPC)是一种在 Unix 机器上或网络上分隔进程的方法,以直接相互通信。LDAPI 是通过这些 IPC 连接运行 LDAP 连接的方法,这意味着 LDAP 操作可以通过 Unix 套接字运行。这些连接比常规 LDAP 连接更快、更安全。
目录服务器使用这些 LDAPI 连接来允许用户立即绑定到目录服务器,或使用支持 Unix 套接字连接的工具访问目录服务器。Autobind 使用 Unix 用户的 uid:gid,并将该用户映射到目录服务器中的条目,然后允许访问该用户。
Autobind 允许映射到三个目录条目:
  • 用户条目,如果 Unix 用户与一个用户条目匹配
  • 如果 Unix 用户是 root 用户,或者 nsslapd-ldapimaprootdn中定义的超级用户,则目录管理器

图 20.1. 自动绑定连接路径

自动绑定连接路径
特殊的自动绑定用户是在特殊的自动绑定后缀下的条目(在常规用户子树之外)。下的条目通过其用户和组 ID 号来标识:
gidNumber=gid+uidNumberuid, autobindsuffix
如果没有启用 autobind,但 LDAPI 是匿名绑定到目录服务器的 Unix 用户,除非它们提供了其他绑定凭证。
注意
Autobind 允许客户端在不提供绑定用户名和密码或使用其他 SASL 身份验证机制的情况下向目录服务器发送请求。根据 LDAP 标准,如果没有向请求提供绑定信息,服务器会将请求作为匿名绑定进行处理。要符合标准,这需要某种类型的绑定信息,任何使用自动绑定的客户端都应向请求发送 SASL/EXTERNAL。
有关配置 SASL 的详情,请参考 第 9.10 节 “设置 SASL 身份映射”

20.12.4.2. 配置 自动绑定 功能

启用 Autobind 功能只允许对目录服务器的匿名访问。但是,您可以将 Linux 用户映射到目录服务器条目,并将 root 用户映射到 Directory Manager:
  1. 验证 nsslapd-ldapiautobind 参数是否已启用,这是默认设置:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com config get nsslapd-ldapiautobind
    nsslapd-ldapiautobind: on
  2. 如果将 nsslapd-ldapiautobind 参数设置为 off,请启用它:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-ldapiautobind=on
  3. 要映射用户条目,请设置:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-ldapimaptoentries=on nsslapd-ldapiuidnumbertype=uidNumber nsslapd-ldapigidnumbertype=gidNumber nsslapd-ldapientrysearchbase=ou=People,dc=example,dc=com
    • nsslapd-ldapimaptoentries=on 启用条目映射。
    • nsslapd-ldapiuidnumbertype=uidNumber 设置包含 Unix UID 号的目录服务器中的属性。
    • nsslapd-ldapigidnumbertype=gidNumber 设置包含 Unix GID 号的目录服务器中的属性。
    • nsslapd-ldapientrysearchbase=ou=People,dc=example,dc=com 设置搜索用户条目的 DN。
  4. (可选)要将 Red Hat Enterprise Linux 中的 root 用户映射到 Directory Server 中的 cn=Directory Manager 帐户:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-ldapimaprootdn="cn=Directory Manager"
  5. 重启实例:
    # dsctl instance_name restart