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

使用 NIS 映射

本节包含以下信息:

获取映射信息

通过使用 ypcatypwhichypmatch 命令,用户随时可以从映射中获取有关映射的信息。在下面的示例中,mapname 同时指映射的正式名称和昵称(如果有)。

要列出映射中的所有值,请键入以下命令。


% ypcat mapname

要同时列出映射中的关键字和值(如果有),请键入以下命令。


% ypcat -k mapname

要列出所有映射昵称,请键入以下任何命令。


% ypcat -x

% ypmatch -x

% ypwhich -x

要列出所有可用映射及其主服务器,请键入以下命令。


% ypwhich -m

要列出特定映射的主服务器,请键入以下命令。


% ypwhich -m mapname

要以映射中的项匹配关键字,请键入以下命令。


% ypmatch key mapname

如果要查找的项不是映射中的关键字,请键入以下命令。


% ypcat mapname | grep item

其中,item 是要搜索的信息。要获取有关其他域的信息,请使用这些命令的 -d domainname 选项。

如果请求缺省域之外的域信息的计算机没有到被请求域的绑定,ypbind 将 在 /var/yp/binding/domainname/ypservers 文件中查找该域的服务器列表。如果此文件不存在,该命令将对服务器发出 RPC 广播。在此情况下,被请求域必须具有一台位于请求计算机所在子网的服务器。

更改映射的主服务器

要更改所选映射的主服务器,必须先在新 NIS 主服务器上生成该映射。由于旧的主服务器名称以关键字-值对的形式出现在现有映射中(此对由 makedbm 自动插入),因此将该映射复制到新的主服务器或使用 ypxfr 将副本传送到新的主服务器是不够的。必须将该关键字与新主服务器名重新关联。如果映射具有 ASCII 源文件,则应将此文件复制到新的主服务器。

如何更改映射的主服务器
  1. 在新的主服务器上,成为超级用户或承担等效角色。

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

  2. 更改目录。


    newmaster# cd /var/yp
    
  3. Makefile 必须具有新映射的项,才能指定要进行的映射。否则,请使用名为 sites.byname 的映射立即编辑 Makefile

  4. 要更新映射或重新进行映射,请键入以下命令。


    newmaster# make sites.byname
    
  5. 如果旧的主服务器仍为 NIS 服务器,请远程登录 (rlogin) 到旧的主服务器并编辑 Makefile。确保注释掉 Makefile 中创建 sites.byname 的部分,使其不再被创建。

  6. 如果 sites.byname 只作为 ndbm 文件存在,请在新的主服务器上重新创建它,方法是从任何 NIS 服务器上反汇编副本,然后通过 makedbm 运行反汇编的版本。


    newmaster# cd /var/yp
    
    newmaster# ypcat sites.byname | makedbm -domain/sites.byname
    

    在新的主服务器上创建映射后,必须向其他从属服务器发送新映射的副本。不要使用 yppush,因为其他从属服务器将试图从旧的主服务器(而不是新的主服务器)中获取新副本。解决此问题的典型方法是从新的主服务器向旧的主服务器传送映射副本。为此,请在旧的主服务器上成为超级用户或承担等效角色,并键入以下命令。


    oldmaster# /usr/lib/netsvc/yp/ypxfr -h newmaster sites.byname
    

    现在,可以安全运行 yppush。其余所有的从属服务器仍认为旧的主服务器是当前的主服务器,并将尝试从旧的主服务器中获取最新版本的映射。当客户机执行此操作时,它们将获取新映射,该映射会将新的主服务器指定为当前主服务器。

    如果此方法失败,则可以超级用户身份登录每台 NIS 服务器并执行上面所示的 ypxfr 命令。

修改配置文件

NIS 可以智能解析设置文件。尽管这样可以简化 NIS 管理,但它使 NIS 的行为对设置和配置文件中的更改更敏感。

进行以下任何一项修改时,请使用本节中的过程。

如何修改配置文件

更改 NIS 映射或映射源文件时,无需停止并启动 NIS。

请牢记以下几点。

  1. 成为超级用户或承担等效角色。

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

  2. 停止 NIS 服务器。


    # svcadm disable network/nis/server
    
  3. 对文件进行必要的更改。

  4. 启动 NIS 服务器。


    # svcadm enable network/nis/server
    

修改和使用 Makefile

可以修改 /var/yp 中缺省提供的 Makefile,以满足您的需要。可以添加或删除映射,还可以更改一些目录的名称。


提示 –

请保留原始的 Makefile 的未修改副本,以供将来参考。


使用 Makefile

要添加新的 NIS 映射,必须将该映射的 ndbm 文件副本放入域中每台 NIS 服务器上的 /var/yp/domainname 目录中。通常由 Makefile 执行此操作。在决定将哪台 NIS 服务器用作映射的主服务器之后,请修改主服务器上的 Makefile,以便您可以方便地重新生成映射。可将不同服务器用作不同映射的主服务器,但在大多数情况下,这会导致管理上的混乱。请尽量只将一台服务器设置为所有映射的主服务器。

通常,会将人工可读的文本文件通过 awksedgrep 过滤,以使其适合输入到 makedbm。有关示例,请参阅缺省的 Makefile。有关 make 命令的一般信息,请参见 make(1S)

在决定如何创建 make 可识别的相关性时,请使用 Makefile 中已经存在的机制。请注意,make 对于相关性规则中的行首是否存在制表符非常敏感。缺少制表符会使本来格式正确的项无效。

Makefile 中添加项涉及以下步骤。

例如,为使 Makefile 可以处理自动挂载程序输入文件,必须将 auto_direct.timeauto_home.time 映射添加到 NIS 数据库。

要将这些映射添加到 NIS 数据库,需要修改 Makefile

更改 Makefile 宏/变量

通过更改等号 (=) 右侧的值可以更改在 Makefile 顶部定义的变量设置。例如,如果不想使用 /etc 中的文件作为映射的输入,而想使用另一个目录(如 /var/etc/domainname)中的文件,则应将 DIRDIR=/etc 更改为 DIR=/var/etc/domainname。还应将 PWDIRPWDIR=/etc 更改为 PWDIR=/var/etc/domainname

包括以下变量。

修改 Makefile

以下过程介绍如何在 Makefile 中添加和删除数据库。

如何修改 Makefile 以使用特定数据库
  1. 成为超级用户或承担等效角色。

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

  2. 通过添加要添加的数据库的名称来修改以单词 all 开头的行:


    all: passwd group hosts ethers networks rpc services protocols \
    
    	netgroup bootparams aliases netid netmasks \
    
    	auto_direct auto_home auto_direct.time auto_home.time

    各项的顺序不相关,但连续行开头的空白空间必须为制表符,而不是空格。

  3. Makefile 结尾添加以下行:


    auto_direct: auto_direct.time
    
    auto_home: auto_home.time
  4. 在该文件中间添加 auto_direct.time 项。


    auto_direct.time: $(DIR)/auto_direct
    
     @(while read L; do echo $$L; done < $(DIR)/auto_direct
    
     $(CHKPIPE)) | \ (sed -e "/^#/d" -e "s/#.*$$//" -e "/^ *$$/d"
    
     $(CHKPIPE)) | \ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/auto_direct;
    
     @touch auto_direct.time;
    
     @echo "updated auto_direct";
    
     @if [ ! $(NOPUSH) ]; then $(YPPUSH) auto_direct; fi
    
     @if [ ! $(NOPUSH) ]; then echo "pushed auto_direct"; fi

    其中,

    • CHKPIPE 确保在将结果传输给后面的命令之前管道符号 (|) 左侧的操作已成功完成。如果管道左侧的运算未成功完成,该进程将中止,并显示 NIS make terminated 消息。

    • NOPUSH 阻止 makefile 调用 yppush,以使其不能向从属服务器传送新映射。如果未设置 NOPUSH,则会自动完成推送。

    开头的 while 循环旨在消除输入文件中的所有反斜杠扩展行。sed 脚本可消除注释和空行。

    对于其他所有自动挂载程序映射(如 auto_home)或其他任何非缺省映射,应执行相同的过程。

  5. 运行 make


    # make mapname
    

    其中,mapname 是要创建的映射的名称。

如何修改 Makefile 以删除数据库

如果不希望 Makefile 为特定数据库生成映射,请按如下方式编辑 Makefile

  1. all 规则中删除数据库名称。

  2. 为要删除的数据库删除或注释掉数据库规则。

    例如,要删除 hosts 数据库,应删除 hosts.time 项。

  3. 删除时间规则。

    例如,要删除 hosts 数据库,应删除 hosts: hosts.time 项。

  4. 从主服务器和从属服务器中删除映射。