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

合并 NIS+ 数据和 LDAP 数据

NIS+ 到 LDAP 迁移方案说明了当应该通过让 NIS+ 数据或 LDAP 数据成为授权数据来解决 NIS+ 数据和 LDAP 数据之间的冲突时,如何对 NIS+ 数据和 LDAP 数据进行同步。合并数据需要更复杂的过程。

本节中的示例过程做出了以下假定:

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

注意 – 注意 –

如果 LDAP 数据在步骤 4 的下载和步骤 10 的上载之间发生变化,则上载过程可能会覆写这些更改。因此,应当尽量避免在该过程中修改 LDAP 数据。有关更多信息,请查阅 LDAP 服务器文档。


  1. 使用 nisbackup 命令备份所有的 NIS+ 数据。


    # nisbackup -a /nisbackup 
    
  2. 标识那些包含必须与 LDAP 合并的数据的 NIS+ 表。将这些表的内容转储到平面文件中。例如,使用 nisaddent,按以下方式转储 group.org_dir 的内容:


    # nisaddent -d group | sort > /before/group
    

    nisaddent 输出传输到 sort 将便于稍后进行比较。

  3. 停止 NIS+ 服务。


    # svcadm disable network/rpc/nisplus:default
    

  4. 将 LDAP 数据下载到 NIS+ 中。


    # /usr/sbin/rpc.nisd -D -m tmpmap \
    
    -x nisplusLDAPinitialUpdateAction=from_ldap \
    
    -x nisplusLDAPinitialUpdateOnly=yes
    
  5. 启动 NIS+ 服务。


    # svcadm enable network/rpc/nisplus:default
    

    rpc.nisd 守护进程现在将为从 LDAP 下载的数据提供服务。如果不应当将 NIS+ 客户机向需要解决的冲突数据公开,请确保在活动 NIS+ 客户机很少(最好没有)时执行此步骤和后面的几个步骤。

  6. 转储受到影响的表中的 NIS+ 数据。

    以下示例使用 group.org_dir 表。


    # nisaddent -d group | sort > /after/group
    
  7. 创建这些表的合并版本。

    使用所选的文件合并过程来生成合并后的表。如果没有其他工具,则可以使用 diff(1) 来收集 /before/after 文件之间的不同部分,并用文本编辑器手动合并。

    以下示例假定合并结果位于 /after 中。

  8. 将合并后的数据装入到 NIS+ 中。以下示例使用 group 表。


    # nisaddent -m -f /after/group group
    
  9. 删除在合并之后不应当存在的 LDAP 项。

    A. 如果某些 LDAP 项在(现在合并的)NIS+ 数据中不存在,但是在上载之后不应当在 LDAP 中存在,则必须删除这些 LDAP 项。

    LDAP 服务器可能会提供一种用于删除多项的方便方法,如用于删除容器中所有项的方法。如果不属于这种情况,则可以使用 ldapsearch(1) 来为每个容器生成一系列项。例如,要生成 ou=Rpc 容器中所有项的列表,请按以下方式使用 ldapsearch (1)


    # ldapsearch -h server-address -D bind-DN -w password \
    
    -b ou=Rpc,search-base 'objectClass=*' dn | \
    
    grep -i ou=Rpc | grep -v -i \^ou=Rpc > \
    
    /tmp/delete-dn
    

    有关元参数(例如,server-addressbind-DN)的说明,请参见性能和索引

    B. 现在可以编辑结果文件 (/tmp/delete-dn),以便仅指定那些应当删除的项。或者,为了删除该容器中的所有项,可以按原样使用该文件,并依赖 NIS+ 上载功能来恢复 LDAP 数据。无论使用哪种方法,都应当先备份 LDAP 数据,然后执行下面的 ldapdelete 操作。

    C. 使用 ldapdelete 删除 LDAP 项,将 stdout(对于已删除的各项,通常为空行)重定向到 /dev/null


    # ldapdelete -h server-address -D bind-DN -w password \
    
    /tmp/delete-dn /dev/null
    

    D. 对于至少包含一个必须删除的项的容器,重复上述过程。

  10. 将合并后的 NIS+ 数据上载到 LDAP 中。

    1. 停止 NIS+ 服务。


      # svcadm disable network/rpc/nisplus:default
      
    2. 执行上载。


      # /usr/sbin/rpc.nisd -D -m tmpmap \
      
      -x nisplusLDAPinitialUpdateAction=to_ldap \
      
      -x nisplusLDAPinitialUpdateOnly=yes
      
  11. (可选)根据需要编辑 /lib/svc/method/nisplus 文件。

    • 如果 rpc.nisd 守护进程使用 LDAP 系统信息库,而且未在使用缺省文件 /var/yp/NIS+LDAPmapping,请使用 -m mappingfile 选项指定相应的映射文件。

    • 如果 rpc.nisd 守护进程提供 NIS (YP) 仿真,请通过使用 svcprop 或通过修改 /lib/svc/method/nisplus 文件来指定 -Y 选项。

    有关更多信息,请参见NIS+ 到 LDAP 转换工具和服务管理工具

  12. 启动 NIS+ 服务。


    # svcadm enable network/rpc/nisplus:default