Sun Java System Directory Server Enterprise Edition 6.3 管理指南

配置凭证级别和验证方法

应用于客户端的安全模型是通过凭证级别和验证方法的组合定义的。

目录服务器支持以下凭证级别:

客户端验证是服务器用于验证客户端标识的一种机制。

可使用以下任一方式执行客户端验证:

本部分提供了以下有关在目录服务器上配置两种 SASL 机制的信息。

有关配置安全性的详细信息,请参见将 LDAP 客户端配置为使用安全性

在目录服务器中设置 SASL 加密级别

在配置 SASL 机制之前,必须指定是否需要加密。SASL 加密的要求由强度安全系数 (Strength Security Factor, SSF) 的最大值和最小值进行设置。

属性 dsSaslMinSSF(5dsat)dsSaslMaxSSF(5dsat) 表示加密密钥的长度,这些属性存储在 cn=SASL, cn=security, cn=config 中。

服务器允许任何级别的加密,包括不加密。这意味着目录服务器接受大于 256 的 dsSaslMinSSFdsSaslMaxSSF 值。但目前没有任何 SASL 机制支持大于 128 的 SSF。目录服务器会对这些值进行调整,使其不高于 SSF 可用的最大值 (128)。因此,实际的最大 SSF 可能低于配置的最大值,这取决于可用的基础机制。

SASL 安全系数验证依赖于以下两个主要因素:服务器和客户端应用程序所请求的最小系数和最大系数,以及基础安全组件提供的可用加密机制。概括来说,服务器和客户端将尝试使用最大的可用安全系数,该系数小于或等于两者设置的最大系数,但大于或等于两者设置的最小系数。

目录服务器的默认最小 SASL 安全系数 dsSaslMinSSF0,表示没有任何保护。实际的最小值取决于客户端设置,除非您更改目录服务器的最小值。实际上,应该将最小值设置为实际希望服务器和客户端使用的最低级别。如果服务器和客户端无法协商出符合最低要求的机制,则不会建立连接。

Procedure要求 SASL 加密

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 如果要求 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

Procedure不允许 SASL 加密

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 如果不允许 SASL 加密,请将 dsSaslMinSSFdsSaslMaxSSF 的值都设置为零。


    $ 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

通过 DIGEST-MD5 进行 SASL 验证

DIGEST-MD5 机制通过比较客户端发送的散列值与用户密码的散列值来验证客户端。但是,由于此机制必须读取用户密码,因此要通过 DIGEST-MD5 进行验证的所有用户在目录中都必须具有 {CLEAR} 密码。在目录中存储 {CLEAR} 密码时,必须确保通过 ACI 正确限制对密码值的访问权限,如第 7 章,目录服务器访问控制中所述。此外,还需要在后缀中配置属性加密,如加密属性值所述。

Procedure配置 DIGEST-MD5 机制

以下过程介绍如何将目录服务器配置为使用 DIGEST-MD5。

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 使用 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
  2. 如果未启用 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
    

    其中 SASL-library 为以下任一选项:

    JES 安装

    /usr/lib/mps/sasl2

    Zip 安装

    install-path/dsee6/private/lib

  3. 为 DIGEST-MD5 使用默认标识映射,或创建新的映射。

    有关信息,请参见DIGEST-MD5 标识映射

  4. 对于将使用 DIGEST-MD5 通过 SSL 访问服务器的所有用户,确保以 {CLEAR} 形式存储密码。

    有关密码存储模式的信息,请参见第 8 章,目录服务器密码策略

  5. 如果修改了 SASL 配置条目或某个 DIGEST-MD5 标识映射条目,请重新启动目录服务器。

DIGEST-MD5 标识映射

SASL 机制的标识映射尝试将 SASL 标识的凭证与目录中的用户条目进行匹配。如果映射找不到与 SASL 标识相对应的 DN,则验证将会失败。有关此机制的完整描述,请参见《Sun Java System Directory Server Enterprise Edition 6.3 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。

Procedure定义您自己的 DIGEST-MD5 标识映射

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 编辑默认的映射条目,或者在 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)
  2. 重新启动目录服务器以使新映射生效。

通过 GSSAPI 进行 SASL 验证(仅适用于 Solaris 操作系统)

通过 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。

Procedure配置 Kerberos 系统

可以按照制造商的说明来配置 Kerberos 软件。如果您使用的是 Sun Enterprise Authentication Mechanism 1.0.1 服务器,请使用此过程。

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. /etc/krb5 中的文件进行配置。

  2. 创建 Kerberos 数据库以存储用户和服务。

  3. 在该数据库中,创建 LDAP 服务的主体。


    $ ldap/server-FQDN@realm
    

    其中 server-FQDN 是目录服务器的全限定域名。

  4. 启动 Kerberos 守护进程。


    注 –

    必须在主机上配置 DNS。


    有关上述每个步骤的详细说明,请参见软件文档。此外,请参见使用 GSSAPI 和 SASL 进行 Kerberos 验证的示例配置

Procedure配置 GSSAPI 机制

以下过程介绍如何在 Solaris 操作系统上将目录服务器配置为使用 GSSAPI:

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 创建 GSSAPI 的默认标识映射以及任何自定义映射,如GSSAPI 标识映射所述。

  2. 创建用于存储服务密钥的密钥表。

    您的 LDAP 服务密钥存储在密钥表中。

    1. 确保只有目录服务器用户可以读取此密钥表。

    2. 更改文件名,使其不同于默认的 /etc/krb5/krb5.keytab

    3. 设置环境变量 KRB5_KTNAME 以确保使用新的密钥表,而不使用默认密钥表。

  3. 如果修改了 SASL 配置条目或某个 GSSAPI 标识映射条目,请重新启动目录服务器。

    请注意,必须在主机上配置 DNS。

GSSAPI 标识映射

SASL 机制的标识映射尝试将 SASL 标识的凭证与目录中的用户条目进行匹配。如果映射找不到与 SASL 标识相对应的 DN,则验证将会失败。

SASL 标识是称为主体的字符串,以特定于每种机制的格式表示用户。在使用 GSSAPI 的 Kerberos 中,主体为 uid [/instance][@ realm] 格式的标识。uid 可以包含后跟领域(通常为域名)的实例标识符,实例标识符和领域都是可选的。例如,以下字符串都是有效的用户主体:


bjensen
bjensen/Sales
bjensen@EXAMPLE.COM
bjensen/Sales@EXAMPLE.COM

最初,在目录中未定义任何 GSSAPI 映射。可以根据客户端定义所用主体的方式,定义默认映射以及所需的任何自定义映射。

Procedure定义 GSSAPI 的标识映射

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. cn=GSSAPI,cn=identity mapping, cn=config 下创建新的映射条目。

    有关标识映射条目中的属性定义,请参见《Sun Java System Directory Server Enterprise Edition 6.3 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
  2. 重新启动目录服务器以使新映射生效。