2.2. Active Directory 验证

如果用户在 Active Directory 林中具有帐户,Active Directory 验证允许用户登录到 SGD。相对于 LDAP 验证,Active Directory 验证能够为用户提供更快速、更安全、可伸缩性更高的验证机制。通过使用 Kerberos 验证协议,SGD 能够对照林中的任何域,安全地验证任何用户。

默认情况下,Active Directory 验证被禁用。

本节包括以下主题:

2.2.1. Active Directory 验证的工作方式

在 SGD 登录屏幕中,用户键入用户名和密码,用户名和域名通常使用 @ 符号连接,例如,indigo@example.com

SGD 使用 Kerberos 协议根据域的密钥分配中心 (Key Distribution Center, KDC) 检查用户名和密码。

如果验证失败,则尝试使用下一个验证机制。

如果 Kerberos 验证成功,SGD 将通过对 Active Directory 执行 LDAP 搜索确定用户的身份。接下来,SGD 会搜索用户配置文件。有关详细信息,请参见第 2.2.1.1 节 “用户身份和用户配置文件”。如果用户配置文件的 "Login"(登录)属性未启用,用户将无法登录,系统不会尝试任何其他验证机制。如果用户配置文件的 "Login"(登录)属性已启用,用户将登录。

2.2.1.1. 用户身份和用户配置文件

用户身份是 LDAP 用户的 DN。在 SGD 数据存储中,该用户身份位于 LDAP 名称空间中。在管理控制台中,文本 "(LDAP)" 显示在该用户身份的旁边。在命令行上,该用户身份位于 .../_service/sco/tta/ldapcache 中。

考虑到 LDAP 与 SGD 命名系统之间的差异,SGD 将通过搜索本地系统信息库确定用户配置文件。SGD 将搜索以下用户配置文件,直到找到匹配项:

  • 与用户 LDAP 对象同名的用户配置文件。

    例如,如果用户的 LDAP 对象为 cn=Emma Rald,cn=Sales,dc=example,dc=com,SGD 将在本地系统信息库中搜索 dc=com/dc=example/cn=Sales/cn=Emma Rald

  • 与用户的 LDAP 对象在同一组织单元,但名称为 cn=LDAP Profile 的用户配置文件。

    例如:dc=com/dc=example/cn=Sales/cn=LDAP Profile

  • 任意父组织单元内的名称为 cn=LDAP Profile 的用户配置文件。

    例如:dc=com/dc=example/cn=LDAP Profile

如果没有匹配项,将使用 o=System Objects/cn=LDAP Profile 配置文件对象作为用户配置文件。

可将 Active Directory 验证与目录服务集成搭配使用。分配给 Active Directory 用户的应用程序来自用户配置文件组合和 LDAP 搜索。有关如何为用户分配应用程序的详细信息,请参见第 3 章 向用户发布应用程序

2.2.2. 设置 Active Directory 验证

设置 Active Directory 验证包括以下配置步骤:

  1. 为 Active Directory 验证做准备。

    SGD 有一些特定要求,必须在启用 Active Directory 验证之前进行配置,请参见第 2.2.3 节 “为 Active Directory 验证做准备”

  2. 配置 SGD 进行 Kerberos 验证。

    使用 KDC 的详细信息配置 SGD,以供 Kerberos 验证使用,请参见第 2.2.4 节 “配置 SGD 进行 Kerberos 验证”

  3. 启用 Active Directory 验证。

    将 SGD 配置为使用 Active Directory 验证,并指定 Active Directory 域详细信息,请参见第 2.2.5 节 “如何启用 Active Directory 验证”

    对于使用复杂 Active Directory 部署的组织,使用服务对象来管理及调整 Active Directory 配置。请参见第 2.8.4 节 “使用服务对象”

2.2.3. 为 Active Directory 验证做准备

按如下所示为 Active Directory 验证做准备:

2.2.3.1. 支持的 Active Directory 版本

Oracle Secure Global Desktop 发行版 4.7 平台支持和发行说明》中列出了支持的 Active Directory 版本,该文档位于 http://www.oracle.com/technetwork/documentation/sgd-193668.html

2.2.3.2. 域要求

必须在 Active Directory 中启用 Kerberos 验证。默认情况下处于启用状态。

确保每个 Active Directory 林都有一个全局目录服务器。

如果启用 Active Directory 验证,需要提供用户名和密码。该用户必须具有在 Active Directory 中搜索用户信息的特权。您可能需要创建一个特殊用户,专门用于 Active Directory 验证。

2.2.3.3. Active Directory 验证的网络要求

启用 Active Directory 验证之前,确保阵列中的所有 SGD 服务器均能连接到 Active Directory。

SGD 必须能够通过以下端口连接到 Active Directory:

  • 端口 53,用于在 Active Directory 上进行 DNS 查找

  • 端口 88 和 464,用于到 KDC 的 Kerberos 验证

  • TCP 端口 389,用于到域控制器的安全 LDAP 连接

  • TCP 端口 3268,用于到全局目录服务器的安全 LDAP 连接

端口 88 和 464 是用于 Kerberos 验证的标准端口。这些端口可以配置。仅在进行口令更改操作时才需要使用端口 464。端口 88 和 464 可使用 TCP 或 UDP 协议,具体取决于包大小以及您的 Kerberos 配置,有关详细信息,请参见第 2.2.4.3 节 “网络协议”

如果要使用无客户端证书的 SSL 连接,SGD 必须能够通过以下端口连接到 Active Directory:

  • TCP 端口 636,用于到域控制器的安全 LDAP 连接

  • TCP 端口 3269,用于到全局目录服务器的安全 LDAP 连接

有关更多详细信息,请参见第 2.2.3.5 节 “与 Active Directory 之间的 SSL 连接”

SGD 会执行多种 DNS 查找来发现 LDAP 信息,有关详细信息,请参见第 2.8.15 节 “Active Directory 验证和 LDAP 发现”。要使用这些查找,必须正确配置 DNS 以便从 Active Directory 返回所需信息。

2.2.3.4. 同步系统时钟

要使用 Kerberos 验证,KDC 与阵列中 SGD 服务器上的时钟必须保持同步,使时间保持在为 Kerberos 安全策略和 Active Directory 服务器上默认域安全策略定义的计算机时钟同步最大容差范围内。这称为时钟相位差。如果超出时钟相位差容差,Kerberos 验证会失败。

由于时间同步非常重要,因此请使用网络时间协议 (Network Time Protocol, NTP) 软件来同步时钟。或者,使用 rdate 命令。

2.2.3.5. 与 Active Directory 之间的 SSL 连接

要使用 SSL 连接到 Active Directory,必须将 Active Directory 服务器配置为支持 LDAP 签名。有关如何支持 LDAP 签名的详细信息,请查阅系统文档。Microsoft 知识库文章 935834 中包含如何在 Windows Server 2008 中支持 LDAP 签名的详细信息。

SGD 必须能够验证由 Active Directory 服务器提供的 SSL 证书。您可能需要将 Active Directory 服务器的证书颁发机构 (Certificate Authority, CA) 或根证书导入到 SGD 服务器上的 CA 证书信任库。有关如何检查支持的 CA 以及如何导入 CA 证书的详细信息,请参见第 7.5.1 节 “CA 证书信任库”

默认情况下,SGD 使用用户名和密码进行 Active Directory 验证。要进一步提高安全性,可改为将 SGD 配置为提供客户端证书。如果您这样做,阵列中的每个 SGD 服务器必须具有一个使用 Active Directory 证书服务进行了签名的有效客户端证书。必须将 Active Directory 配置为支持使用客户端证书。

创建客户端证书的过程如下所示:

  1. 为 SGD 服务器创建针对客户端证书的证书签名请求 (certificate signing request, CSR)。

    请参见第 7.5.2.1 节 “如何为 SGD 服务器创建客户端证书 CSR”

  2. 使用 Active Directory 证书服务创建客户端证书。

    有关如何使用 Active Directory 证书服务创建客户端证书的详细信息,请查阅系统文档。

    将 CSR 作为 Base-64 编码证书请求(高级证书请求)提交。

    如果需要为证书选择一个证书模板,默认的 "Administrator"(管理员)或 "User"(用户)模板便能满足您的需要。您选择的模板必须允许使用证书进行用户或客户端验证。

    确保以 Base 64 编码格式下载客户端证书。如果证书由中间 CA 签名,请下载证书和证书链。

  3. 为 SGD 服务器安装客户端证书。

    请参见第 7.5.2.2 节 “如何为 SGD 服务器安装客户端证书”

2.2.4. 配置 SGD 进行 Kerberos 验证

要使用 Active Directory 验证,必须将阵列中的每个 SGD 服务器配置为进行 Kerberos 验证。

阵列中的每个 SGD 服务器上都必须有 Kerberos 配置文件。SGD 服务器使用的 Kerberos 配置文件是以下文件之一:

  • 系统默认 Kerberos 配置文件。

    此文件通常是以下文件之一:

    • /etc/krb5/krb5.conf(在 Oracle Solaris 平台上)。

    • /etc/krb5.conf(在 Linux 平台上)。

  • SGD Kerberos 配置文件。

    此文件是 /opt/tarantella/bin/jre/lib/security/krb5.conf 文件。

    您必须手动创建此文件或复制现有配置文件。如果此配置文件存在,将使用此文件,而非系统默认配置文件。

Kerberos 配置文件包含许多用于控制 Kerberos 验证的选项。有关更多详细信息,请查阅系统文档。您可能需要配置以下内容:

小心

请特别注意 krb5.conf 文件的格式。格式不正确的文件会产生问题,尤其会影响密码过期操作。

无论何时对 Kerberos 配置文件进行更改,只有在重新启动 SGD 服务器之后,SGD 才会检测到这些更改。或者,可使用以下命令刷新 Kerberos 配置和连接信息,而不重新启动 SGD 服务器:

$ tarantella cache --flush krb5config
$ tarantella cache --flush ldapconn

2.2.4.1. Kerberos 领域和 KDC

Kerberos 配置文件必须至少包含以下节:

  • [libdefaults].此节用于为 Kerberos 验证设置默认设置。您必须设置 default_realm。如果未指定默认领域,用户可能无法更改过期密码。

  • [realms].此节用于为每个 Kerberos 领域设置 KDC。一个领域可具有多个 KDC。每个 KDC 的条目均为以下形式:host:port。如果使用默认端口 88,可省略 port

  • [domain_realm].此节用于将网络域映射到 Kerberos 领域。

以下是 Kerberos 配置文件示例:

[libdefaults]
default_realm = EXAMPLE.COM
 
[realms]
EXAMPLE.COM = {
  kdc = kdc.example.com
}
EAST.EXAMPLE.COM = {
  kdc = ad01.east.example.com
  kdc = ad02.east.example.com
}
WEST.EXAMPLE.COM = {
  kdc = ad01.west.example.com
  kdc = ad02.west.example.com
}
 
[domain_realm]
example.com = EXAMPLE.COM
.east.example.com = EAST.EXAMPLE.COM
east.example.com = EAST.EXAMPLE.COM
.west.example.com = WEST.EXAMPLE.COM
 west.example.com = WEST.EXAMPLE.COM

2.2.4.2. Active Directory 密码过期

可将 SGD 配置为当用户的 Active Directory 密码过期时提示用户输入新密码。如果未在 krb5.conf 文件中指定默认领域,用户将无法更改过期密码。

要配置密码过期,必须将用于为每个 Kerberos 领域处理密码更改的服务器详细信息添加到 Kerberos 配置文件,如下所示:

kpasswd_server = host:port
admin_server = host:port
kpasswd_protocol = SET_CHANGE

kpasswd_serveradmin_server 行标识用于处理密码更改的 Kerberos 管理服务器。如果省略 kpasswd_server,则会使用 admin_server。如果使用默认端口 464,可省略 port

下面是某个领域的密码过期配置示例:

EAST.EXAMPLE.COM = {
 kdc = ad01.east.example.com
 kdc = ad02.east.example.com
 admin_server = ad01.east.example.com
 kpasswd_protocol = SET_CHANGE
 }

可将 SGD 配置为警告用户其密码即将过期并强制其更改密码,请参见第 2.8.5 节 “密码过期”。仅当 SGD 能够读取域控制器的 "Maximum Password Age"(密码最长期限)设置和用户的 "Password Last Set"(上次设置的密码)属性时,它才能执行此操作。如果将 SGD 配置为仅搜索全局目录,此属性不可用。有关更多详细信息,请参见第 2.8.10 节 “仅搜索全局目录”

2.2.4.3. 网络协议

向 KDC 或 Kerberos 管理服务器发送消息时,SGD 使用 UDP 或 TCP 协议。所使用的协议由 Kerberos 配置文件 [libdefaults] 节中的以下行确定:

udp_preference_limit = bytes

此行用于设置能够使用 UDP 发送的包的最大大小(以字节为单位)。如果消息的字节数超过此大小,将使用 TCP。如果 KDC 或管理服务器指出包过大,则改为使用 TCP。要总是使用 TCP,请按如下所示设置 udp_preference_limit

udp_preference_limit = 1

2.2.4.4. KDC 超时

可配置 KDC 超时,用于控制 SGD 等待 KDC 响应的最长等待时间以及尝试访问每个 KDC 的最大尝试次数。

要设置 KDC 超时,请将以下行添加到 Kerberos 配置文件的 [libdefaults] 节:

kdc_timeout = time
max_retries = number

kdc_timeout 设置等待 KDC 响应的最长毫秒数。max_retries 是尝试连接每个 KDC 的最大次数。每个领域的 KDC 的尝试顺序与它们在 Kerberos 配置文件 [realms] 节中的列出顺序相同。

最好使 KDC 超时与 LDAP 发现超时保持一致。如果增加 KDC 超时,则同时增加 LDAP 发现超时。请参见第 2.8.3 节 “LDAP 发现超时”

如果 SGD 无法访问用户领域的任何 KDC,则验证阶段失败。

2.2.5. 如何启用 Active Directory 验证

  1. 在管理控制台中,显示 "Secure Global Desktop Authentication Configuration"(Secure Global Desktop 验证配置)向导。

    转到 "Global Settings"(全局设置)→ "Secure Global Desktop Authentication"(Secure Global Desktop 验证)选项卡,然后单击 "Change Secure Global Desktop Authentication"(更改 Secure Global Desktop 验证)按钮。

  2. 在 "Third-Party/System Authentication"(第三方/系统验证)步骤中,确保选中 "System Authentication"(系统验证)复选框。

  3. 在 "System Authentication - Repositories"(系统验证 - 系统信息库)步骤中,选中 "LDAP/Active Directory" 复选框。

  4. 在 "LDAP Repository Details"(LDAP 系统信息库详细信息)步骤中,配置 Active Directory 林的详细信息。

    1. 对于 "Repository Type"(系统信息库类型),选择 "Active Directory" 选项。

    2. 在 "URL" 字段中,键入 Active Directory 林的 URL。

      例如:ad://example.com

      URL 必须以 ad:// 开头。仅键入一个 URL。

      可指定一个 DN 用作搜索基,例如,ad://example.com/dc=sales,dc=example,dc=com。这将指定用于搜索用户身份的目录部分。

    3. 配置到 Active Directory 的安全连接。

      • 仅使用 Kerberos 协议进行安全连接-对 "Connection Security"(连接安全性)选择 "Kerberos" 选项,然后分别在 "User Name"(用户名)和 "Password"(密码)字段中键入用户名和密码。默认情况下将选择此选项。

      • 使用 Kerberos 和 SSL 进行安全连接-对 "Connection Security"(连接安全性)选择 "SSL" 选项,然后分别在 "User Name"(用户名)和 "Password"(密码)字段中键入用户名和密码。

      • 使用 Kerberos、SSL 和客户端证书进行安全连接-对 "Connection Security"(连接安全性)选择 "SSL" 选项,然后选中 "Use Certificates"(使用证书)复选框。

      有关使用 SSL 连接所需的其他配置的详细信息,请参见第 2.2.3.5 节 “与 Active Directory 之间的 SSL 连接”

      如果键入用户名,该用户名的形式为 user@example.com。如果在用户名中省略域名,SGD 将使用 "URL"、"Active Directory Base Domain"(Active Directory 基本域)和 "Active Directory Default Domain"(Active Directory 默认域)字段中的信息获取域。该用户必须具有在 Active Directory 中搜索用户信息的特权。

    4. (可选)在 "Active Directory Base Domain"(Active Directory 基本域)字段中,键入部分域名。

      如果用户在登录时仅提供部分域,则使用基本域。例如,如果基本域设置为 example.com,用户以用户名 rouge@west 登录,SGD 将用户作为 rouge@west.example.com 进行验证。

    5. (可选)在 "Active Directory Default Domain"(Active Directory 默认域)字段中,键入一个域名用作默认值。

      如果用户在登录时不提供域,则使用默认域。例如,如果默认域设置为 east.example.com,用户以用户名 rouge 登录,SGD 将用户作为 rouge@east.example.com 进行验证。

  5. 在 "Review Selections"(查看所做的选择)步骤中,检查验证配置,然后单击 "Finish"(完成)。

    单击 "Finish"(完成)时,SGD 会创建一个名为 generated 的服务对象。服务对象用于管理目录服务配置,有关更多详细信息,请参见第 2.8.4 节 “使用服务对象”