13.7. 选择合适的映射

在确保您可以连接到 NIS 服务器之后,您必须决定要替换哪些配置文件或使用 NIS 映射来增强哪些配置文件。通常,您会希望对主机和密码查找功能使用 NIS 映射。如果您没有 BIND 名称服务,前者尤其有用。密码查找允许所有用户从 NIS 域中的任何系统登录到他们的帐户;这通常与共享一个中央/home目录在所有主机之间通过 NFS 实现。密码映射在下一节中详细解释。

其他映射,例如services.byname, 没有提供如此显著的提升,但确实为您节省了一些编辑工作。如果您安装了任何使用标准中没有的服务名称的网络应用程序,则services.byname映射很有价值services文件。

通常,您希望可以选择查找功能何时使用本地文件,何时查询 NIS 服务器,以及何时使用其他服务器(例如 DNS)。GNU libc 允许您配置函数访问这些服务的顺序。这通过/etc/nsswitch.conf文件控制,该文件代表 名称服务交换机,但当然不限于名称服务。对于 GNU libc 支持的任何数据查找功能,该文件都包含一行,其中命名了要使用的服务。

服务的正确顺序取决于每个服务提供的数据类型。不太可能services.byname映射将包含与本地services文件中的条目不同的条目;它只会包含额外的条目。因此,先查询本地文件,并且仅在找不到服务名称时才检查 NIS 似乎是合理的。另一方面,主机名信息可能会非常频繁地更改,因此 DNS 或 NIS 服务器应始终具有最准确的帐户,而本地hosts文件仅作为 DNS 和 NIS 应该失败时的备份。因此,对于主机名,您通常希望最后检查本地文件。

以下示例显示了如何强制gethostbynamegethostbyaddrhosts文件之前查找 NIS 和 DNS,以及如何让getservbyname函数在查询 NIS 之前先查找本地文件。这些解析器函数将依次尝试列出的每个服务;如果查找成功,则返回结果;否则,它们将尝试列表中的下一个服务。这些优先级的 文件设置为

# small sample /etc/nsswitch.conf
#
hosts:     nis dns files 
services:  files nis

以下是可在nsswitch.conf文件中条目中使用的服务和位置的完整列表。实际查询的映射、文件、服务器和对象取决于条目名称。以下内容可以出现在冒号的右侧

nis

使用当前域 NIS 服务器。查询的服务器的位置在yp.conf文件中配置,如上一节所示。对于 hosts 条目,hosts.bynamehosts.byaddr映射将被查询。

nisplusnis+

为此域使用 NIS+ 服务器。服务器的位置从/etc/nis.conf文件。

获取

dnsresolv.conf文件。

files

使用本地文件,例如 hosts 条目的/etc/hosts文件。

compat

与旧文件格式兼容。当 NYS 或 glibc 2.x 用于 NIS 或 NIS+ 查找时,可以使用此选项。虽然这些版本通常无法解释passwdgroup文件中的旧 NIS 条目,但 compat 选项允许它们使用这些格式。

db

从位于/var/db目录中的 DBM 文件中查找信息。相应的 NIS 映射名称用于该文件。

目前,GNU libc 中的 NIS 支持迎合以下nsswitch.conf数据库:aliasesethers.grouphostsnetgroupnetworkpasswdprotocolspublickeyrpcservicesshadow。可能会添加更多条目。

示例 13-2 显示了一个更完整的示例,介绍了nsswitch.conf的另一个功能。[NOTFOUND=return] hosts 条目中的关键字告诉 NIS 客户端,如果在 NIS 或 DNS 数据库中找不到所需的项目,则返回。也就是说,仅当对 NIS 和 DNS 服务器的调用因其他原因失败时,NIS 客户端才会继续搜索本地文件。然后,本地文件将仅在启动时用作备份,并在 NIS 服务器关闭时用作备份。

示例 13-2。nsswitch.conf 文件示例

# /etc/nsswitch.conf
#
hosts:      nis dns [NOTFOUND=return] files
networks:   nis [NOTFOUND=return] files
services:   files nis
protocols:  files nis
rpc:        files nis

GNU libc 提供了一些其他操作,这些操作在nsswitch手册页中进行了描述。