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

第 6 章 管理 NIS(任务)

本章介绍了如何管理 NIS。本章包含以下主题:


注意 –

NIS 服务由服务管理工具管理。可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。有关将 SMF 与 NIS 结合使用的更多信息,请参见NIS 和服务管理工具。有关 SMF 的概述,请参阅System Administration Guide: Basic Administration中的“Managing Services (Overview)”。另请参阅 svcadm(1M)svcs(1) 手册页以获取更多详细信息。

还可以使用 ypstartypstop 命令来启动和停止 NIS 服务。有关更多信息,请参见 ypstart(1M)ypstop(1M) 手册页。


口令文件和名称空间安全

出于安全原因,请遵循以下原则。

例如,只要主服务器口令输入文件本身不是指向其他文件的链接并且在 Makefile 中已指定,就可将这些文件存储在诸如 /var/yp 等目录或您选择的任何目录中。使用服务管理工具或 ypstart 脚本启动 NIS 服务时,将根据 Makefile 中指定的配置设置正确的目录选项。


注意 –

除了早期的 Solaris 1 版本 passwd 文件格式外,此 NIS 实现还接受 Solaris 2 passwdshadow 文件格式作为生成 NIS 口令映射的输入。


管理 NIS 用户

本节包括有关设置用户口令、向 NIS 域添加新用户以及将用户指定给 netgroups 的信息。

如何向 NIS 域添加新 NIS 用户

  1. 在主 NIS 服务器上,成为超级用户或承担等效角色。

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

  2. 使用 useradd 命令创建新用户的登录 ID。


    # useradd userID
    

    userID 是新用户的登录 ID。此命令将在主 NIS 服务器上的 /etc/passwd/etc/shadow 文件中创建项。

  3. 创建新用户的初始口令。

    要创建新用户可用来登录的初始口令,请运行 passwd 命令。


    # passwd userID
    

    其中,userID 是新用户的登录 ID。系统将提示您输入要指定给此用户的口令。

    由于 useradd 命令创建的口令项已锁定(这意味着新用户无法登录),因此必须执行此步骤。通过指定初始口令,可以解除对该项的锁定。

  4. 如有必要,可将新项复制到服务器的 passwd 映射输入文件中。

    主服务器上的映射源文件应位于 /etc 之外的目录中。将新行从 /etc/passwd/etc/shadow 文件复制并粘贴到服务器上的 passwd 映射输入文件中。有关其他信息,请参见口令文件和名称空间安全

    例如,如果添加了新用户 brown,则 /etc/passwd 中要复制到 passwd 输入文件的行如下所示:


    brown:x:123:10:User brown:/home/brown:/bin/csh:

    要从 /etc/shadow 中复制的有关 brown 的行将如下所示:


    brown:W12345GkHic:6445::::::
  5. 确保 Makefile 正确指定口令输入文件所在的目录。

  6. 如果合适,请从 /etc/passwd/etc/shadow 输入文件中删除新用户的项。

    出于安全原因,请不要在 NIS 主服务器 /etc/passwd/etc/shadow 文件中保留用户项。在将新用户的项复制到存储在其他某个目录中的 NIS 映射源文件后,请在主服务器上使用 userdel 命令删除新用户。

    例如,要从主服务器的 /etc 文件中删除新用户 brown,可以输入以下内容。


    # userdel brown
    

    有关 userdel 的更多信息,请参见 userdel 手册页。

  7. 更新 NIS passwd 映射。

    在更新主服务器上的 passwd 输入文件后,请在包含源文件的目录中运行 make,以更新 passwd 映射。


    # userdel brown
    
    # cd /var/yp
    
    # /usr/ccs/bin/make passwd
    
  8. 将为其登录 ID 指定的初始口令告知新用户。

    登录后,新用户随时可以通过运行 passwd 来建立不同口令。

设置用户口令

用户通过运行 passwd 可以更改口令。

% passwd username

必须先在主服务器上启动 rpc.yppasswdd 守护进程,以更新口令文件,用户才能更改口令。

rpc.yppasswdd 守护进程会在主服务器上自动启动。请注意,如果在 rpc.yppasswdd 中包含 -m 选项,则在 /var/yp 中修改文件后将立即强制执行 make。如果要避免在每次更改 passwd 文件后都执行此 make,请在 ypstart 脚本的 rpc.yppasswd 命令中删除 -m 选项,并通过 crontab 文件控制 passwd 映射的推送。


注意 –

rpc.yppasswd -m 命令后不应包含任何参数。尽管可以通过编辑 ypstart 脚本文件来实现不同操作,但除了可以选择删除 -m 选项外,建议不要修改此文件。此文件调用的所有命令和守护进程都具有适当的命令行参数集。如果选择编辑此文件,在编辑 rpc.yppasswdd 命令时应特别小心。如果添加对 passwd.adjunct 文件的显式调用,必须使用路径 $PWDIR/security/passwd.adjunct;否则,将产生不正确的处理结果。


NIS 网络组

NIS 网络组是为实现您的管理目标而定义的用户或计算机组(集)。例如,可以创建执行以下功能的网络组。

每个网络组都有一个网络组名。网络组不直接设置权限或访问权限。而是由其他 NIS 映射在通常使用用户名或计算机名的地方使用网络组名。例如,假设您创建了一个由网络管理员构成的网络组,名为 netadmins。要向 netadmins 组的所有成员授予对给定计算机的访问权限,只需向该计算机的 /etc/passwd 文件中添加一个 netadmin 项即可。也可以将网络组名添加到 /etc/netgroup 文件中,并将其传播到 NIS netgroup 映射。有关使用网络组的更多详细信息,请参见 netgroup(4)

在使用 NIS 的网络中,主 NIS 服务器上的 netgroup 输入文件用于生成三种映射:netgroupnetgroup.byusernetgroup.byhostnetgroup 映射包含 netgroup 输入文件中的基本信息。另外两种 NIS 映射中包含的信息的格式可在给定计算机或用户的情况下加速网络组信息的查找。

netgroup 输入文件中的项格式如下:name ID,其中 name 是为网络组给定的名称,而 ID 用于标识属于该网络组的计算机或用户。根据需要,可为网络组指定尽量多的 ID(成员),ID 之间用逗号分隔。例如,要创建具有三个成员的网络组,netgroup 输入文件项将使用以下格式:name ID, ID, IDnetgroup 输入文件项中的成员 ID 使用以下格式。


([-|machine], [-|user], [domain])

其中,machine 是计算机名,user 是用户 ID,domain 是计算机或用户的 NIS 域。domain 元素是可选的,并且只应用来标识其他某个 NIS 域中的计算机或用户。每个成员项的 machineuser 元素是必需的,但连字符 (-) 用来表示内容为空。项中的计算机和用户元素之间不存在必然联系。

下面是两个 netgroup 输入文件项样例,每个样例都创建一个名为 admins 的网络组,网络组由用户 haurijuanita(后者在远程域 sales 中)以及计算机 altairsirius 组成。


admins (altair, hauri), (sirius,juanita,sales)

admins (altair,-), (sirius,-), (-,hauri), (-,juanita,sales)

各个程序会在登录、远程挂载、远程登录以及远程 shell 创建期间使用 NIS 映射来进行权限检查。这些程序包括 mountdloginrloginrsh。如果 login 命令在 passwd 数据库中遇到网络组名,它会在网络组映射中查询用户类别。 如果 mountd 守护进程在 /etc/dfs/dfstab 文件中遇到网络组名,它将查看计算机分类的网络组映射。rloginrsh(实际上,任何使用 ruserok 接口的程序)在 /etc/hosts.equiv.rhosts 文件中遇到网络组名时,会在网络组映射中查询计算机以及用户分类信息。

如果向网络中添加新 NIS 用户或计算机,请确保在 netgroup 文件中将其添加到相应网络组中。然后使用 makeyppush 命令创建网络组映射,并将其推送到所有 NIS 服务器。有关使用网络组和网络组输入文件语法的详细信息,请参见 netgroup(4)

使用 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. 从主服务器和从属服务器中删除映射。

更新和修改现有映射

安装 NIS 之后,您可能会发现,有些映射需要频繁更新,而其他映射则从来不需要更改。例如,在大公司的网络中,passwd.byname 映射可能会频繁更改,而 auto_master 映射则只进行少量更改,甚至不进行任何更改。

缺省 NIS 映射中所述,缺省 NIS 映射的缺省位置是在主服务器上的 /var/yp/domainname 中,其中 domainname 是 NIS 域的名称。需要更新映射时,可以根据该映射是否为缺省映射来使用两个更新过程之一。

以下各部分介绍如何使用各种更新工具。实际上,您可能决定只在系统已启动并运行后添加非缺省映射或更改 NIS 服务器集时才使用这些工具。

如何更新随缺省集提供的映射

使用以下过程可以更新随缺省集提供的映射。

  1. 成为主服务器上的超级用户。

    请始终只在主服务器上修改 NIS 映射。

  2. 无论要更改的映射的源文件位于 /etc 中还是位于您选择的其他某个目录中,都对该文件进行编辑。

  3. 键入以下命令。


    # cd /var/yp
    
    # make mapname
    

    然后,make 命令将根据您在其相应文件中所做的更改来更新映射。该命令还会在其他服务器中传播更改。

传播 NIS 映射

更改映射后,Makefile 将使用 yppush 向从属服务器传播新映射(除非在 Makefile 中设置了 NOPUSH。)它通过通知 ypserv 守护进程和发送映射传送请求来完成此操作。然后,从属服务器上的 ypserv 守护进程会启动 ypxfr 进程,该进程反过来与主服务器上的 ypxfrd 守护进程联系。在进行一些基本检查(例如,映射是否真的发生了更改?)后,便会传送映射。然后,从属服务器上的 ypxfr 将向 yppush 进程发送响应,指明传送是否成功。


注意 –

上述过程适用于新创建的、但从属服务器中尚不存在的映射。必须通过在从属服务器上运行 ypxfr 将新映射发送给从属服务器。


有时候,映射无法传播,必须使用 ypxfr 手动发送新映射信息。可以选择以两种不同方法使用 ypxfr:通过根 crontab 文件定期使用,或在命令行中交互使用。这些方法将在以下各节中进行讨论。

cron 用于映射传送

不同的映射具有不同的更改速率。例如,有些映射有时候几个月都不更改一次(如缺省映射中的 protocols.byname 以及非缺省映射中的 auto_master);但 passwd.byname 可能一天就会进行多次更改。使用 crontab 命令调度映射传送可为各映射设置特定的传播时间。

要以适合于映射的速率定期运行 ypxfr,每台从属服务器中的根 crontab 文件都应包含相应的 ypxfr 项。ypxfr 将与主服务器联系,并仅在主服务器中的副本比本地副本更新时才传送映射。


注意 –

如果主服务器运行带有缺省 -m 选项的 rpc.yppasswdd,则每次有人更改 yp 口令时,passwd 守护进程都会运行 make,以重新生成 passwd 映射。


将 Shell 脚本用于 cronypxfr

作为为每个映射创建单独的 crontab 项的备选方法,您可能更喜欢让根 crontab 命令运行可定期更新所有映射的 shell 脚本。用于更新映射的 shell 脚本样例位于 /usr/lib/netsvc/yp 目录中。这些脚本名为 ypxfr_1perdayypxfr_1perhourypxfr_2perday。您可以修改或替换这些 shell 脚本以满足站点需要。实例 6–1 显示了缺省 ypxfr_1perday shell 脚本。


实例 6–1 ypxfr_1perday Shell 脚本


#! /bin/sh

#

# ypxfr_1perday.sh - Do daily yp map check/updates

PATH=/bin:/usr/bin:/usr/lib/netsvc/yp:$PATH

export PATH

# set -xv

ypxfr group.byname

ypxfr group.bygid

ypxfr protocols.byname

ypxfr protocols.bynumber

ypxfr networks.byname

ypxfr networks.byaddr

ypxfr services.byname

ypxfr ypservers

如果根 crontab 每天执行一次,此 shell 脚本可以每天更新一次映射。还可以使脚本以其他频率更新映射(如每周一次、每月一次、每小时一次等等)。但请注意,频繁传播映射会降低性能。

在为 NIS 域配置的每台从属服务器上,以超级用户的身份运行相同的 shell 脚本。逐台服务器更改确切的执行时间,以避免使主服务器陷入停顿状态。

如果要从特定的从属服务器中传送映射,请在 shell 脚本中使用 ypxfr-h machine 选项。放入脚本中的命令的语法如下所示。


# /usr/lib/netsvc/yp/ypxfr -h machine [ -c ] mapname

其中,machine 是要传送的映射所在服务器的名称,mapname 是所请求的映射的名称。如果使用 -h 选项而不指定计算机,ypxfr 将尝试从主服务器中获取映射。如果执行 ypxfrypserv 未在本地运行,则必须使用 -c 标志,以使 ypxfr 不向本地 ypserver 发送清除当前映射的请求。

可以使用 -s domain 选项从其他域向本地域传送映射。这些映射在各个域中应该相同。例如,两个域可能共享相同的 services.bynameservices.byaddr 映射。或者,也可以使用 rcprdist 来获取更多控制,以便跨域传送文件。

直接调用 ypxfr

另一种调用 ypxfr 的方法是将其作为命令来运行。通常,只在异常情况下使用此方法-例如,通过设置临时 NIS 服务器来创建测试环境时或在尝试使断开服务的 NIS 服务器快速与其他服务器保持一致时。

记录 ypxfr 活动

可在日志文件中捕获 ypxfr 的传送尝试和结果。如果存在名为 /var/yp/ypxfr.log 的文件,则会向该文件中附加结果。对于该日志文件的大小没有任何限制。为防止日志文件无限制地增大,请通过键入以下命令不断清空该文件。


# cd /var/yp

# cp ypxfr.log ypxfr.log.old

# cat /dev/null > /var/yp/ypxfr.log

可让 crontab 一周执行一次上述命令。要禁用日志记录,请删除日志文件。

修改缺省映射

要更新非缺省映射,必须执行下列操作。

  1. 创建或编辑对应的文本文件。

  2. 生成(或重新生成)新映射或更新的映射。有两种方法可以生成映射。

    • 使用 Makefile。使用 Makefile 是生成非缺省映射的首选方法。如果映射在 Makefile 中具有一项,请运行 make name,其中 name 是要生成的映射的名称。如果映射没有 Makefile 项,请尝试根据修改和使用 Makefile中的说明创建一项。

    • 使用 /usr/sbin/makedbm 程序。makedbm(1M) 全面介绍了此命令。

使用 makedbm 修改非缺省映射

如果没有输入文件,则可通过两种不同的方法使用 makedbm 来修改映射:

从文本文件中创建新映射

假设使用编辑器或 shell 脚本在主服务器上创建了一个文本文件 /var/yp/mymap.asc。您要从此文件中创建一个 NIS 映射,并使其位于 homedomain 子目录中。为此,请在主服务器上键入以下命令。


# cd /var/yp 

# makedbm mymap.asc homedomain/mymap

mymap 映射现在存在于主服务器上的 homedomain 目录中。要向从属服务器分发新映射,请运行 ypxfr

向基于文件的映射中添加项

mymap 中添加项很简单。首先,必须修改文本文件 /var/yp/mymap.asc。如果修改实际的 dbm 文件而不修改对应的文本文件,则修改会丢失。然后,按上面所示运行 makedbm

通过标准输入创建映射

如果不存在原始文本文件,请通过键入 makedbm 的输入从键盘创建 NIS 映射,如下所示(以 Ctrl-D 组合键结束)。


ypmaster# cd /var/yp

ypmaster# makedbm -homedomain/mymapkey1 value1 key2 value2 key3 value3

修改通过标准输入创建的映射

如果以后需要修改映射,可以使用 makedbm 反编译映射,并创建一个临时的中间文本文件。要反编译映射并创建临时文件,请键入以下命令。


% cd /var/yp 

% makedbm -u homedomain/mymap > mymap.temp

在生成的临时文件 mymap.temp 中,每行包含一项。根据需要,可以使用任何文本编辑器编辑此文件。

要更新映射,请通过键入以下命令将修改过的临时文件的名称提供给 makedbm


% makedbm mymap.temp homedomain/mymap

% rm mymap.temp

然后,成为超级用户并键入以下命令,以将映射传播给从属服务器。


# yppush mymap

前面几段介绍了如何使用 makedbm 创建映射;但是,您实际必须执行的每项操作都可以通过 ypinitMakefile 来完成,除非在系统启动并运行后向数据库中添加了非缺省映射或更改了 NIS 服务器集。

无论在 /var/yp 中使用 Makefile 还是其他某个过程,目标都是相同的。格式正确的新 dbm 文件对必须在主服务器上的映射目录中结束。

添加从属服务器

NIS 运行后,可能需要创建在为 ypinit 给定的初始列表中未包括的 NIS 从属服务器。

添加 NIS 从属服务器:

如何添加从属服务器
  1. 在主服务器上,成为超级用户或承担等效角色。

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

  2. 转至 NIS 域目录。


    # cd /var/yp/domainname
    
  3. 反编译 ypservers 文件。


    # makedbm -u ypservers >/tmp/temp_file
    

    makedbm 命令可将 ypserversndbm 格式转换为临时 ASCII 文件 /tmp/temp_file

  4. 使用文本编辑器编辑 /tmp/temp_file 文件。将新的从属服务器的名称添加到服务器列表中。然后,保存并关闭该文件。

  5. 运行 makedbm 命令,以 temp_file 作为输入文件,以 ypservers 作为输出文件。


    # makedbm /tmp/temp_file ypservers
    

    然后,makedbm 会将 ypservers 重新转换回 ndbm 格式。

  6. 通过在从属服务器上键入以下命令来验证 ypservers 映射是否正确(由于没有用于 ypservers 的 ASCII 文件)。


    slave3# makedbm -u ypservers
    

    makedbm 命令会在屏幕上显示 ypservers 中的每项。


    注意 –

    如果某计算机名不在 ypservers 中,则该计算机不会收到映射文件的更新,原因是 yppush 会从此映射查看从属服务器的列表。


  7. 在新的 NIS 从属服务器上,成为超级用户或承担等效角色。

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

  8. 设置新的从属服务器的 NIS 域目录。

    从主服务器中复制 NIS 映射,然后启动 NIS 客户机。运行 ypinit 命令时,请遵循提示并按优先级顺序列出 NIS 服务器。


    slave3# cd /var/yp
    
    slave3# ypinit -c
    
    slave3# svcadm enable network/nis/client
    

  9. 将此计算机作为从属服务器进行初始化。


    slave3# /usr/sbin/ypinit -s ypmaster
    

    其中,ypmaster 是现有的 NIS 主服务器的计算机名。

  10. 停止作为 NIS 客户机运行的计算机。


    # svcadm disable network/nis/client
    
  11. 启动 NIS 从属服务。


    # svcadm enable network/nis/server
    

使用启用 C2 安全的 NIS

如果存在 $PWDIR/security/passwd.adjunct 文件,则会自动启动 C2 安全。 ($PWDIR/var/yp/Makefile 中定义。)C2 安全模式使用 passwd.adjunct 文件来创建 passwd.adjunct NIS 映射。在此实现中,NIS 允许同时使用 passwd.adjunct 文件和 shadow 文件来管理安全。仅当键入以下命令时,才会处理 passwd.adjunct 文件。


# make passwd.adjunct

在 C2 安全模式下手动运行 make 时,make passwd 命令只处理 passwd 映射,而不处理 passwd.adjunct 映射。

更改计算机的 NIS 域

要更改计算机的 NIS 域名,请执行以下操作。

如何更改计算机的 NIS 域名
  1. 成为超级用户或承担等效角色。

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

  2. 编辑计算机的 /etc/defaultdomain 文件,用计算机的新域名替换其当前内容。

    例如,如果当前域名为 sales.doc.com,则可将其更改为 research.doc.com

  3. 运行 domainname `cat /etc/defaultdomain'

  4. 将计算机设置为 NIS 客户机、从属服务器或主服务器。

    有关详细信息,请参见第 5 章,设置和配置 NIS 服务

将 NIS 与 DNS 结合使用

通常,使用 nsswitch.conf 文件配置 NIS 客户机,使其只将 NIS 用于计算机名和地址查找。如果此类查找失败,NIS 服务器可将这些查找转发给 DNS。

如何通过 NIS 和 DNS 配置计算机名和地址查找
  1. 成为超级用户或承担等效角色。

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

  2. 两个映射文件(hosts.bynamehosts.byaddr)中必须包括 YP_INTERDOMAIN 关键字。要测试此关键字,请编辑 Makefile 并修改以下各行。


    #B=-b
    
    B=


    B=-b
    
    #B=

    现在,makedbm 在生成映射时将以 -b 标志启动,并会在 ndbm 文件中插入 YP_INTERDOMAIN 关键字。

  3. 运行 make 命令,以重新生成映射。


    # /usr/ccs/bin/make hosts
    
  4. 检查是否所有 NIS 服务器的 /etc/resolv.conf 文件都指向有效的名称服务器。


    注意 –

    如果存在未运行 Solaris 发行版 2 的 NIS 服务器,请确保主机映射中存在 YP_INTERDOMAIN


  5. 要启用 DNS 转发,请重新启动每台服务器。


    # svcadm restart network/nis/server:<instance>
    

    在此 NIS 实现中,ypserv 将自动以 -d 选项启动,以将请求转发给 DNS。

处理混合的 NIS 域

如果主服务器和从属服务器都未运行 Solaris 2,请参阅下表了解如何避免可能遇到的问题。表示法 "4.0.3+" 表示该发行版以及更新发行版的 SunOS。makedm -b 是对 Makefile 中的 "B" 变量的引用。

表 6–1 异构 NIS 域中的 NIS/DNS

从属 

主 

4.0.3+ 

Solaris NIS 

4.0.3+

主: makedbm -b

从属: ypxfr

主: makedbm -b

从属: ypxfr -b

主: ypserv -d

从属: ypxfr -b

Solaris NIS

主: makedbm -b

从属: ypxfr

主: makedbm -b

从属: ypxfr

主: ypserv -d

从属:带有 resolv.confypxfr -bypxfr

禁用 NIS 服务

如果禁用 NIS 主服务器上的 ypserv,您将无法再更新任何 NIS 映射。