JavaScript is required to for searching.
跳过导航链接
退出打印视图
系统管理指南:命名和目录服务(DNS、NIS 和 LDAP)     Oracle Solaris 10 8/11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分关于命名和目录服务

1.  命名和目录服务(概述)

2.  名称服务转换器(概述)

第 2 部分DNS 设置和管理

3.  DNS 设置和管理(参考)

第 3 部分NIS 设置和管理

4.  网络信息服务 (Network Information Service, NIS)(概述)

5.  设置和配置 NIS 服务

6.  管理 NIS(任务)

7.  NIS 疑难解答

第 4 部分LDAP 命名服务的设置和管理

8.  LDAP 命名服务介绍(概述/参考)

9.  LDAP 基本组件和概念(概述)

10.  LDAP 命名服务的规划要求(任务)

11.  为使用 LDAP 客户机设置 Sun Java System Directory Server(任务)

12.  设置 LDAP 客户机(任务)

13.  LDAP 疑难解答(参考)

14.  LDAP 一般参考(参考)

15.  从 NIS 转换为 LDAP(概述/任务)

16.  从 NIS+ 转换为 LDAP

NIS+ 到 LDAP 的转换概述

rpc.nisd 配置文件

NIS+ 到 LDAP 转换工具和服务管理工具

何时不使用 SMF 进行 NIS+ 到 LDAP 转换

修改 /lib/svc/method/nisplus 文件

创建属性和对象类

NIS+ 到 LDAP 转换入门

/etc/default/rpc.nisd 文件

常规配置

来自 LDAP 的配置数据

服务器选择

验证和安全性

LDAP 和 NIS+ 中的缺省位置

LDAP 通信的超时/大小限制和引用操作

错误操作

常规 LDAP 操作控制

/var/nis/NIS+LDAPmapping 文件

nisplusLDAPdatabaseIdMapping 属性

nisplusLDAPentryTtl 属性

nisplusLDAPobjectDN 属性

nisplusLDAPattributeFromColumn 属性

nisplusLDAPcolumnFromAttribute 属性

NIS+ 到 LDAP 迁移方案

如何通过一步操作将所有的 NIS+ 数据转换为 LDAP

如何通过一步操作将所有的 LDAP 数据转换为 NIS+

合并 NIS+ 数据和 LDAP 数据

如何合并 NIS+ 数据和 LDAP 数据

主服务器和副本服务器(从 NIS+ 转换为 LDAP)

复制时间标记

目录服务器(从 NIS+ 转换为 LDAP)

配置 Sun Java System Directory Server

指定服务器地址和端口号

安全性和验证

使用 SSL

性能和索引

映射表项以外的 NIS+ 对象

NIS+ 项的所有者、组、访问权限和 TTL

如何将其他项属性存储到 LDAP 中

主体名和网络名(从 NIS+ 转换为 LDAP)

client_infotimezone 表(从 NIS+ 转换为 LDAP)

client_info 属性和对象类

timezone 属性和对象类

添加新的对象映射(从 NIS+ 转换为 LDAP)

如何映射非项对象

添加项对象

将配置信息存储到 LDAP 中

A.  Solaris 10 软件中对 DNS、NIS 和 LDAP 的更新

服务管理工具的更改

DNS BIND

pam_ldap 更改

文档错误

词汇表

索引

添加新的对象映射(从 NIS+ 转换为 LDAP)

模板映射文件 /var/nis/NIS+LDAPmapping.template 中包含所有标准 NIS+ 对象的映射信息。为了支持对特定于站点或应用程序的对象进行映射,您需要添加新的映射项。对于非项(即,目录、组、链接或表)对象来说,此任务非常简单,但是对于项对象来说,如果对应项数据的 LDAP 组织方式与 NIS+ 所使用的组织方式有很大区别,则此任务会变得较为复杂。以下示例说明非项对象的简单情况。

如何映射非项对象

  1. 查找要映射的对象的全限定名称。

    如果此名称位于由 nisplusLDAPbaseDomain 属性指定的域名之下,您可以省略等于 nisplusLDAPbaseDomain 值的部分。

    例如,如果 <literal>nisplusLDAPbaseDomain</literal> 的值为 <literal> some.domain.</literal>,要映射的对象是名为 <literal>nodeinfo.some.domain. </literal> 的表,则对象名可以缩短为 <literal>nodeinfo</literal>。

  2. 创建用于标识对象的数据库 ID。

    数据库 ID 对于所使用的映射配置必须唯一,而没有进行其他方面的解释。它不显示在 LDAP 数据中。为了避免与项对象映射混淆,请创建一个用于标识表对象属性(而非表项)的数据库 ID 并在末尾处使用解释性字符串(如 _table)。

    在本示例中,使用的是数据库 ID nodeinfo_table,并通过添加以下内容在该数据库 ID 和标准映射文件位置 (/var/nis/NIS+LDAPmapping) 中的对象之间建立连接:

    nisplusLDAPdatabaseIdMapping    nodeinfo_table:nodeinfo.some.domain.

    假定 <literal>nisplusLDAPbaseDomain</literal> 为 <literal>some.domain. </literal>,则以下内容也有效:

    nisplusLDAPdatabaseIdMapping    nodeinfo_table:nodeinfo
  3. 确定适合该对象的 TTL。

    在这段时间内,rpc.nisd 守护进程会将该对象的本地副本视为有效。在 TTL 过期之后,再次引用该对象会启动 LDAP 查找功能以刷新该对象。

    有两个不同的 TTL 值:第一个值是在 rpc.nisd 守护进程(在重新引导或重新启动之后)首次从磁盘中装入该对象时设置的,第二个值与从 LDAP 执行的所有刷新有关。第一个 TTL 是从所配置的范围中随机选择的。例如,如果 nodeinfo_table 应当在初始装入之后的一到三个小时内以及此后的十二个小时内有效,则需要指定如下内容:

    nisplusLDAPentryTtl        nodeinfo_table:3600:10800:43200
  4. 确定对象数据在 LDAP 中的存储位置。

    模板映射文件建议将非项对象数据放到 ou=nisPlus 容器中。

    如果您使用此方案,而且尚未创建相应的属性、对象类和容器,请参见映射表项以外的 NIS+ 对象

    例如,假定您希望将 nodeinfo 对象存储到 ou=nisPlus,dc=some,dc=domain 容器中,而且 LDAP 项应当具有 cn nodeinfo。请创建以下 nisplusLDAPobjectDN

    nisplusLDAPobjectDN    nodeinfo_table:\
                    cn=nodeinfo,ou=nisPlus,dc=some,dc=domain?base?\
                    objectClass=nisplusObjectContainer:\
                    cn=nodeinfo,ou=nisPlus,dc=some,dc=domain?base?\
                        objectClass=nisplusObjectContainer,\
                        objectClass=top

    由于 NIS+ 副本服务器不将数据写入 LDAP 中,因此您可以为主服务器和副本服务器使用以上 nisplusLDAPobjectDN

  5. (如果尚未在 NIS+ 中创建要映射的 NIS+ 对象,请跳过此步骤。)将对象数据存储到 LDAP 中。您可以使用 rpc.nisd 守护进程来存储对象数据,但是使用 nisldapmaptest(1M) 实用程序会更方便,因为这样可以使 rpc.nisd 守护进程保持运行状态。
    # nisldapmaptest -m /var/nis/NIS+LDAPmapping -o -t nodeinfo -r

    -o 选项指定表对象本身(而非表项)。

  6. 检验对象数据是否存储在 LDAP 中。(本示例假定 LDAP 服务器在本地计算机的端口 389 上运行。
    # ldapsearch -b ou=nisPlus,dc=some,dc=domain cn=nodeinfo

    将出现类似以下的输出:

    dn: cn=nodeinfo,ou=nisPlus,dc=some,dc=domain
    objectclass: nisplusObjectContainer
    objectclass: top
    cn: nodeinfo
    nisplusobject=<base 64 encoded data>

添加项对象

NIS+LDAPmapping(4) 详细指定了表项映射的语法和语义,还举例说明了如何使用每个语义元素。但是,最简单且最不易出错的方法通常是标识与所需映射相似的现有映射,然后复制并修改这个现有映射。

例如,假定您有一个名为 nodeinfo 的 NIS+ 表,该表用于存储节点的清单和所有者信息。假定该 NIS+ 表是通过以下命令创建的。

# nistbladm -c -D access=og=rmcd,nw=r -s : nodeinfo_tbl \
cname=S inventory=S owner= nodeinfo.`domainname`.

cname 列中应当包含节点的标准名称,换言之,与节点的 hosts.org_dir 表中 cname 列的值相同。

同时还假定:对应的信息保存在 LDAP 中的 ou=Hosts 容器中,nodeInfo 对象类(在本示例中为新创建的对象类,而不是在 RFC 中定义的对象类)具有 cn 作为 MUST 属性,nodeInventorynodeOwner 是 MAY 属性。

为了将现有的 nodeinfo 数据上载到 LDAP 中,在单独的文件中新建映射属性将会很方便。例如,可以使用 /var/nis/tmpmapping

  1. 创建一个数据库 ID 来标识要映射的 NIS+ 表。

    nisplusLDAPdatabaseIdMapping    nodeinfo:nodeinfo
  2. nodeinfo 表中的项设置 TTL。由于极少对这些信息进行更改,因此请将 TTL 设置为十二个小时。当 rpc.nisd 守护进程首次从磁盘中加载 nodeinfo 表时,该表中项的 TTL 将随机选择为六到十二个小时之间的值。

    nisplusLDAPentryTtl        nodeinfo:21600:43200:43200
  3. 标识与要创建的映射具有相似属性的现有映射。在本示例中,映射属性值非常简单(直接赋值),而将 LDAP 数据存储到现有容器中则较为复杂,因此,在删除 nodeinfo 数据的过程中一定要格外小心。如果不希望删除整个 ou=Hosts 项,而只希望删除 nodeInventorynodeOwner 属性,则将需要一个特殊的删除规则集合。

    总之,就是要查找一个既共享某个容器、又具有删除规则集合的映射。一个可能的备选项就是 netmasks 映射,该映射共享 ou=Networks 容器,而且确实具有一个删除规则集合。

  4. 模板映射 netmasks 具有缺省映射(位于 /var/nis/NIS+LDAPmapping.template 中),如下所示:

    nisplusLDAPobjectDN    netmasks:ou=Networks,?one?objectClass=ipNetwork,\
               ipNetMaskNumber=*:\
                  ou=Networks,?one?objectClass=ipNetwork:
                  dbid=netmasks_del

    在转移到新的 nodeinfo 映射之后,数据库 ID 应当为 nodeinfo,容器应当为 ou=Hosts,对象类应当为 nodeInfo。因此,nodeinfo 映射的第一行将变为:

    nisplusLDAPobjectDN    nodeinfo:ou=Hosts,?one?objectClass=nodeInfo,\

    netmasks 映射的第二行是搜索过滤器的一部分,它只选择那些包含 ipNetMaskNumber 属性的 ou=Networks 项。在本示例中,它选择那些具有以下 nodeInventory 属性的 ou=Hosts 项:

    nodeInventory=*:\

    第三行和第四行是 nisplusLDAPobjectDN 的写入部分,它们指定 nodeinfo 数据在 LDAP 中的写入位置以及在删除 nodeinfo 数据时所使用的规则集合。在本例中,创建一个由数据库 ID nodeinfo_del 标识的删除规则集合。因为您总是写入 ou=Hosts 中的现有项,所以只需要为 nodeinfo 数据属性指定对象类,如下所示:

    ou=Hosts,?one?objectClass=nodeInfo:\
                      dbid=nodeinfo_del
        

    将所有这些汇总到一起,nisplusLDAPobjectDN 将如下所示:

    nisplusLDAPobjectDN    nodeinfo:ou=Hosts,?one?objectClass=nodeInfo,\
                  nodeInventory=*:\
                      ou=Hosts,?one?objectClass=nodeInfo:\
                      dbid=nodeinfo_del
  5. 创建一个将 nodeinfo 数据从 NIS+ 映射到 LDAP 的规则集合。模板(来自 netmasks)如下所示:

    nisplusLDAPattributeFromColumn \
            netmasks:    dn=("ipNetworkNumber=%s,", addr), \
                            ipNetworkNumber=addr, \
                            ipNetmaskNumber=mask, \
                            description=comment

    在本例中,ou=Hosts 容器会使情况更复杂,因为 RFC 2307 中规定 dn 中应当包含 IP 地址。但是,IP 地址不存储在 nodeinfo 表中,因此您必须以其他方式获取它。幸运的是,模板文件中的 crednode 映射说明了如何获取 IP 地址。

    nisplusLDAPattributeFromColumn \
       crednode:    dn=("cn=%s+ipHostNumber=%s,", \
                                    (cname, "%s.*"), \
       ldap:ipHostNumber:?one?("cn=%s", (cname, "%s.*"))), \

    因此,您可以复制 crednode 映射的这一部分。但是,在本例中,cname 列的值是实际的主机名(而非主体名),因此,您不必单独提取 cname 的某个部分,而是可以明确替换属性名和列名,此时 nodeinfo 映射将变为:

    nisplusLDAPattributeFromColumn \
       nodeinfo:    dn=("cn=%s+ipHostNumber=%s,", cname, \
       ldap:ipHostNumber:?one?("cn=%s", cname)), \
               nodeInventory=inventory, \
               nodeOwner=owner
  6. 将数据从 LDAP 映射到 NIS+ 时,模板的 netmasks 项如下所示:

    nisplusLDAPcolumnFromAttribute \
            netmasks:    addr=ipNetworkNumber, \
                    mask=ipNetmaskNumber, \
                    comment=description

    在替换属性名和列名之后,结果如下所示:

    nisplusLDAPcolumnFromAttribute \
            nodeinfo:    cname=cn, \
                    inventory=nodeInventory, \
                    owner=nodeOwner
  7. netmasks 的删除规则集合如下所示:

    nisplusLDAPattributeFromColumn \
            netmasks_del:    dn=("ipNetworkNumber=%s,", addr), \
                    ipNetmaskNumber=

    以上规则集合指定当 NIS+ 中的 netmasks 项被删除时,对应的 ou=Networks LDAP 项中的 ipNetmaskNumber 属性也会被删除。在本例中,删除的是 nodeInventorynodeOwner 属性。因此,使用步骤 5 中的 dn 规范时,结果如下所示:

    nisplusLDAPattributeFromColumn \
            nodeinfo_del:    dn=("cn=%s+ipHostNumber=%s,", cname, \
                ldap:ipHostNumber:?one?("cn=%s", cname)), \
                    nodeInventory=, \
                    nodeOwner=

    映射信息完整无缺。

  8. 如果 NIS+ nodeinfo 表中已经有数据,请将这些数据上载到 LDAP 中。将新的 nodeinfo 映射信息放到一个单独的文件 /var/nis/tmpmapping 中。

    # /usr/sbin/rpc.nisd -D -m /var/nis/tmpmapping \
    -x nisplusLDAPinitialUpdateAction=to_ldap \
    -x nisplusLDAPinitialUpdateOnly=yes
  9. 将临时文件 /var/nis/tmpmapping 中的映射信息添加到实际映射文件中。这可以借助于编辑器来完成,也可以按以下方式附加数据(假定实际映射文件为 /var/nis/NIS+LDAPmapping)来完成:

    # cp -p /var/nis/NIS+LDAPmapping \
    /var/nis/NIS+LDAPmapping.backup
    # cat /var/nis/tmpmapping >> /var/nis/NIS+LDAPmapping

    注意

    注意 - 请注意双箭头 ">>" 表示重定向。单箭头 ">" 表示将覆写目标文件。