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

第 4 章 网络信息服务 (Network Information Service, NIS)(概述)

本章概述了网络信息服务 (Network Information Service, NIS)。

NIS 是一种分布式名称服务,它是用于确定和查找网络对象及资源的机制。NIS 以使用传输协议且独立于介质的方式为网络范围内的信息提供统一的存储和检索方法。

本章包含以下主题:

NIS 介绍

通过运行 NIS,系统管理员可在各种服务器(主服务器从属服务器)中分布管理数据库,这些数据库称为映射。管理员可以通过一种自动而且可靠的方式从一个集中位置更新这些数据库,以确保整个网络中的所有客户机都一致共享相同的名称服务信息。

NIS 是独立于 DNS 开发的,并且其侧重点也稍有不同。DNS 侧重于使用计算机名而不是数字 IP 地址来简化通信,而 NIS 侧重于对各种网络信息进行集中控制来更好地管理网络。NIS 不仅存储有关计算机名和地址的信息,还存储有关用户、网络本身以及网络服务的信息。这种网络信息的集合称为 NIS 名称空间


注意 –

在一些上下文中,计算机名称是指主机名或计算机名称。本讨论中使用计算机,但一些屏幕消息或 NIS 映射名中可能使用主机计算机


NIS 体系结构

NIS 使用客户机/服务器方案。NIS 服务器向 NIS 客户机提供服务。主要的服务器称为服务器,为确保其可靠性,主服务器还具有备份,即从属服务器。主服务器和从属服务器都使用 NIS 信息检索软件,并且都可存储 NIS 映射。

NIS 使用域来编排其名称空间中的计算机、用户和网络。但它不使用域分层结构;NIS 名称空间无层次。

图表显示 192.44.0.0 具有未标识的分层结构。

因此,此物理网络将被编排为一个 NIS 域。

图表显示 192.44.0.0 组织在一个无层次的 NIS 名称空间中。

仅使用 NIS 不能直接将 NIS 域与 Internet 连接。但是,如果组织要使用 NIS 并且希望连接到 Internet,则可将 NIS 与 DNS 结合使用。可以使用 NIS 管理所有本地信息,而将 DNS 用于 Internet 主机查找。NIS 可提供转发服务,在 NIS 映射中找不到信息时,该服务可将主机查找转发给 DNS。Solaris 系统还允许设置 nsswitch.conf 文件,以使主机查找请求直接发送至 DNS;或是先发送至 DNS,如果 DNS 找不到该请求再发送至 NIS;或是先发送至 NIS,如果 NIS 找不到该请求再发送至 DNS。有关详细信息,请参见第 2 章,名称服务转换器(概述)

NIS 计算机类型

NIS 计算机有三种类型。

任何计算机都可以成为 NIS 客户机,但只有带磁盘的计算机才能成为 NIS 服务器,包括主服务器或从属服务器。服务器也是客户机,通常是自身的客户机。

NIS 服务器

NIS 服务器与 NFS 文件服务器不必是同一台计算机。

NIS 服务器分为两种:主服务器和从属服务器。指定为主服务器的计算机包含系统管理员根据需要创建并更新的映射集。每个 NIS 域必须有且仅有一台主服务器,该服务器可以传播 NIS 更新,并可以最大程度地减少对性能的影响。

可将域中的其他 NIS 服务器指定为从属服务器。从属服务器具有主 NIS 映射集的完整副本。只要主服务器映射进行更新,该更新便会传播到从属服务器。从属服务器可以处理主服务器的任何请求溢出,从而最大程度地减少“服务器不可用”错误。

通常,系统管理员为所有 NIS 映射指定一台主服务器。但是,由于每个单个 NIS 映射中都对主服务器的计算机名进行了编码,因此,可将不同服务器指定为不同映射的主服务器和从属服务器。为了尽量避免混淆,请将一台服务器指定为您在一个域中创建的所有映射的主服务器。本章的示例假设将一台服务器用作域中所有映射的主服务器。

NIS 客户机

NIS 客户机可运行进程,以向服务器中的映射请求数据。由于所有 NIS 服务器都应具有相同信息,因此客户机不区分主服务器和从属服务器。


注意 –

Solaris 操作系统不支持 NIS 客户机与本机 LDAP 客户机共存于同一台客户机上的配置。


NIS 元素

NIS 名称服务由以下元素组成:

NIS 域

NIS 是共享一组通用 NIS 映射的计算机的集合。每个域都有一个域名,共享这组通用映射的每台计算机都属于该域。

任何计算机都可以属于给定域,只要同一网络中存在用于该域映射的服务器即可。NIS 客户机在引导过程中获取域名并绑定到 NIS 服务器。

NIS 守护进程

NIS 服务由五个守护进程提供,如表 4–1 所示。NIS 服务由服务管理工具管理。可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。有关 SMF 的概述,请参阅System Administration Guide: Basic Administration中的“Managing Services (Overview)”。有关更多详细信息,另请参阅 svcadm(1M)svcs(1) 手册页。

表 4–1 NIS 守护进程

守护进程 

功能 

ypserv

服务器进程 

ypbind

绑定进程 

ypxfrd

高速映射传送 

rpc.yppasswdd

NIS 口令更新守护进程 

**请参见下面的“注”。** 

rpc.ypupdated

修改其他映射,如 publickey


注意 –

rpc.yppasswdd 将以 r 开头的所有 Shell 都视为受限制的 Shell。例如,如果位于 /bin/rksh 中,则不允许从该类 shell 更改到其他 shell 中。 如果有一个 shell 以 r 开头但不想使其受到此类限制,请参阅第 7 章,NIS 疑难解答了解解决方法。


NIS 实用程序

NIS 服务受九个实用程序支持,如表 4–2 所示。

表 4–2 NIS 实用程序

实用程序 

功能 

makedbm

为 NIS 映射创建 dbm 文件

ypcat

列出映射中的数据 

ypinit

生成并安装 NIS 数据库并初始化 NIS 客户机的 ypservers 列表。

ypmatch

查找映射中的特定项 

yppoll

从服务器中获取映射顺序编号 

yppush

从 NIS 主服务器向 NIS 从属服务器传播数据 

ypset

设置到特定服务器的绑定 

ypwhich

列出 NIS 服务器的名称以及昵称转换表 

ypxfr

从主 NIS 服务器向从属 NIS 服务器传送数据 

NIS 映射

NIS 映射中的信息以 ndbm 格式存储。ypfiles(4)ndbm(3C) 对映射文件的这一格式进行了说明。

NIS 映射设计用于替换 UNIX /etc 文件以及其他配置文件,因此其中除了存储名称和地址外还存储大量的其他信息。在运行 NIS 的网络中,每个 NIS 域的 NIS 主服务器会为该域中要查询的其他计算机保留一组 NIS 映射。NIS 从属服务器也会保留主服务器映射的副本。NIS 客户机可从主服务器或从属服务器获取名称空间信息。

NIS 映射实质上是包含两个列的表。一列为关键字,另一列为与该关键字相关的信息。NIS 通过搜索关键字为客户机查找信息。由于每个映射使用不同的关键字,因此有些信息存储在多个映射中。例如,计算机的名称和地址存储在两个映射中:hosts.bynamehosts.byaddr。当服务器已知计算机的名称而需要查找其地址时,它将在 hosts.byname 映射中进行查找。当服务器已知计算机的地址而需要查找其名称时,它将在 hosts.byaddr 映射中进行查找。

NIS Makefile 存储在安装时被指定为 NIS 服务器的计算机上的 /var/yp 目录中。在该目录中运行 make 会使 makedbm 根据输入文件创建或修改缺省 NIS 映射。


注意 –

请始终在主服务器上创建映射,因为在从属服务器上创建的映射将不会自动推送到主服务器。


缺省 NIS 映射

Solaris 系统中提供了一组缺省 NIS 映射。您可能要使用所有这些映射,或只使用其中的部分映射。NIS 还可以使用您在安装其他软件产品时创建或添加的任何映射。

NIS 域的缺省映射位于每台服务器的 /var/yp/domainname 目录中。例如,属于域 test.com 的映射位于每台服务器的 /var/yp/test.com 目录中。

表 4–3 介绍了缺省 NIS 映射、其中包含的信息以及 NIS 运行时软件是否查看对应的管理文件。

表 4–3 NIS 映射说明

映射名 

对应的 NIS 管理文件 

说明 

audit_user

audit_user

包含用户审计预选数据。 

auth_attr

auth_attr

包含授权名称和说明。 

bootparams

bootparams

包含客户机在引导期间所需文件的路径名:root、swap,也可能是其他名称。 

ethers.byaddr

ethers

包含计算机名和以太网地址。以太网地址是映射中的关键字。 

ethers.byname

ethers

ethers.byaddr 相同,但关键字是计算机名而非以太网地址。

exec_attr

exec_attr

包含配置文件执行属性。 

group.bygid

group

包含以组 ID 作为关键字的组安全信息。 

group.byname

group

包含以组名作为关键字的组安全信息。 

hosts.byaddr

hosts

包含计算机名和 IP 地址,以 IP 地址作为关键字。 

hosts.byname

hosts

包含计算机名和 IP 地址,以计算机(主机)名作为关键字。 

mail.aliases

aliases

包含别名和邮件地址,以别名作为关键字。 

mail.byaddr

aliases

包含邮件地址和别名,以邮件地址作为关键字。 

netgroup.byhost

netgroup

包含组名、用户名和计算机名。 

netgroup.byuser

netgroup

netgroup.byhost 相同,但关键字为用户名。

netgroup

netgroup

netgroup.byhost 相同,但关键字为组名。

netid.byname

passwd, hosts

group

用于 UNIX 形式的验证。包含计算机名和邮件地址(包括域名)。如果存在可用的 netid 文件,则除了查询通过其他文件提供的数据外,还会查询该文件。

netmasks.byaddr

netmasks

包含要与 IP 一起提交的网络掩码,以地址作为关键字。 

networks.byaddr

networks

包含系统可识别的网络的名称及其 IP 地址,以地址作为关键字。 

networks.byname

networks

networks.byaddr 相同,但关键字为网络名称。

passwd.adjunct.byname

passwdshadow

包含 C2 客户机的审计信息和隐藏的口令信息。 

passwd.byname

passwdshadow

包含以用户名作为关键字的口令信息。 

passwd.byuid

passwdshadow

passwd.byname 相同,但关键字为用户 ID。

prof_attr

prof_attr

包含执行配置文件的属性。 

protocols.byname

protocols

包含网络可识别的网络协议。 

protocols.bynumber

protocols

protocols.byname 相同,但关键字为协议编号。

rpc.bynumber

rpc

包含系统可识别的 RPC 的程序编号和名称。关键字为 RPC 程序编号。 

services.byname

services

列出网络可识别的 Internet 服务。关键字为端口或协议。 

services.byservice

services

列出网络可识别的 Internet 服务。关键字为服务名。 

user_attr

user_attr

包含用户和角色的扩展属性。 

ypservers

N/A 

列出网络可识别的 NIS 服务器。 

NIS 中添加了新 ipnodes 映射(ipnodes.byaddripnodes.byname)。这些映射可同时存储 IPv4 和 IPv6 地址。请参见 ipnodes(4) 手册页。NIS 客户机和服务器可以使用 IPv4 或 IPv6 RPC 传输进行通信。

ageing.byname 映射包含在实现 NIS 到 LDAP 转换时 yppasswdd 用来从 DIT 中读取和向其中写入口令生命期信息的信息。如果不使用口令生命期,则可从映射文件中将其注释掉。有关 NIS 到 LDAP 转换的更多信息,请参见第 15 章,从 NIS 转换为 LDAP(概述/任务)

使用 NIS 映射

与使用 /etc 文件系统进行更新相比,NIS 可使更新网络数据库变得更加简单。无需在每次修改网络环境时更改每台计算机中的管理 /etc 文件。

例如,向运行 NIS 的网络中添加新计算机时,只需要更新主服务器中的输入文件并运行 make。这将自动更新 hosts.bynamehosts.byaddr 映射。然后,这些映射将传送给所有从属服务器,并可供域中所有客户机及其程序使用。当客户机或应用程序请求计算机名或地址时,NIS 服务器将参阅相应的 hosts.bynamehosts.byaddr 映射,并向该客户机发送请求的信息。

可以使用 ypcat 命令显示映射中的值。ypcat 基本格式为:


% ypcat mapname

其中,mapname 是要查看的映射的名称或其昵称。如果映射仅由关键字组成(如 ypservers),请使用 ypcat -k。否则,ypcat 将列显空白行。ypcat(1) 手册页介绍了 ypcat 的更多选项。

可以使用 ypwhich 命令来确定哪台服务器是特定映射的主服务器。键入以下命令:


% ypwhich -m mapname

其中,mapname 是要查找其主服务器的映射的昵称。ypwhich 通过显示主服务器的名称来进行响应。有关完整信息,请参阅 ypwhich(1) 手册页。

NIS 映射昵称

昵称是完整映射名的别名。要获得可用映射昵称(如 passwd.bynamepasswd)的列表,请键入 ypcat -xypwhich -x

昵称存储在 /var/yp/nicknames 文件中,该文件中包含映射昵称,后跟映射的完全指定名称,两者之间用空格分隔。可对此列表进行添加或修改。目前,昵称限制在 500 个以内。

与 NIS 相关的命令

NIS 服务包括专用守护进程、系统程序和命令,下表对其进行了汇总。

表 4–4 NIS 命令汇总

命令 

说明 

ypserv

通过 NIS 映射为 NIS 客户机的信息请求提供服务。ypserv 是在具有一整套映射的 NIS 服务器上运行的守护进程。网络中必须至少存在一个 ypserv 守护进程,NIS 服务才能正常运行。

ypbind

向客户机提供 NIS 服务器绑定信息。该守护进程通过在请求客户机的域内查找提供映射的 ypserv 进程来提供绑定。ypbind 必须在所有服务器和客户机上运行。

ypinit

自动根据输入文件为 NIS 服务器创建映射。也用于在客户机上构造初始的 /var/yp/binding/domain/ypservers 文件。初次设置主 NIS 服务器和从属 NIS 服务器时请使用 ypinit

make

通过读取 Makefile 来更新NIS 映射(当在 /var/yp 目录中运行时)。可以使用 make 根据输入文件来更新所有映射或更新个别映射。ypmake(1M) 手册页中介绍用于 NIS 的 make 的功能。

makedbm

makedbm 接收输入文件并将其转换为 dbm.dirdbm.pag 文件,即 NIS 可以将其用作映射的有效 dbm 文件。还可以使用 makedbm -u 来分解映射,从而可以看到构成它的关键字-值对。

ypxfr

使用 NIS 自身作为传输介质,将 NIS 映射从远程服务器拉至本地 /var/yp/domain 目录。可以交互方式运行 ypxfr,或从 crontab 文件中定期运行该命令。ypserv 也会调用该命令以启动传送。

ypxfrd

ypxfr 请求(通常为从属服务器)提供映射传送服务。该命令仅在主服务器上运行。

yppush

将新版本的 NIS 映射从 NIS 主服务器复制到其从属服务器。该命令在主 NIS 服务器上运行。 

ypset

通知 ypbind 进程绑定到指定的 NIS 服务器。该命令不能随意使用。出于安全原因,建议不要使用该命令。有关 ypbind 进程的 ypsetypsetme 选项的信息,请参见 ypset(1M)ypbind(1M) 手册页。

yppoll

指明在指定的服务器上运行的 NIS 映射的版本。还会列出用于该映射的主服务器。 

ypcat

显示 NIS 映射的内容。 

ypmatch

列显 NIS 映射中的一个或多个指定关键字的值。不能指定查看的 NIS 服务器映射的版本。 

ypwhich

显示此时客户机用以取得 NIS 服务的 NIS 服务器,如果调用该命令时使用了 -m mapname 选项,则显示作为各映射的主服务器的 NIS 服务器。如果只使用 -m,则显示所有可用映射的名称及其各自的主服务器。

NIS 绑定

NIS 客户机通过绑定进程从 NIS 服务器获取信息,该进程可以采用下两种模式之一运行:服务器列表或广播。

服务器列表模式

服务器列表模式的绑定进程的工作过程如下:

  1. 在 NIS 客户机上运行的、需要 NIS 映射所提供信息的任何程序,向 ypbind 请求服务器的名称。

  2. ypbind/var/yp/binding/domainname/ypservers 文件中查找域中 NIS 服务器的列表。

  3. ypbind 启动到该列表中第一台服务器的绑定。如果该服务器不响应,则 ypbind 尝试第二台,直至找到服务器或找遍整个列表。

  4. ypbind 通知客户机进程要联系的服务器。然后,该客户机会将请求直接发送给该服务器。

  5. NIS 服务器上的 ypserv 守护进程通过查询相应映射来处理请求。

  6. ypserv 将请求的信息发送回客户机。

广播模式

广播模式的绑定进程的工作过程如下:

  1. ypbind 启动时必须设置了广播选项 (broadcast)。

  2. ypbind 发出 RPC 广播,以搜索 NIS 服务器。


    注意 –

    为了支持此类客户机,需要让每个请求 NIS 服务的子网具有 NIS 服务器。


  3. ypbind 启动到最先对广播做出响应的服务器的绑定。

  4. ypbind 通知客户机进程要联系的服务器。然后,该客户机会将请求直接发送给该服务器。

  5. NIS 服务器上的 ypserv 守护进程通过查询相应映射来处理请求。

  6. ypserv 将请求的信息发送回客户机。

通常,客户机一旦绑定到服务器之后,它会保持与该服务器的绑定状态,直到某些原因引起更改为止。例如,如果服务器中断服务,它所服务的客户机将绑定到新服务器。

要确定当前正在为特定客户机提供服务的 NIS 服务器,请使用以下命令。

%ypwhich machinename

其中,machinename 是客户机的名称。如果未提及计算机名,则 ypwhich 缺省为本地计算机(即运行命令时所在的计算机)。