这就是为什么Sun开发出了NIS,即网络信息系统(Network Information System)。NIS提供了通用数据库访问设施,可以实现向你的网络上的所有主机分发信息,比如象passwd和groups文件所包含的信息。这使得网络看起来象一个独立系统,在所有的主机上有着相同的帐号。你可以以同样的方式通过NIS向网络上的所有机器同步/etc/hosts中的主机名信息。
你所得到的输出应该与上面显示的相象。如果你得到了一条错误信息指出“Can’t bind to server which serves domain”或者某些类似的信息,那么或者是你设置的NIS域名在yp.conf中没有匹配的服务器,或者是由于某些原因服务器找不到。在后一种情况下,请确信ping到那个主机产生正确的结果,并且它确实正在运行一个NIS服务器。你可以使用rpcinfo来验证后者,它将生成以下输出:
# rpcinfo -u serverhost ypserv
program 100004 version 2 ready and waiting
10.6 选择正确的maps
在确信能够与NIS服务器联系之后,你必须决定要用NIS maps替换或添加哪个配置文件。一般地,你将会对主机和口令查找函数使用NIS maps。前者对于没有使用BIND时特别有用。后者允许所有用户在NIS域的任何系统上登录进他们的帐号;这通常要求通过NFS在所有的主机之间共享一个中央/home目录。这将在10.7节中详细讨论。其它的maps,如同services.byname,并没有如此有戏剧性的效能,但能为你省去某些编辑工作如果你安装了任何网络应用程序而该应用程序使用了一个不在标准services文件中的服务名。
通常,对于一个查找函数何时使用本地文件、何时询问NIS服务器,你会想有某些自由的选择。NYS允许你配置函数访问这些服务的顺序。这是通过/etc/nsswitch.conf文件来控制的,该文件名是指名称服务交换(Name Service Switch),当然其并不限制于名称服务。对于NYS支持的任何数据查找函数,它都包含指定所用服务的一行。
服务的正确顺序是与数据的类型有关的。并无必要让services.byname的map一定要含有与本地services文件中不同的条目;它可以包含更多的条目。所以,一个好的选择可以是首先查询本地文件,并且只有当服务名称没有找到时才查找NIS。另一方面,主机名信息可能会非常频繁地改变,所以DNS或NIS服务器应该总是有非常正确的信息,而本地的hosts文件只作为在DNS和NIS不可用时的一个备份而已。在这种情况下,你可能想最后查询本地文件。
下面的例子显示出了如何以上面描述的方式配置gethostbyname(2)、gethostbyaddr(2)和getservbyname(2)函数。它们将依次试用列出的服务;如果一个查找成功,结果就返回,否则试用下一个服务。
# small sample /etc/nsswitch.conf
#
hosts: nis dns files
services: files nis