contents
下一节: NIS 与 NIS+ 的比较 上一层: 网络信息系统 前一节: 网络信息系统

NIS 简介

NIS 将数据库信息保存在所谓的映射表中,映射表包含键值对。映射表存储在运行 NIS 服务器的中央主机上,客户端可以通过各种 RPC 调用从中检索信息。通常,映射表存储在 DBM 文件中。gif

映射表本身通常从主文本文件生成,例如 /etc/hosts 或 /etc/passwd。对于某些文件,会创建多个映射表,每种搜索键类型对应一个。例如,您可以搜索 hosts 文件以查找主机名以及 IP 地址。因此,从中派生出两个 NIS 映射表,分别称为 hosts.byname 和 hosts.byaddr。表-gif 列出了常用映射表以及它们生成自的文件。


表格: 一些标准的 NIS 映射表及其对应的文件。

在某些 NIS 软件包中,您可能会找到对其他文件和映射表的支持。这些可能包含本书中未讨论的应用程序的信息,例如可能被某些 BOOTP 服务器使用的 bootparams 映射表,或者当前没有任何功能的映射表(例如 ethers.byname 和 ethers.byaddr 映射表)。

对于某些映射表,人们通常使用别名,别名更短,因此更易于键入。要获取 NIS 工具理解的别名完整列表,请运行以下命令

NIS 服务器传统上称为 ypserv。对于一般的网络,通常一个服务器就足够了;大型网络可以选择在不同的机器和网络的不同网段上运行多个服务器,以减轻服务器和路由器的负载。这些服务器通过将其中一个服务器设为主服务器,其他服务器设为从服务器来进行同步。映射表仅在主服务器的主机上创建。然后,它们从那里分发到所有从服务器。

您可能已经注意到,我们一直在非常模糊地谈论“网络”;当然,NIS 中有一个独特的概念指的是这种网络,即通过 NIS 共享部分系统配置数据的所有主机的集合:NIS 域。不幸的是,NIS 域与我们在 DNS 中遇到的域完全没有任何共同之处。为了避免本章中出现任何歧义,我将始终明确指出我指的是哪种类型的域。

NIS 域仅具有纯粹的管理功能。它们对用户大多是不可见的,除了域中所有机器之间共享密码。因此,给定的 NIS 域名仅与管理员相关。通常,任何名称都可以,只要它与本地网络上的任何其他 NIS 域名不同即可。例如,Virtual Brewery 的管理员可以选择创建两个 NIS 域,一个用于 Brewery 本身,一个用于 Winery,她分别命名为 brewery 和 winery。另一种非常常见的方案是也为 NIS 简单地使用 DNS 域名。要设置和显示主机的 NIS 域名,您可以使用 domainname 命令。当不带任何参数调用时,它会打印当前的 NIS 域名;要设置域名,您必须成为超级用户并键入

NIS 域确定应用程序将查询哪个 NIS 服务器。例如,Winery 主机上的登录程序当然应该只查询 Winery 的 NIS 服务器(或其中一个,如果有多个)以获取用户的密码信息;而 Brewery 主机上的应用程序应该坚持使用 Brewery 的服务器。

现在仍然有一个谜团需要解决,即客户端如何找出要连接到哪个服务器。最简单的方法是使用一个配置文件,其中指定要查找服务器的主机。然而,这种方法相当不灵活,因为它不允许客户端根据服务器的可用性使用不同的服务器(当然,来自同一域)。因此,传统的 NIS 实现依赖于一个名为 ypbind 的特殊守护进程来检测其 NIS 域中合适的 NIS 服务器。在能够执行任何 NIS 查询之前,任何应用程序首先从 ypbind 找出要使用的服务器。

ypbind 通过广播到本地 IP 网络来探测服务器;第一个响应的服务器被认为是潜在最快的服务器,并将用于所有后续的 NIS 查询。在经过一定的时间间隔之后,或者如果服务器变得不可用,ypbind 将再次探测活动服务器。

现在,关于动态绑定的有争议的点是,您很少需要它,并且它引入了一个安全问题:ypbind 盲目地相信任何响应者,这可能是一个普通的 NIS 服务器,也可能是一个恶意的入侵者。不用说,如果您通过 NIS 管理密码数据库,这尤其成问题。为了防止这种情况,NYS 默认使用 ypbind,而是从配置文件中获取服务器主机名。


contents
下一节: NIS 与 NIS+ 的比较 上一层: 网络信息系统 前一节: 网络信息系统

Andrew Anderson
Thu Mar 7 23:22:06 EST 1996