系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)

第 10 章 LDAP 名称服务的规划要求(任务)

本章讨论开始设置和安装服务器与客户机之前应进行的高级规划。

本章包含以下主题:

LDAP 规划概述

LDAP 客户机配置文件是配置信息的集合,供 LDAP 客户机用来访问有关支持 LDAP 服务器的 LDAP 名称服务信息。本章讨论如何规划 LDAP 名称服务的各个方面,其中包括网络模型、目录信息树、安全模型和各种配置文件属性的缺省值,最后讨论如何准备进行数据填充。

规划 LDAP 网络模型

出于可用性和性能方面的考虑,公司范围的网络的每个子网都应当有各自的 LDAP 服务器,以便为子网中的所有 LDAP 客户机提供服务。 其中仅有一台服务器需要成为主 LDAP 服务器,其余服务器都可以是主服务器的副本。

要规划网络配置,请考虑可用服务器的数目,一台客户机如何与各台服务器通信,以及按什么顺序访问各台服务器。 如果每个子网只有一台服务器,则可以使用 defaultServerList 属性列出所有的服务器,并由 LDAP 客户机排列和处理访问顺序。如果由于速度或数据管理方面的原因而需要按特定顺序访问服务器,则应当使用 preferredServerList 属性定义服务器的固定访问顺序。请注意,为了减少主服务器上的负荷,不应将主服务器放在其中任何一个列表中。

此外,在规划服务器和网络配置时,可能会发现还有以下三个值得考虑的属性。bindTimeLimit 属性可用于设置 TCP 连接请求的超时值,searchTimeLimit 属性可用于设置 LDAP 搜索操作的超时值,profileTTL 属性可用于控制 LDAP 客户机从服务器下载其配置文件的频率。对于较慢或不稳定的网络,bindTimeLimitsearchTimeLimit 属性所需的值可能大于缺省值。对于部署的早期测试阶段,可能需要减小 profileTTL 属性的值,以便客户机加快对存储在 LDAP 服务器中的配置文件的频繁更改。

规划目录信息树 (Directory Information Tree , DIT)

LDAP 名称服务具有一个缺省的目录信息树 (Directory Information Tree , DIT) 和一个关联的缺省架构。例如,ou=people 容器包含用户帐户、口令和阴影信息。ou=hosts 容器包含有关网络中系统的信息。 ou=people 容器中的每一项都包含 objectclass posixAccountshadowAccount

缺省 DIT 是设计完善的目录结构,基于开放标准。 它能够满足大多数名称服务的需要,建议不对其进行更改直接使用。如果选择使用缺省 DIT,唯一需要确定的就是将从目录树中的哪个节点(基 DN)中搜索给定域的名称服务信息。此节点是使用 defaultSearchBase 属性指定的。 另外,您可能还需要设置 defaultSearchScope 属性,以通知客户机应当在哪个搜索范围内执行名称服务查找。是仅搜索该 DN 下的一层 (one),还是搜索该 DN 下的所有子树 (sub)?

但有时候,LDAP 名称服务需要更大的灵活性,以便可以处理现有的 DIT 或名称服务数据分散在目录树中的复杂 DIT。例如,用户帐户项可能存在于树的不同部分。客户机配置文件中的 serviceSearchDescriptorattributeMapobjectclassMap 属性旨在用于处理这些情况。

可以使用服务搜索描述符覆盖特定服务的缺省搜索基 DN、搜索范围和搜索过滤器。请参见服务搜索描述符 (Service Search Descriptor, SSD) 和架构映射

AttributeMapObjectclassMap 属性提供了一种进行架构映射的方法。这些属性使 LDAP 名称服务可以处理现有 DIT。例如,可以将 posixAccount 对象类映射到现有的对象类 myAccount,也可以将 posixAccount 对象类中的属性映射到 myAccount 对象类中的属性。

多台目录服务器

多台 LDAP 服务器可以为一个 DIT 提供服务。例如,DIT 的某些子树驻留在其他 LDAP 服务器上。 这种情况下,LDAP 服务器可能会指示 LDAP 客户机引用其他服务器,以获取已知但不在其自身数据库中的名称数据。如果规划这种 DIT 配置,则应当设置客户机的配置文件属性 followReferrals,指明 LDAP 名称服务遵循服务器引用,从而继续执行名称服务查找。但是,应尽可能使给定域的所有名称数据都位于一个目录服务器上。

如果希望客户机在大多数时间访问只读副本,并且仅在必要时才对读/写主服务器进行引用,则引用可能非常有用。这样,主服务器不会因为副本服务器可处理的请求而过载。

与其他应用程序共享数据

要充分利用 LDAP,对于每个逻辑项都应该有一个 LDAP 项。例如,对于用户,您不但可以拥有公司的用户数据库信息,还可以拥有 Solaris 帐户信息,还可能拥有特定于应用程序的数据。由于 posixAccountshadowAccount 是辅助对象类,因此可以将其添加到目录内的任何项中。 这将需要仔细规划、设置和管理。

选择目录后缀

有关如何选择适当目录后缀的信息,请参见 Sun Java System Directory Server(以前称为 Sun ONE Directory Server)文档。

LDAP 和副本服务器

设置副本服务器时可以采用三种不同的策略。

单主

在单主复制中,对于任何给定的分区或非分区网络,仅有一台主服务器保存有目录项的可写副本。所有副本服务器都拥有目录项的只读副本。副本服务器和主服务器都可以执行搜索、比较和绑定操作,但仅有主服务器才可以执行写入操作。

单主复制策略的潜在缺点是主服务器会出现单点故障。如果主服务器关闭,任何副本都无法处理写入操作。

浮动主

浮动主策略与单主策略相似,即在任何给定时间内,对于给定的分区或非分区网络,仅有一台主服务器具有写入功能。但是,实现浮动主策略时,如果主服务器关闭,则会有一台副本服务器通过某种算法自动转换为主服务器。

浮动主复制策略的潜在缺点是,如果网络成为分区网络并且分区任一端的副本服务器成为主服务器,则网络重新连接后,协调新主服务器的过程会非常复杂。

多主

通过多主复制,多台主服务器各自拥有目录项数据的读写副本。尽管多主策略消除了单点故障问题,但服务器之间仍会发生更新冲突。换句话说,如果几乎同时在两台主服务器上修改某项的属性,则必须备有解决更新冲突的策略,如“最后写入者取得权限”。

有关如何设置副本服务器的信息,请参阅所使用的 Sun Java System Directory Server 版本的管理指南

规划 LDAP 安全模型

要规划安全模型,首先应当考虑 LDAP 客户机与 LDAP 服务器通信应使用的身份。例如,必须确定是否希望使用强验证来防止用户口令通过网络传输,以及/或者是否需要加密 LDAP 客户机与 LDAP 服务器之间的会话以保护传输的 LDAP 数据。

可以使用配置文件中的 credentialLevelauthenticationMethod 属性实现此目的。credentialLevel 有三种可能的凭证级别:anonymousproxyproxy anonymous。 有关 LDAP 名称服务安全概念的详细讨论,请参见LDAP 名称服务安全模型


注意 –

如果启用 pam_ldap 帐户管理,则所有用户每次登录到系统时都必须提供口令。进行验证时必须提供登录口令。因此,如果启用了 pam_ldap,则使用 rshrloginssh 等工具进行的不基于口令的登录将会失败。


以下列出在规划安全模型时需要做出的主要决定:

规划 LDAP 的客户机配置文件和缺省属性值

完成以上规划步骤(网络模型、DIT 和安全模型)之后,应当对以下配置文件属性的值有一些了解:

以上各属性中,仅有 cndefaultServerListdefaultSearchBase 是必需的。这些属性没有缺省值。其余属性是可选的,其中有些具有缺省值。

有关设置 LDAP 客户机的更多信息,请参见第 12 章,设置 LDAP 客户机(任务)

规划 LDAP 数据填充

要使用数据填充 LDAP 服务器, 请在使用正确的 DIT 和架构配置 LDAP 服务器后,使用新的 ldapaddent 工具。此工具将根据 /etc 文件在 LDAP 容器中创建与文件对应的各项。 使用此工具,可以将数据填充到以下数据类型的容器中:aliasesauto_*bootparamsethersgrouphosts(包括 IPv6 地址)、netgroupnetmasksnetworkspasswdshadowprotocolspublickeyrpcservices

缺省情况下,ldapaddent 从标准输入中读取数据并将其添加到与命令行中指定的数据库关联的 LDAP 容器中。但是,可以使用 -f 选项来指定应当从其中读取数据的输入文件。

由于项存储在基于客户机配置的目录中,因此必须将客户机配置为使用 LDAP 名称服务。

为了获得更好的性能,请按以下顺序装入数据库:

  1. 装入 passwd 数据库后再装入 shadow 数据库

  2. 装入 networks 数据库后再装入 netmasks 数据库

  3. 装入 bootparams 数据库后再装入 ethers 数据库

请注意,在添加自动挂载程序项时,数据库名称的形式为 auto_*(例如 auto_home)。

如果要添加到 LDAP 服务器中的 /etc 文件来自不同的主机,则可以将这些文件全部合并到同一个 /etc 文件中,然后在一台主机上使用 ldapaddent 来添加这些文件;或者在每台主机都已配置为 LDAP 客户机的前提下,在不同的主机上逐个执行 ldapaddent

如果名称服务数据已经位于 NIS 服务器中,并且需要将数据移到 LDAP 服务器上以用于 LDAP 名称服务,请使用 ypcat(或 niscat)命令将 NIS 映射转储到文件中。然后,针对这些文件运行 ldapaddent,将数据添加到 LDAP 服务器中。


注意 –

ldapaddent 只能在 LDAP 客户机上运行。


以下过程假定将要从 yp 客户机提取表。

如何通过 ldapaddent 向服务器填充 host
  1. 确保使用 idsconfig 对 Sun Java System Directory Server 进行了设置。

  2. 在客户机上,成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  3. 使计算机成为 LDAP 客户机。


    # ldapclient init -a profileName=new -a domainName=west.example.com \
    
    192.168.0.1 
    
  4. 使用数据填充服务器。


    # ldapaddent -D “cn=directory manager” -f /etc/hosts hosts
    

    系统将提示您输入口令。

    在本示例中,ldapaddent 将使用已经在配置文件 "new" 中配置的验证方法。选择 "simple" 将导致口令以明文形式发送。有关更多信息,请参阅 ldapaddent(1M) 手册页。