应用于客户端的安全模型是通过证书级别和验证方法组合定义的。
匿名。允许匿名访问目录的某些部分意味着,任何具有目录访问权限的人都具有读取访问权限。
如果使用匿名证书级别,则您需要允许对所有 LDAP 命名条目和属性进行读取访问。
不允许对目录进行匿名写入访问,因为任何人都可以在其拥有写入权限的 DIT 中更改信息,包括其他用户的密码或其自己的身份。
代理。客户端使用代理帐户进行验证或绑定到目录上。
此代理帐户可以是允许绑定到目录上的任何条目。代理帐户需要具有足够的访问权限才能在目录上执行命名服务功能。您需要在每个使用代理证书级别的客户端上配置 proxyDN 和 proxyPassword。加密的 proxyPassword 本地存储在客户端上。
代理匿名。其中定义了多个证书级别的多值条目。
指定了代理匿名级别的客户端将先尝试使用其代理身份进行验证。如果客户端由于任何原因(如用户锁定、密码过期)而无法作为代理用户进行验证,客户端将使用匿名访问。这可能会导致不同的服务级别,具体取决于目录的配置方式。
可使用以下任一方式执行客户端验证:
通过提供 DN 和密码。
通过客户端提供的证书。
基于证书的验证使用通过 SSL 协议获取的客户端证书来查找用户的标识条目。在基于证书的验证中,客户端将发送用于指定外部机制的 SASL 绑定请求。绑定请求依赖于已建立的 SSL 验证机制。
通过基于 SASL 的机制。
在所有操作系统上,通过 DIGEST-MD5 进行 SASL 验证。
在 Solaris 操作系统上,通过 GSSAPI 机制(允许通过 Kerberos V5 进行客户端验证)进行 SASL 验证。
使用上述两种 SASL 机制中的任何一种时,还必须将服务器配置为执行标识映射。SASL 凭证称为主体。每种机制都必须具有特定的映射,以便通过主体的内容来确定绑定 DN。当主体映射到单个用户条目,并且 SASL 机制确认该用户的标识有效时,该用户的 DN 即为连接的绑定 DN。
通过 SSL 客户端验证模式。
如果希望所有客户端都在 SSL 层上获得授权,请使用 SSL 客户端验证。客户端应用程序通过将其 SSL 证书发送到服务器来进行验证。您可以使用 SSL-client-auth-mode 标志指定服务器允许、请求还是禁止 SSL 客户端验证。默认情况下,服务器允许客户端进行验证。
本部分提供了以下有关在目录服务器上配置两种 SASL 机制的信息。
有关配置安全性的详细信息,请参见将 LDAP 客户端配置为使用安全性。
在配置 SASL 机制之前,必须指定是否需要加密。SASL 加密的要求由强度安全系数 (Strength Security Factor, SSF) 的最大值和最小值进行设置。
属性 dsSaslMinSSF(5dsat) 和 dsSaslMaxSSF(5dsat) 表示加密密钥的长度,这些属性存储在 cn=SASL, cn=security, cn=config 中。
服务器允许任何级别的加密,包括不加密。这意味着目录服务器接受大于 256 的 dsSaslMinSSF 和 dsSaslMaxSSF 值。但目前没有任何 SASL 机制支持大于 128 的 SSF。目录服务器会对这些值进行调整,使其不高于 SSF 可用的最大值 (128)。因此,实际的最大 SSF 可能低于配置的最大值,这取决于可用的基础机制。
SASL 安全系数验证依赖于以下两个主要因素:服务器和客户端应用程序所请求的最小系数和最大系数,以及基础安全组件提供的可用加密机制。概括来说,服务器和客户端将尝试使用最大的可用安全系数,该系数小于或等于两者设置的最大系数,但大于或等于两者设置的最小系数。
目录服务器的默认最小 SASL 安全系数 dsSaslMinSSF 为 0,表示没有任何保护。实际的最小值取决于客户端设置,除非您更改目录服务器的最小值。实际上,应该将最小值设置为实际希望服务器和客户端使用的最低级别。如果服务器和客户端无法协商出符合最低要求的机制,则不会建立连接。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
如果要求 SASL 加密,请将 dsSaslMinSSF 值设置为所需的最小加密。
$ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: cn=SASL, cn=security, cn=config changetype: modify replace: dsSaslMinSSF dsSaslMinSSF: 128 ^D |
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
如果不允许 SASL 加密,请将 dsSaslMinSSF 和 dsSaslMaxSSF 的值都设置为零。
$ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: cn=SASL, cn=security, cn=config changetype: modify replace: dsSaslMinSSF dsSaslMinSSF: 0 replace: dsSaslMaxSSF dsSaslMaxSSF: 0 ^D |
DIGEST-MD5 机制通过比较客户端发送的散列值与用户密码的散列值来验证客户端。但是,由于此机制必须读取用户密码,因此要通过 DIGEST-MD5 进行验证的所有用户在目录中都必须具有 {CLEAR} 密码。在目录中存储 {CLEAR} 密码时,必须确保通过 ACI 正确限制对密码值的访问权限,如第 6 章,目录服务器访问控制中所述。此外,还需要在后缀中配置属性加密,如加密属性值中所述。
以下过程介绍如何将目录服务器配置为使用 DIGEST-MD5。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
使用 ldapsearch 命令验证 DIGEST-MD5 是否为根条目上的 supportedSASLMechanisms 属性值。
例如,以下命令显示启用了哪些 SASL 机制:
$ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \ -s base -b "" "(objectclass=*)" supportedSASLMechanisms Enter bind password: dn: supportedSASLMechanisms: EXTERNAL supportedSASLMechanisms: DIGEST-MD5 supportedSASLMechanisms: GSSAPI ^D |
如果未启用 DIGEST-MD5,请将其启用。
$ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: cn=SASL, cn=security, cn=config changetype: modify add: dsSaslPluginsEnable dsSaslPluginsEnable: DIGEST-MD5 - replace: dsSaslPluginsPath dsSaslPluginsPath: SASL-library ^D |
其中 SASL-library 为以下任一选项:
/usr/lib/mps/sasl2
install-path/dsee6/private/lib
为 DIGEST-MD5 使用默认标识映射,或创建新的映射。
有关信息,请参见DIGEST-MD5 标识映射。
对于将使用 DIGEST-MD5 通过 SSL 访问服务器的所有用户,确保以 {CLEAR} 形式存储密码。
有关密码存储模式的信息,请参见第 7 章,目录服务器密码策略。
如果修改了 SASL 配置条目或某个 DIGEST-MD5 标识映射条目,请重新启动目录服务器。
SASL 机制的标识映射尝试将 SASL 标识的凭证与目录中的用户条目进行匹配。如果映射找不到与 SASL 标识相对应的 DN,则验证将会失败。有关此机制的完整描述,请参见《Sun Java System Directory Server Enterprise Edition 6.1 Reference》。
SASL 标识是称为主体的字符串,以特定于每种机制的格式表示用户。在 DIGEST-MD5 中,客户端应创建包含 dn: 前缀和 LDAP DN 的主体,或者创建包含 u: 前缀(后跟由客户端确定的任何文本)的主体。在映射期间,客户端发送的主体可用于 ${Principal} 占位符中。
服务器配置中的以下条目是 DIGEST-MD5 的默认标识映射:
dn: cn=default,cn=DIGEST-MD5,cn=identity mapping,cn=config objectClass: top objectClass: nsContainer objectClass: dsIdentityMapping objectClass: dsPatternMatching cn: default dsMatching-pattern: \${Principal} dsMatching-regexp: dn:(.*) dsMappedDN: \$1 |
此标识映射假定主体的 dn 字段包含目录中现有用户的精确 DN。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
编辑默认的映射条目,或者在 cn=DIGEST-MD5,cn=identity mapping,cn=config 下创建新的映射条目。
以下命令显示应如何定义此映射:
$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: cn=unqualified-username,cn=DIGEST-MD5,cn=identity mapping cn=config objectclass: dsIdentityMapping objectclass: dsPatternMatching objectclass: nsContainer objectclass: top cn: unqualified-username dsMatching-pattern: \${Principal} dsMatching-regexp: u:(.*)@(.*)\\.com dsSearchBaseDN: dc=\$2 dsSearchFilter: (uid=\$1) |
重新启动目录服务器以使新映射生效。
通过 SASL 执行的通用安全服务 API (Generic Security Service API , GSSAPI) 允许您使用第三方安全系统(如 Kerberos V5)对客户端进行验证。GSSAPI 库仅适用于 Solaris 操作系统 SPARC® 平台。Sun 建议您在 Sun Enterprise Authentication MechanismTM 1.0.1 服务器上安装 Kerberos V5 实现。
服务器使用 GSSAPI 验证用户的标识。然后,SASL 机制将应用 GSSAPI 映射规则获取 DN,该 DN 为此连接期间所有操作的绑定 DN。
可以按照制造商的说明来配置 Kerberos 软件。如果您使用的是 Sun Enterprise Authentication Mechanism 1.0.1 服务器,请使用此过程。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
对 /etc/krb5 中的文件进行配置。
创建 Kerberos 数据库以存储用户和服务。
在该数据库中,创建 LDAP 服务的主体。
$ ldap/server-FQDN@realm |
其中 server-FQDN 是目录服务器的全限定域名。
启动 Kerberos 守护进程。
必须在主机上配置 DNS。
有关上述每个步骤的详细说明,请参见软件文档。此外,请参见使用 GSSAPI 和 SASL 进行 Kerberos 验证的示例配置。
以下过程介绍如何在 Solaris 操作系统上将目录服务器配置为使用 GSSAPI:
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
创建 GSSAPI 的默认标识映射,以及任何自定义映射,如GSSAPI 标识映射中所述。
创建用于存储服务密钥的密钥表。
您的 LDAP 服务密钥存储在密钥表中。
如果修改了 SASL 配置条目或某个 GSSAPI 标识映射条目,请重新启动目录服务器。
请注意,必须在主机上配置 DNS。
SASL 机制的标识映射尝试将 SASL 标识的凭证与目录中的用户条目进行匹配。如果映射找不到与 SASL 标识相对应的 DN,则验证将会失败。
SASL 标识是称为主体的字符串,以特定于每种机制的格式表示用户。在使用 GSSAPI 的 Kerberos 中,主体为 uid [/instance][@ realm] 格式的标识。uid 可以包含后跟领域(通常为域名)的实例标识符,实例标识符和领域都是可选的。例如,以下字符串都是有效的用户主体:
bjensen bjensen/Sales bjensen@EXAMPLE.COM bjensen/Sales@EXAMPLE.COM |
最初,在目录中未定义任何 GSSAPI 映射。可以根据客户端定义所用主体的方式,定义默认映射以及所需的任何自定义映射。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
在 cn=GSSAPI,cn=identity mapping, cn=config 下创建新的映射条目。
有关标识映射条目中的属性定义,请参见《Sun Java System Directory Server Enterprise Edition 6.1 Reference》。GSSAPI 映射的示例位于 instance-path/ldif/identityMapping_Examples.ldif 中。
此文件中的默认 GSSAPI 映射假定主体只包含一个用户 ID。此映射可确定目录固定分支中的某个用户:
dn: cn=default,cn=GSSAPI,cn=identity mapping,cn=config objectclass: dsIdentityMapping objectclass: nsContainer objectclass: top cn: default dsMappedDN: uid=\${Principal},ou=people,dc=example,dc=com |
此文件中的另一个示例说明当用户 ID 包含在具有已知领域的主体中时如何确定用户 ID。
dn: cn=same_realm,cn=GSSAPI,cn=identity mapping,cn=config objectclass: dsIdentityMapping objectclass: dsPatternMatching objectclass: nsContainer objectclass: top cn: same_realm dsMatching-pattern: \${Principal} dsMatching-regexp: (.*)@EXAMPLE.COM dsMappedDN: uid=\$1,ou=people,dc=EXAMPLE,dc=COM |
重新启动目录服务器以使新映射生效。