跳过导航链接 | |
退出打印视图 | |
系统管理指南:命名和目录服务(DNS、NIS 和 LDAP) Oracle Solaris 10 8/11 Information Library (简体中文) |
4. 网络信息服务 (Network Information Service, NIS)(概述)
11. 为使用 LDAP 客户机设置 Sun Java System Directory Server(任务)
安装 NIS 之后,您可能会发现,有些映射需要频繁更新,而其他映射则从来不需要更改。例如,在大公司的网络中,passwd.byname 映射可能会频繁更改,而 auto_master 映射则只需少量更改,甚至不进行任何更改。
如缺省 NIS 映射中所述,缺省 NIS 映射的缺省位置是主服务器上的 /var/yp/domainname ,其中 domainname 是 NIS 域的名称。当您需要更新某个映射时,可以根据该映射是否为缺省映射来使用两个更新过程之一。
以下各部分介绍如何使用各种更新工具。在实践中,您可能会决定只在系统已启动并运行后添加非缺省映射或更改 NIS 服务器集合时才使用这些工具。
使用以下过程可以更新随缺省集合提供的映射。
请始终只在主服务器上修改 NIS 映射。
# cd /var/yp # make mapname
以下各节介绍完成更新随缺省集合提供的映射之后进行的其他过程。
更改映射后,Makefile 将使用 yppush 向从属服务器传播新映射(除非在 Makefile 中设置了 NOPUSH)。它会通知 ypserv 守护进程并发送映射传送请求以完成此操作。然后,从属服务器上的 ypserv 守护进程会启动 ypxfr 进程,该进程将与主服务器上的 ypxfrd 守护进程联系。在进行了一些基本检查(例如,映射是否真的发生了更改?)后,便会传送映射。然后,从属服务器上的 ypxfr 将向 yppush 进程发送响应,指明传送是否成功。
有时候,映射无法传播,这时必须使用 ypxfr 手动发送新映射信息。您可以选择以两种不同方式使用 ypxfr:通过根 crontab 文件定期使用,或在命令行中交互使用。这些方法将在以下各节中进行讨论。
不同映射的更改速度有所不同。例如,有些映射有时候几个月都不更改一次(如缺省映射中的 protocols.byname 以及非缺省映射中的 auto_master);但 passwd.byname 可能一天就会进行多次更改。使用 crontab 命令调度映射传送,可以为各个映射设置特定的传播时间。
要以适合于映射的速度定期运行 ypxfr,每台从属服务器中的根 crontab 文件应包含适当的 ypxfr 项。ypxfr 与主服务器联系,并仅在主服务器中的副本比本地副本更新时才传送映射。
作为为每个映射创建单独的 crontab 项的备选方法,您可能更喜欢让根 crontab 命令运行 shell 脚本来定期更新所有映射。用于更新映射的 shell 脚本样例位于 /usr/lib/netsvc/yp 目录中。这些脚本名为 ypxfr_1perday、ypxfr_1perhour 和 ypxfr_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 将尝试从主服务器中获取映射。如果执行 ypxfr 时 ypserv 未在本地运行,则必须使用 -c 标志,以使 ypxfr 不向本地 ypserver 发送清除当前映射的请求。
您可以使用 -s domain 选项从其他域向本地域传送映射。这些映射在各个域中应该相同。例如,两个域可能会共享相同的 services.byname 和 services.byaddr 映射。或者,也可以使用 rcp 或 rdist 来获取更多控制,以便跨域传送文件。
另一种调用 ypxfr 的方法是将其作为命令来运行。通常,只在异常情况下才使用此方法-例如,在设置临时 NIS 服务器来创建测试环境时或在尝试使断开服务的 NIS 服务器快速与其他服务器保持一致时。
ypxfr 的传送尝试和结果可以捕获并存储在日志文件中。如果存在名为 /var/yp/ypxfr.log 的文件,则会向该文件中附加结果。对于该日志文件的大小没有任何限制。为防止日志文件无限制地增大,请键入以下命令定期清空该文件。
# cd /var/yp # cp ypxfr.log ypxfr.log.old # cat /dev/null > /var/yp/ypxfr.log
可让 crontab 一周执行一次上述命令。要禁用日志记录,请删除日志文件。
要更新非缺省映射,必须执行下列操作。
创建或编辑对应的文本文件。
生成(或重新生成)新映射或更新的映射。生成映射的方法有两种。
使用 Makefile。使用 Makefile 是生成非缺省映射的首选方法。如果映射在 Makefile 中具有一个项,请运行 make name,其中 name 是要生成的映射的名称。如果映射中没有 Makefile 项,请尝试按照修改和使用 Makefile中的说明创建一项。
使用 /usr/sbin/makedbm 程序。makedbm(1M) 手册页全面描述了此命令。
如果您没有输入文件,可通过两种不同的方法使用 makedbm 修改映射:
将 makedbm -u 输出重定向到一个临时文件中,修改该文件,然后使用修改过的文件作为 makedbm 的输入。
在供给 makedbm 的流水线中运行 makedbm -u 的输出。如果您可以使用附加的 awk、sed 或 cat 更新反编译的映射,则这种方法是适合的。
假设使用编辑器或 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 创建映射;但几乎每项您实际必须执行的操作都可以通过 ypinit 和 Makefile 完成,除非您在系统启动并运行后向数据库中添加了非缺省映射或更改了 NIS 服务器集合。
无论您在 /var/yp 中使用 Makefile 还是其他某个过程,目标都是相同的。主服务器上的映射目录中最终必须有格式正确的新 dbm 文件对。