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

部件 III NIS 的安装和管理

本部分提供了有关 NIS 名称服务的概述。此外,还介绍了有关 Solaris OS 中 NIS 的安装、管理及疑难解答。

第 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 缺省为本地计算机(即运行命令时所在的计算机)。

第 5 章 设置和配置 NIS 服务

本章介绍网络信息服务 (Network Information Service, NIS) 的初始设置和配置。


注意 –

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


本章包含以下主题:

配置 NIS-任务列表

任务 

有关说明,请转至 

为转换准备源文件。 

为将源文件转换为 NIS 映射做好准备

使用 ypinit 设置主服务器

ypinit 设置主服务器

在主服务器上启动 NIS。 

在主服务器上启动或停止 NIS 服务

设置从属服务器。 

设置从属服务器

设置 NIS 客户机。 

设置 NIS 客户机

配置 NIS 之前的准备工作

在配置 NIS 名称空间之前,必须执行以下操作。

NIS 和服务管理工具

NIS 服务由服务管理工具管理。有关 SMF 的概述,请参阅System Administration Guide: Basic Administration中的“Managing Services (Overview)”。另请参阅 svcadm(1M)svcs(1) 手册页以获取更多详细信息。

规划 NIS 域

在将计算机配置为 NIS 服务器或客户机之前,必须规划 NIS 域。

决定 NIS 域中要包括哪些计算机。NIS 域不必与您的网络完全一致。一个网络可以有多个 NIS 域,并且网络中的计算机可以位于 NIS 域之外。

选择一个 NIS 域名,域名的长度可为 256 个字符。比较好的做法是将域名长度限制在 32 个字符之内。域名区分大小写。为方便起见,可以根据 Internet 域名来命名 NIS 域名。例如,如果 Internet 域名为 doc.com,则可将 NIS 域命名为 doc.com。如果要将 doc.com 划分为两个 NIS 域,一个用于销售部门,另一个用于制造部门,则可将其中一个域命名为 sales.doc.com,将另一个域命名为 manf.doc.com

只有设置了正确的 NIS 域名和计算机名,计算机才能使用 NIS 服务。计算机名由计算机中的 /etc/nodename 文件设置,计算机的域名由该计算机的 /etc/defaultdomain 文件设置。在引导时将读取这些文件,其内容分别由 uname -S 命令和 domainname 命令使用。无盘计算机从其引导服务器中读取这些文件。

确定 NIS 服务器和客户机

选择要成为主服务器的计算机。决定哪些计算机(如果有)将成为从属服务器。

决定哪些计算机将成为 NIS 客户机。通常,域中的所有计算机都会被设置为 NIS 客户机,尽管这样做并不是必要的。

准备主服务器

以下各节介绍如何为主服务器准备源文件和 passwd 文件。

源文件目录

源文件应位于主服务器上的 /etc 目录或其他某个目录中。将源文件存储在 /etc 中并不合适,因为这样映射中的内容将与主服务器上的本地文件中的内容相同。对于 passwdshadow 文件而言,这一问题尤为突出,因为所有用户都可以访问主服务器映射,因而超级用户口令将通过 passwd 映射传递给所有 NIS 客户机。有关其他信息,请参见Passwd 文件和名称空间安全

但是,如果将源文件放在其他某个目录中,则必须通过将 DIR=/etc 行更改为 DIR=/your-choice 来修改 /var/yp 中的 Makefile,其中,your-choice 是将用来存储源文件的目录的名称。这样便可将服务器上的本地文件视为客户机上的本地文件进行处理。(最好先保存原始 Makefile 的副本。)

此外,如果要从缺省目录外的其他目录中获取 audit_userauth_attrexec_attrprof_attr,则必须将 RBACDIR =/etc/security 修改为 RBACDIR=/your-choice

Passwd 文件和名称空间安全

passwd 映射是一种特殊情况。除了早期的 Solaris 1 passwd 文件格式外,此 NIS 实现还接受 /etc/passwd/etc/shadow 文件格式作为生成 NIS 口令映射的输入。

出于安全原因,用于生成 NIS 口令映射的文件不应包含 root 项,以防止未经授权的超级用户访问。因此,不应使用主服务器 /etc 目录中的文件生成口令映射。对于用于生成口令映射的口令文件,应删除其中的 root 项,并将它们放置在可免遭未经授权的访问的目录中。

例如,主服务器口令输入文件应存储在诸如 /var/yp 等目录或您选择的任何目录中,只要文件本身不是指向其他文件的链接,而且文件位置已在 Makefile 中指定。将根据 Makefile 中指定的配置自动设置正确的目录选项。


注意 – 注意 –

确保 PWDDIR 所指定的目录中的 passwd 文件不包含关于超级用户的项。


如果源文件所在的目录不是 /etc,则必须更改 Makefile 中的 PWDIR 口令宏,以指向 passwdshadow 文件所在的目录,方法是将行 PWDIR=/etc 更改为 PWDIR/your-choice,其中 your-choice 是要用来存储 passwd 映射源文件的目录的名称。

为将源文件转换为 NIS 映射做好准备

为将源文件转换为 NIS 映射做好准备。

如何为转换准备源文件
  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 检查主服务器上的源文件,确保它们可以反映系统的最新情况。

    检查以下文件:

    • auto.homeauto_home

    • auto.masterauto_master

    • bootparams

    • ethers

    • group

    • hosts

    • ipnodes

    • netgroup

    • netmasks

    • networks

    • passwd

    • protocols

    • rpc

    • service

    • shadow

    • user_attr

  3. 将上述除 passwd 外的所有源文件复制到所选的 DIR 目录中。

  4. passwd 文件复制到所选的 PWDIR 目录中。

  5. audit_userauth_attrexec_attr 以及 prof_attr 复制到所选的 RBACDIR 目录中。

  6. 检查 /etc/mail/aliases 文件。

    与其他源文件不同,不能将 /etc/mail/aliases 文件移至其他目录。该文件必须位于 /etc/mail 目录中。请确保 /etc/mail/aliases 源文件包含要在整个域中可用的所有邮件别名。有关更多信息,请参阅 aliases(4)

  7. 从源文件中清除所有注释以及其他多余的行和信息。

    可通过 sedawk 脚本或使用文本编辑器来执行这些操作。Makefile 可自动执行一些文件清理,但最好在运行之前手动检查并清理这些文件。

  8. 确保所有源文件中的数据都具有正确的格式。

    对于特定的源文件,必须正确设置该文件数据的格式。请检查各文件对应的手册页,以确保每个文件都具有正确格式。

准备 Makefile

在检查源文件并将其复制到源文件目录后,需要将这些源文件转换为 NIS 服务使用的 ndbm 格式映射。在主服务器上调用 ypinit 时,它会自动执行此操作,如ypinit 设置主服务器中所述。

ypinit 脚本将调用程序 make,该程序使用 /var/yp 目录中的 Makefile。缺省的 Makefile 包含在 /var/yp 目录中,该文件包含将源文件转换为期望的 ndbm 格式映射所需要的命令。

可以按原样使用缺省的 Makefile,如果需要,也可以对其进行修改。(如果确实要修改缺省的 Makefile,请确保先复制并存储原始的缺省 Makefile,以便将来需要时使用。)您可能需要对 Makefile 进行以下一项或多项修改:

Makefile 的功能是为 all 下列出的每个数据库创建适当的 NIS 映射。通过 makedbm 后,数据将收集到两个文件(mapname.dirmapname.pag)中。这两个文件都位于主服务器上的 /var/yp/domainname 目录中。

Makefile 将使用相应的 /PWDIR/passwd/PWDIR/shadow/PWDIR/security/passwd.adjunct 文件生成 passwd 映射。

ypinit 设置主服务器

使用 ypinit 脚本设置要使用 NIS 的主服务器、从属服务器和客户机。它最初还运行 make,以在主服务器上创建映射。

要使用 ypinit 在主服务器上生成一组新的 NIS 映射,请执行以下操作。

如何使用 ypinit 设置主服务器
  1. 在主服务器上,成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. nsswitch.files 文件的内容复制到 nsswitch.conf 文件中。


    # cp /etc/nsswitch.files /etc/nsswitch.conf
    
  3. 编辑 /etc/hosts/etc/inet/ipnodes 文件,添加每台 NIS 服务器的名称和 IP 地址。

  4. 在主服务器上生成新映射。


    # /usr/sbin/ypinit -m
    
  5. ypinit 提示输入要成为 NIS 从属服务器的其他计算机的列表时,键入正在使用的服务器的名称以及 NIS 从属服务器的名称。

  6. ypinit 询问您希望该过程在第一次出现非致命错误时终止,还是不考虑非致命错误仍继续时,键入 y

    如果选择 yypinit 将在遇到第一个问题时退出,然后您可以修复问题并重新启动 ypinit。建议在初次运行 ypinit 时这样做。如果要继续,则可尝试手动修复出现的所有问题,然后重新启动 ypinit


    注意 –

    当某些映射文件不存在时,会出现非致命错误。此错误不会影响 NIS 的功能。如果未自动创建这些映射,则可能需要手动添加。有关所有缺省 NIS 映射的说明,请参阅缺省 NIS 映射


  7. ypinit 将询问是否可以销毁 /var/yp/domainname 目录中现有的文件。

    仅当先前已安装 NIS 时,才会显示此消息。

  8. ypinit 构造服务器列表后,它将调用 make

    此程序将使用 /var/yp 中的 Makefile(缺省或修改过的文件)所包含的说明。make 命令将从指定的文件中清除其余所有注释行。它还对这些文件运行 makedbm,以创建适当映射并为每个映射建立主服务器的名称。

    如果 Makefile 推送的一个或多个映射所对应的域不是主服务器上的命令 domainname 所返回的域,则可按如下所示,在 ypinit shell 脚本中以变量 DOM 的正确标识启动 make,以确保将映射推送到正确域:


    # make DOM=domainname password
    

    此命令会将 password 映射推送到目标域,而不是主服务器所属的域。

  9. 要启用 NIS 作为名称服务,键入以下命令。


    # cp /etc/nsswitch.nis /etc/nsswitch.conf
    

    此命令将以缺省的面向 NIS 的转换文件替换当前的转换文件。可以根据需要编辑此文件。

支持多个 NIS 域的主服务器

通常,一台 NIS 主服务器只支持一个 NIS 域。但是,如果要使用一台主服务器来支持多个域,则在设置要为其他域提供服务的服务器时,必须对ypinit 设置主服务器中所述的步骤稍做修改。

在服务器上运行 domainname 命令。该命令返回的域名是服务器的缺省域名。可以使用ypinit 设置主服务器中所述的步骤为该域设置服务。要为其他任何域配置服务,必须按如下所示修改 ypinit shell 脚本。


# make DOM=correct-domain passwd

correct-domain 是要为其设置服务的其他域的名称,passwdmake 目标。此命令会将 passwd 映射推送到目标域,而不是主服务器所属的域。

在主服务器上启动或停止 NIS 服务

创建主服务器映射后,可以在主服务器上启动 NIS 守护进程,并开始服务。启用 NIS 服务时,将在服务器上启动 ypservypbind。当客户机向服务器请求信息时,ypserv 守护进程将在 NIS 映射中进行查找,然后再回答来自客户机的信息请求。 ypservypbind 守护进程作为一个单元来管理。

在服务器中启动或停止 NIS 服务有三种方法:

自动启动 NIS 服务

在通过运行 ypinit 配置 NIS 主服务器后,将自动调用 ypstart,以便在计算机引导时启动 ypserv。请参见ypinit 设置主服务器

从命令行启动和停止 NIS

使用服务管理工具 svcadm 命令或 ypstart/ypstop 命令可从命令行启动和停止 NIS。使用 svcadm 时,仅当运行服务的多个实例时才需要使用实例名。有关更多信息,请参见NIS 和服务管理工具,或参见 svcadm(1M)ypstart(1M)ypstop(1M) 手册页。

要从命令行启动 NIS 服务,请运行 svcadm enable 命令或 ypstart 命令。


# svcadm enable network/nis/server:<instance>

# svcadm enable network/nis/client:<instance>

or

# ypstart


注意 –

由于 ypserv 在启动之后需要经过短暂延迟才能够对调用做出响应,因此在从程序或脚本内部调用 svcadm 时,应在该命令之后发出三到五秒的休眠。


要停止 NIS 服务,可运行 svcadm disable 命令或 ypstop 命令。


# svcadm disable network/nis/server:<instance>

# svcadm disable network/nis/client:<instance>

or

# ypstop

要停止并立即重新启动 NIS 服务,可使用 svcadm restart 命令。


# svcadm restart network/nis/server:<instance>

# svcadm restart network/nis/client:<instance>

设置 NIS 从属服务器

网络可以有一台或多台从属服务器。使用从属服务器可在主服务器不可用时确保 NIS 服务的连续性。

准备从属服务器

实际运行 ypinit 以创建从属服务器之前,应对每个 NIS 从属服务器运行 domainname 命令,以确保域名与主服务器一致。


注意 –

域名区分大小写。


配置 NIS 从属服务器之前,请确保网络工作正常。需要特别指出的是,应检查以确保可以使用 rcp 从主 NIS 服务器向 NIS 从属服务器发送文件。

设置从属服务器

以下过程说明了如何设置从属服务器。

如何设置从属服务器
  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 编辑从属服务器上的 /etc/hosts/etc/inet/ipnodes 文件,添加所有其他 NIS 服务器的名称和 IP 地址。

  3. 转到从属服务器上的 /var/yp 目录。


    注意 –

    必须先将新的从属服务器配置为 NIS 客户机,它才能首次从主服务器中获取 NIS 映射。有关详细信息,请参见设置 NIS 客户机


  4. 将该从属服务器作为客户机进行初始化。


    # /usr/sbin/ypinit -c
    

    ypinit 命令会提示输入 NIS 服务器的列表。请先输入您正在使用的本地从属服务器的名称,然后输入主服务器的名称,随后按照从物理上最近到最远(从网络角度看)的顺序输入域中其他 NIS 从属服务器的名称。

  5. 确定 NIS 客户机是否正在运行,然后根据需要启动客户机服务。


    # svcs network/nis/client
    
    STATE          STIME     FMRI
    
    online         20:32:56  svc:/network/nis/client:default

    如果 svc:/network/nis/client 显示为 online 状态,则表明 NIS 正在运行。如果该服务的状态为已被禁用,则表明 NIS 未运行。

    1. 如果 NFS 客户机正在运行,请重新启动客户机服务。


      # svcadm restart network/nis/client
      
    2. 如果 NFS 客户机未运行,请启动客户机服务。


      # svcadm enable network/nis/client
      
  6. 将此计算机作为从属服务器进行初始化。


    # /usr/sbin/ypinit -s master
    

    其中,master 是现有的 NIS 主服务器的计算机名。

    对要配置为 NIS 从属服务器的每台计算机重复本节所介绍的过程。

如何在从属服务器中启动 NIS

以下过程说明了如何在从属服务器中启动 NIS。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 停止客户机服务并启动所有 NIS 服务器进程。


    # svcadm disable network/nis/client
    
    # svcadm enable network/nis/server
    

设置 NIS 客户机

下面介绍了配置客户机以使其将 NIS 用作名称服务的两种方法。


注意 –

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


第 6 章 管理 NIS(任务)

本章介绍了如何管理 NIS。本章包含以下主题:


注意 –

NIS 服务由服务管理工具管理。可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。有关将 SMF 与 NIS 结合使用的更多信息,请参见NIS 和服务管理工具。有关 SMF 的概述,请参阅System Administration Guide: Basic Administration中的“Managing Services (Overview)”。另请参阅 svcadm(1M)svcs(1) 手册页以获取更多详细信息。

还可以使用 ypstartypstop 命令来启动和停止 NIS 服务。有关更多信息,请参见 ypstart(1M)ypstop(1M) 手册页。


口令文件和名称空间安全

出于安全原因,请遵循以下原则。

例如,只要主服务器口令输入文件本身不是指向其他文件的链接并且在 Makefile 中已指定,就可将这些文件存储在诸如 /var/yp 等目录或您选择的任何目录中。使用服务管理工具或 ypstart 脚本启动 NIS 服务时,将根据 Makefile 中指定的配置设置正确的目录选项。


注意 –

除了早期的 Solaris 1 版本 passwd 文件格式外,此 NIS 实现还接受 Solaris 2 passwdshadow 文件格式作为生成 NIS 口令映射的输入。


管理 NIS 用户

本节包括有关设置用户口令、向 NIS 域添加新用户以及将用户指定给 netgroups 的信息。

如何向 NIS 域添加新 NIS 用户

  1. 在主 NIS 服务器上,成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 使用 useradd 命令创建新用户的登录 ID。


    # useradd userID
    

    userID 是新用户的登录 ID。此命令将在主 NIS 服务器上的 /etc/passwd/etc/shadow 文件中创建项。

  3. 创建新用户的初始口令。

    要创建新用户可用来登录的初始口令,请运行 passwd 命令。


    # passwd userID
    

    其中,userID 是新用户的登录 ID。系统将提示您输入要指定给此用户的口令。

    由于 useradd 命令创建的口令项已锁定(这意味着新用户无法登录),因此必须执行此步骤。通过指定初始口令,可以解除对该项的锁定。

  4. 如有必要,可将新项复制到服务器的 passwd 映射输入文件中。

    主服务器上的映射源文件应位于 /etc 之外的目录中。将新行从 /etc/passwd/etc/shadow 文件复制并粘贴到服务器上的 passwd 映射输入文件中。有关其他信息,请参见口令文件和名称空间安全

    例如,如果添加了新用户 brown,则 /etc/passwd 中要复制到 passwd 输入文件的行如下所示:


    brown:x:123:10:User brown:/home/brown:/bin/csh:

    要从 /etc/shadow 中复制的有关 brown 的行将如下所示:


    brown:W12345GkHic:6445::::::
  5. 确保 Makefile 正确指定口令输入文件所在的目录。

  6. 如果合适,请从 /etc/passwd/etc/shadow 输入文件中删除新用户的项。

    出于安全原因,请不要在 NIS 主服务器 /etc/passwd/etc/shadow 文件中保留用户项。在将新用户的项复制到存储在其他某个目录中的 NIS 映射源文件后,请在主服务器上使用 userdel 命令删除新用户。

    例如,要从主服务器的 /etc 文件中删除新用户 brown,可以输入以下内容。


    # userdel brown
    

    有关 userdel 的更多信息,请参见 userdel 手册页。

  7. 更新 NIS passwd 映射。

    在更新主服务器上的 passwd 输入文件后,请在包含源文件的目录中运行 make,以更新 passwd 映射。


    # userdel brown
    
    # cd /var/yp
    
    # /usr/ccs/bin/make passwd
    
  8. 将为其登录 ID 指定的初始口令告知新用户。

    登录后,新用户随时可以通过运行 passwd 来建立不同口令。

设置用户口令

用户通过运行 passwd 可以更改口令。

% passwd username

必须先在主服务器上启动 rpc.yppasswdd 守护进程,以更新口令文件,用户才能更改口令。

rpc.yppasswdd 守护进程会在主服务器上自动启动。请注意,如果在 rpc.yppasswdd 中包含 -m 选项,则在 /var/yp 中修改文件后将立即强制执行 make。如果要避免在每次更改 passwd 文件后都执行此 make,请在 ypstart 脚本的 rpc.yppasswd 命令中删除 -m 选项,并通过 crontab 文件控制 passwd 映射的推送。


注意 –

rpc.yppasswd -m 命令后不应包含任何参数。尽管可以通过编辑 ypstart 脚本文件来实现不同操作,但除了可以选择删除 -m 选项外,建议不要修改此文件。此文件调用的所有命令和守护进程都具有适当的命令行参数集。如果选择编辑此文件,在编辑 rpc.yppasswdd 命令时应特别小心。如果添加对 passwd.adjunct 文件的显式调用,必须使用路径 $PWDIR/security/passwd.adjunct;否则,将产生不正确的处理结果。


NIS 网络组

NIS 网络组是为实现您的管理目标而定义的用户或计算机组(集)。例如,可以创建执行以下功能的网络组。

每个网络组都有一个网络组名。网络组不直接设置权限或访问权限。而是由其他 NIS 映射在通常使用用户名或计算机名的地方使用网络组名。例如,假设您创建了一个由网络管理员构成的网络组,名为 netadmins。要向 netadmins 组的所有成员授予对给定计算机的访问权限,只需向该计算机的 /etc/passwd 文件中添加一个 netadmin 项即可。也可以将网络组名添加到 /etc/netgroup 文件中,并将其传播到 NIS netgroup 映射。有关使用网络组的更多详细信息,请参见 netgroup(4)

在使用 NIS 的网络中,主 NIS 服务器上的 netgroup 输入文件用于生成三种映射:netgroupnetgroup.byusernetgroup.byhostnetgroup 映射包含 netgroup 输入文件中的基本信息。另外两种 NIS 映射中包含的信息的格式可在给定计算机或用户的情况下加速网络组信息的查找。

netgroup 输入文件中的项格式如下:name ID,其中 name 是为网络组给定的名称,而 ID 用于标识属于该网络组的计算机或用户。根据需要,可为网络组指定尽量多的 ID(成员),ID 之间用逗号分隔。例如,要创建具有三个成员的网络组,netgroup 输入文件项将使用以下格式:name ID, ID, IDnetgroup 输入文件项中的成员 ID 使用以下格式。


([-|machine], [-|user], [domain])

其中,machine 是计算机名,user 是用户 ID,domain 是计算机或用户的 NIS 域。domain 元素是可选的,并且只应用来标识其他某个 NIS 域中的计算机或用户。每个成员项的 machineuser 元素是必需的,但连字符 (-) 用来表示内容为空。项中的计算机和用户元素之间不存在必然联系。

下面是两个 netgroup 输入文件项样例,每个样例都创建一个名为 admins 的网络组,网络组由用户 haurijuanita(后者在远程域 sales 中)以及计算机 altairsirius 组成。


admins (altair, hauri), (sirius,juanita,sales)

admins (altair,-), (sirius,-), (-,hauri), (-,juanita,sales)

各个程序会在登录、远程挂载、远程登录以及远程 shell 创建期间使用 NIS 映射来进行权限检查。这些程序包括 mountdloginrloginrsh。如果 login 命令在 passwd 数据库中遇到网络组名,它会在网络组映射中查询用户类别。 如果 mountd 守护进程在 /etc/dfs/dfstab 文件中遇到网络组名,它将查看计算机分类的网络组映射。rloginrsh(实际上,任何使用 ruserok 接口的程序)在 /etc/hosts.equiv.rhosts 文件中遇到网络组名时,会在网络组映射中查询计算机以及用户分类信息。

如果向网络中添加新 NIS 用户或计算机,请确保在 netgroup 文件中将其添加到相应网络组中。然后使用 makeyppush 命令创建网络组映射,并将其推送到所有 NIS 服务器。有关使用网络组和网络组输入文件语法的详细信息,请参见 netgroup(4)

使用 NIS 映射

本节包含以下信息:

获取映射信息

通过使用 ypcatypwhichypmatch 命令,用户随时可以从映射中获取有关映射的信息。在下面的示例中,mapname 同时指映射的正式名称和昵称(如果有)。

要列出映射中的所有值,请键入以下命令。


% ypcat mapname

要同时列出映射中的关键字和值(如果有),请键入以下命令。


% ypcat -k mapname

要列出所有映射昵称,请键入以下任何命令。


% ypcat -x

% ypmatch -x

% ypwhich -x

要列出所有可用映射及其主服务器,请键入以下命令。


% ypwhich -m

要列出特定映射的主服务器,请键入以下命令。


% ypwhich -m mapname

要以映射中的项匹配关键字,请键入以下命令。


% ypmatch key mapname

如果要查找的项不是映射中的关键字,请键入以下命令。


% ypcat mapname | grep item

其中,item 是要搜索的信息。要获取有关其他域的信息,请使用这些命令的 -d domainname 选项。

如果请求缺省域之外的域信息的计算机没有到被请求域的绑定,ypbind 将 在 /var/yp/binding/domainname/ypservers 文件中查找该域的服务器列表。如果此文件不存在,该命令将对服务器发出 RPC 广播。在此情况下,被请求域必须具有一台位于请求计算机所在子网的服务器。

更改映射的主服务器

要更改所选映射的主服务器,必须先在新 NIS 主服务器上生成该映射。由于旧的主服务器名称以关键字-值对的形式出现在现有映射中(此对由 makedbm 自动插入),因此将该映射复制到新的主服务器或使用 ypxfr 将副本传送到新的主服务器是不够的。必须将该关键字与新主服务器名重新关联。如果映射具有 ASCII 源文件,则应将此文件复制到新的主服务器。

如何更改映射的主服务器
  1. 在新的主服务器上,成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 更改目录。


    newmaster# cd /var/yp
    
  3. Makefile 必须具有新映射的项,才能指定要进行的映射。否则,请使用名为 sites.byname 的映射立即编辑 Makefile

  4. 要更新映射或重新进行映射,请键入以下命令。


    newmaster# make sites.byname
    
  5. 如果旧的主服务器仍为 NIS 服务器,请远程登录 (rlogin) 到旧的主服务器并编辑 Makefile。确保注释掉 Makefile 中创建 sites.byname 的部分,使其不再被创建。

  6. 如果 sites.byname 只作为 ndbm 文件存在,请在新的主服务器上重新创建它,方法是从任何 NIS 服务器上反汇编副本,然后通过 makedbm 运行反汇编的版本。


    newmaster# cd /var/yp
    
    newmaster# ypcat sites.byname | makedbm -domain/sites.byname
    

    在新的主服务器上创建映射后,必须向其他从属服务器发送新映射的副本。不要使用 yppush,因为其他从属服务器将试图从旧的主服务器(而不是新的主服务器)中获取新副本。解决此问题的典型方法是从新的主服务器向旧的主服务器传送映射副本。为此,请在旧的主服务器上成为超级用户或承担等效角色,并键入以下命令。


    oldmaster# /usr/lib/netsvc/yp/ypxfr -h newmaster sites.byname
    

    现在,可以安全运行 yppush。其余所有的从属服务器仍认为旧的主服务器是当前的主服务器,并将尝试从旧的主服务器中获取最新版本的映射。当客户机执行此操作时,它们将获取新映射,该映射会将新的主服务器指定为当前主服务器。

    如果此方法失败,则可以超级用户身份登录每台 NIS 服务器并执行上面所示的 ypxfr 命令。

修改配置文件

NIS 可以智能解析设置文件。尽管这样可以简化 NIS 管理,但它使 NIS 的行为对设置和配置文件中的更改更敏感。

进行以下任何一项修改时,请使用本节中的过程。

如何修改配置文件

更改 NIS 映射或映射源文件时,无需停止并启动 NIS。

请牢记以下几点。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 停止 NIS 服务器。


    # svcadm disable network/nis/server
    
  3. 对文件进行必要的更改。

  4. 启动 NIS 服务器。


    # svcadm enable network/nis/server
    

修改和使用 Makefile

可以修改 /var/yp 中缺省提供的 Makefile,以满足您的需要。可以添加或删除映射,还可以更改一些目录的名称。


提示 –

请保留原始的 Makefile 的未修改副本,以供将来参考。


使用 Makefile

要添加新的 NIS 映射,必须将该映射的 ndbm 文件副本放入域中每台 NIS 服务器上的 /var/yp/domainname 目录中。通常由 Makefile 执行此操作。在决定将哪台 NIS 服务器用作映射的主服务器之后,请修改主服务器上的 Makefile,以便您可以方便地重新生成映射。可将不同服务器用作不同映射的主服务器,但在大多数情况下,这会导致管理上的混乱。请尽量只将一台服务器设置为所有映射的主服务器。

通常,会将人工可读的文本文件通过 awksedgrep 过滤,以使其适合输入到 makedbm。有关示例,请参阅缺省的 Makefile。有关 make 命令的一般信息,请参见 make(1S)

在决定如何创建 make 可识别的相关性时,请使用 Makefile 中已经存在的机制。请注意,make 对于相关性规则中的行首是否存在制表符非常敏感。缺少制表符会使本来格式正确的项无效。

Makefile 中添加项涉及以下步骤。

例如,为使 Makefile 可以处理自动挂载程序输入文件,必须将 auto_direct.timeauto_home.time 映射添加到 NIS 数据库。

要将这些映射添加到 NIS 数据库,需要修改 Makefile

更改 Makefile 宏/变量

通过更改等号 (=) 右侧的值可以更改在 Makefile 顶部定义的变量设置。例如,如果不想使用 /etc 中的文件作为映射的输入,而想使用另一个目录(如 /var/etc/domainname)中的文件,则应将 DIRDIR=/etc 更改为 DIR=/var/etc/domainname。还应将 PWDIRPWDIR=/etc 更改为 PWDIR=/var/etc/domainname

包括以下变量。

修改 Makefile

以下过程介绍如何在 Makefile 中添加和删除数据库。

如何修改 Makefile 以使用特定数据库
  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 通过添加要添加的数据库的名称来修改以单词 all 开头的行:


    all: passwd group hosts ethers networks rpc services protocols \
    
    	netgroup bootparams aliases netid netmasks \
    
    	auto_direct auto_home auto_direct.time auto_home.time

    各项的顺序不相关,但连续行开头的空白空间必须为制表符,而不是空格。

  3. Makefile 结尾添加以下行:


    auto_direct: auto_direct.time
    
    auto_home: auto_home.time
  4. 在该文件中间添加 auto_direct.time 项。


    auto_direct.time: $(DIR)/auto_direct
    
     @(while read L; do echo $$L; done < $(DIR)/auto_direct
    
     $(CHKPIPE)) | \ (sed -e "/^#/d" -e "s/#.*$$//" -e "/^ *$$/d"
    
     $(CHKPIPE)) | \ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/auto_direct;
    
     @touch auto_direct.time;
    
     @echo "updated auto_direct";
    
     @if [ ! $(NOPUSH) ]; then $(YPPUSH) auto_direct; fi
    
     @if [ ! $(NOPUSH) ]; then echo "pushed auto_direct"; fi

    其中,

    • CHKPIPE 确保在将结果传输给后面的命令之前管道符号 (|) 左侧的操作已成功完成。如果管道左侧的运算未成功完成,该进程将中止,并显示 NIS make terminated 消息。

    • NOPUSH 阻止 makefile 调用 yppush,以使其不能向从属服务器传送新映射。如果未设置 NOPUSH,则会自动完成推送。

    开头的 while 循环旨在消除输入文件中的所有反斜杠扩展行。sed 脚本可消除注释和空行。

    对于其他所有自动挂载程序映射(如 auto_home)或其他任何非缺省映射,应执行相同的过程。

  5. 运行 make


    # make mapname
    

    其中,mapname 是要创建的映射的名称。

如何修改 Makefile 以删除数据库

如果不希望 Makefile 为特定数据库生成映射,请按如下方式编辑 Makefile

  1. all 规则中删除数据库名称。

  2. 为要删除的数据库删除或注释掉数据库规则。

    例如,要删除 hosts 数据库,应删除 hosts.time 项。

  3. 删除时间规则。

    例如,要删除 hosts 数据库,应删除 hosts: hosts.time 项。

  4. 从主服务器和从属服务器中删除映射。

更新和修改现有映射

安装 NIS 之后,您可能会发现,有些映射需要频繁更新,而其他映射则从来不需要更改。例如,在大公司的网络中,passwd.byname 映射可能会频繁更改,而 auto_master 映射则只进行少量更改,甚至不进行任何更改。

缺省 NIS 映射中所述,缺省 NIS 映射的缺省位置是在主服务器上的 /var/yp/domainname 中,其中 domainname 是 NIS 域的名称。需要更新映射时,可以根据该映射是否为缺省映射来使用两个更新过程之一。

以下各部分介绍如何使用各种更新工具。实际上,您可能决定只在系统已启动并运行后添加非缺省映射或更改 NIS 服务器集时才使用这些工具。

如何更新随缺省集提供的映射

使用以下过程可以更新随缺省集提供的映射。

  1. 成为主服务器上的超级用户。

    请始终只在主服务器上修改 NIS 映射。

  2. 无论要更改的映射的源文件位于 /etc 中还是位于您选择的其他某个目录中,都对该文件进行编辑。

  3. 键入以下命令。


    # cd /var/yp
    
    # make mapname
    

    然后,make 命令将根据您在其相应文件中所做的更改来更新映射。该命令还会在其他服务器中传播更改。

传播 NIS 映射

更改映射后,Makefile 将使用 yppush 向从属服务器传播新映射(除非在 Makefile 中设置了 NOPUSH。)它通过通知 ypserv 守护进程和发送映射传送请求来完成此操作。然后,从属服务器上的 ypserv 守护进程会启动 ypxfr 进程,该进程反过来与主服务器上的 ypxfrd 守护进程联系。在进行一些基本检查(例如,映射是否真的发生了更改?)后,便会传送映射。然后,从属服务器上的 ypxfr 将向 yppush 进程发送响应,指明传送是否成功。


注意 –

上述过程适用于新创建的、但从属服务器中尚不存在的映射。必须通过在从属服务器上运行 ypxfr 将新映射发送给从属服务器。


有时候,映射无法传播,必须使用 ypxfr 手动发送新映射信息。可以选择以两种不同方法使用 ypxfr:通过根 crontab 文件定期使用,或在命令行中交互使用。这些方法将在以下各节中进行讨论。

cron 用于映射传送

不同的映射具有不同的更改速率。例如,有些映射有时候几个月都不更改一次(如缺省映射中的 protocols.byname 以及非缺省映射中的 auto_master);但 passwd.byname 可能一天就会进行多次更改。使用 crontab 命令调度映射传送可为各映射设置特定的传播时间。

要以适合于映射的速率定期运行 ypxfr,每台从属服务器中的根 crontab 文件都应包含相应的 ypxfr 项。ypxfr 将与主服务器联系,并仅在主服务器中的副本比本地副本更新时才传送映射。


注意 –

如果主服务器运行带有缺省 -m 选项的 rpc.yppasswdd,则每次有人更改 yp 口令时,passwd 守护进程都会运行 make,以重新生成 passwd 映射。


将 Shell 脚本用于 cronypxfr

作为为每个映射创建单独的 crontab 项的备选方法,您可能更喜欢让根 crontab 命令运行可定期更新所有映射的 shell 脚本。用于更新映射的 shell 脚本样例位于 /usr/lib/netsvc/yp 目录中。这些脚本名为 ypxfr_1perdayypxfr_1perhourypxfr_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 将尝试从主服务器中获取映射。如果执行 ypxfrypserv 未在本地运行,则必须使用 -c 标志,以使 ypxfr 不向本地 ypserver 发送清除当前映射的请求。

可以使用 -s domain 选项从其他域向本地域传送映射。这些映射在各个域中应该相同。例如,两个域可能共享相同的 services.bynameservices.byaddr 映射。或者,也可以使用 rcprdist 来获取更多控制,以便跨域传送文件。

直接调用 ypxfr

另一种调用 ypxfr 的方法是将其作为命令来运行。通常,只在异常情况下使用此方法-例如,通过设置临时 NIS 服务器来创建测试环境时或在尝试使断开服务的 NIS 服务器快速与其他服务器保持一致时。

记录 ypxfr 活动

可在日志文件中捕获 ypxfr 的传送尝试和结果。如果存在名为 /var/yp/ypxfr.log 的文件,则会向该文件中附加结果。对于该日志文件的大小没有任何限制。为防止日志文件无限制地增大,请通过键入以下命令不断清空该文件。


# cd /var/yp

# cp ypxfr.log ypxfr.log.old

# cat /dev/null > /var/yp/ypxfr.log

可让 crontab 一周执行一次上述命令。要禁用日志记录,请删除日志文件。

修改缺省映射

要更新非缺省映射,必须执行下列操作。

  1. 创建或编辑对应的文本文件。

  2. 生成(或重新生成)新映射或更新的映射。有两种方法可以生成映射。

    • 使用 Makefile。使用 Makefile 是生成非缺省映射的首选方法。如果映射在 Makefile 中具有一项,请运行 make name,其中 name 是要生成的映射的名称。如果映射没有 Makefile 项,请尝试根据修改和使用 Makefile中的说明创建一项。

    • 使用 /usr/sbin/makedbm 程序。makedbm(1M) 全面介绍了此命令。

使用 makedbm 修改非缺省映射

如果没有输入文件,则可通过两种不同的方法使用 makedbm 来修改映射:

从文本文件中创建新映射

假设使用编辑器或 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 创建映射;但是,您实际必须执行的每项操作都可以通过 ypinitMakefile 来完成,除非在系统启动并运行后向数据库中添加了非缺省映射或更改了 NIS 服务器集。

无论在 /var/yp 中使用 Makefile 还是其他某个过程,目标都是相同的。格式正确的新 dbm 文件对必须在主服务器上的映射目录中结束。

添加从属服务器

NIS 运行后,可能需要创建在为 ypinit 给定的初始列表中未包括的 NIS 从属服务器。

添加 NIS 从属服务器:

如何添加从属服务器
  1. 在主服务器上,成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 转至 NIS 域目录。


    # cd /var/yp/domainname
    
  3. 反编译 ypservers 文件。


    # makedbm -u ypservers >/tmp/temp_file
    

    makedbm 命令可将 ypserversndbm 格式转换为临时 ASCII 文件 /tmp/temp_file

  4. 使用文本编辑器编辑 /tmp/temp_file 文件。将新的从属服务器的名称添加到服务器列表中。然后,保存并关闭该文件。

  5. 运行 makedbm 命令,以 temp_file 作为输入文件,以 ypservers 作为输出文件。


    # makedbm /tmp/temp_file ypservers
    

    然后,makedbm 会将 ypservers 重新转换回 ndbm 格式。

  6. 通过在从属服务器上键入以下命令来验证 ypservers 映射是否正确(由于没有用于 ypservers 的 ASCII 文件)。


    slave3# makedbm -u ypservers
    

    makedbm 命令会在屏幕上显示 ypservers 中的每项。


    注意 –

    如果某计算机名不在 ypservers 中,则该计算机不会收到映射文件的更新,原因是 yppush 会从此映射查看从属服务器的列表。


  7. 在新的 NIS 从属服务器上,成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  8. 设置新的从属服务器的 NIS 域目录。

    从主服务器中复制 NIS 映射,然后启动 NIS 客户机。运行 ypinit 命令时,请遵循提示并按优先级顺序列出 NIS 服务器。


    slave3# cd /var/yp
    
    slave3# ypinit -c
    
    slave3# svcadm enable network/nis/client
    

  9. 将此计算机作为从属服务器进行初始化。


    slave3# /usr/sbin/ypinit -s ypmaster
    

    其中,ypmaster 是现有的 NIS 主服务器的计算机名。

  10. 停止作为 NIS 客户机运行的计算机。


    # svcadm disable network/nis/client
    
  11. 启动 NIS 从属服务。


    # svcadm enable network/nis/server
    

使用启用 C2 安全的 NIS

如果存在 $PWDIR/security/passwd.adjunct 文件,则会自动启动 C2 安全。 ($PWDIR/var/yp/Makefile 中定义。)C2 安全模式使用 passwd.adjunct 文件来创建 passwd.adjunct NIS 映射。在此实现中,NIS 允许同时使用 passwd.adjunct 文件和 shadow 文件来管理安全。仅当键入以下命令时,才会处理 passwd.adjunct 文件。


# make passwd.adjunct

在 C2 安全模式下手动运行 make 时,make passwd 命令只处理 passwd 映射,而不处理 passwd.adjunct 映射。

更改计算机的 NIS 域

要更改计算机的 NIS 域名,请执行以下操作。

如何更改计算机的 NIS 域名
  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 编辑计算机的 /etc/defaultdomain 文件,用计算机的新域名替换其当前内容。

    例如,如果当前域名为 sales.doc.com,则可将其更改为 research.doc.com

  3. 运行 domainname `cat /etc/defaultdomain'

  4. 将计算机设置为 NIS 客户机、从属服务器或主服务器。

    有关详细信息,请参见第 5 章,设置和配置 NIS 服务

将 NIS 与 DNS 结合使用

通常,使用 nsswitch.conf 文件配置 NIS 客户机,使其只将 NIS 用于计算机名和地址查找。如果此类查找失败,NIS 服务器可将这些查找转发给 DNS。

如何通过 NIS 和 DNS 配置计算机名和地址查找
  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”

  2. 两个映射文件(hosts.bynamehosts.byaddr)中必须包括 YP_INTERDOMAIN 关键字。要测试此关键字,请编辑 Makefile 并修改以下各行。


    #B=-b
    
    B=


    B=-b
    
    #B=

    现在,makedbm 在生成映射时将以 -b 标志启动,并会在 ndbm 文件中插入 YP_INTERDOMAIN 关键字。

  3. 运行 make 命令,以重新生成映射。


    # /usr/ccs/bin/make hosts
    
  4. 检查是否所有 NIS 服务器的 /etc/resolv.conf 文件都指向有效的名称服务器。


    注意 –

    如果存在未运行 Solaris 发行版 2 的 NIS 服务器,请确保主机映射中存在 YP_INTERDOMAIN


  5. 要启用 DNS 转发,请重新启动每台服务器。


    # svcadm restart network/nis/server:<instance>
    

    在此 NIS 实现中,ypserv 将自动以 -d 选项启动,以将请求转发给 DNS。

处理混合的 NIS 域

如果主服务器和从属服务器都未运行 Solaris 2,请参阅下表了解如何避免可能遇到的问题。表示法 "4.0.3+" 表示该发行版以及更新发行版的 SunOS。makedm -b 是对 Makefile 中的 "B" 变量的引用。

表 6–1 异构 NIS 域中的 NIS/DNS

从属 

主 

4.0.3+ 

Solaris NIS 

4.0.3+

主: makedbm -b

从属: ypxfr

主: makedbm -b

从属: ypxfr -b

主: ypserv -d

从属: ypxfr -b

Solaris NIS

主: makedbm -b

从属: ypxfr

主: makedbm -b

从属: ypxfr

主: ypserv -d

从属:带有 resolv.confypxfr -bypxfr

禁用 NIS 服务

如果禁用 NIS 主服务器上的 ypserv,您将无法再更新任何 NIS 映射。

第 7 章 NIS 疑难解答

本章介绍如何解决运行 NIS 的网络所遇到的问题。还介绍了在 NIS 客户机和 NIS 服务器中存在的问题。

在尝试调试 NIS 服务器或客户机之前,请先阅读第 4 章,网络信息服务 (Network Information Service, NIS)(概述),其中对 NIS 环境进行了介绍。然后,在本节中查找最能恰当描述您所遇到的问题的副标题。


注意 –

NIS 服务由服务管理工具管理。可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。有关将 SMF 与 NIS 结合使用的更多信息,请参见NIS 和服务管理工具。有关 SMF 的概述,请参阅System Administration Guide: Basic Administration中的“Managing Services (Overview)”。另请参阅 svcadm(1M)svcs(1) 手册页了解详细信息。

还可以使用 ypstartypstop 命令来启动和停止 NIS 服务。有关更多信息,请参见 ypstart(1M)ypstop(1M) 手册页。


NIS 绑定问题

症状

NIS 绑定问题包括以下常见症状。

影响一台客户机的 NIS 问题

如果只有一两台客户机出现表明存在 NIS 绑定问题的症状,则可能是这些客户机存在问题。如果许多 NIS 客户机都无法正确绑定,则可能是一台或多台 NIS 服务器存在问题。请参见影响许多客户机的 NIS 问题

ypbind 未在客户机上运行

一台客户机中存在问题,但同一子网上的其他客户机运行正常。在存在问题的客户机上,在满足以下条件的目录中运行 ls -l:包含由许多用户拥有的文件,而这些用户又包括该客户机 /etc/passwd 文件中没有的一些用户,如 /usr。如果显示结果将不在本地 /etc/passwd 中的文件属主以数字形式列出,而不是名称,则表明 NIS 服务未在该客户机上运行。

这些症状通常意味着客户机 ypbind 进程未运行。请验证 NIS 客户机服务是否正在运行。


client# svcs network/nis/client

STATE          STIME    FMRI

disabled       Sep_01   svc:/network/nis/client:default

如果该客户机被禁用,请作为超级用户登录或承担等效角色,并启动 NIS 客户机服务。


client# svcadm enable network/nis/client

缺少域名或域名不正确

一台客户机中存在问题,其他客户机运行正常,但 ypbind 正在出问题的客户机上运行。该客户机可能有一个域设置得不正确。

在该客户机上,运行 domainname 命令,以查看设置了哪个域名。


client7# domainname neverland.com

将输出与 NIS 主服务器上 /var/yp 中的实际域名进行比较。实际 NIS 域显示为 /var/yp 目录中的子目录。


Client7# ls /var/yp...

-rwxr-xr-x 1 root Makefile

drwxr-xr-x 2 root binding

drwx------ 2 root doc.com ...

如果在计算机上运行 domainname 时返回的域名与在 /var/yp 中作为目录列出的服务器域名不同,则在计算机的 /etc/defaultdomain 文件中指定的域名不正确。作为超级用户登录或承担等效角色,并在计算机的 /etc/defaultdomain 文件中更正该客户机的域名。这样可以确保计算机每次引导时,域名都是正确的。立即重新引导计算机。


注意 –

域名区分大小写。


客户机未绑定到服务器

如果域名设置正确,而且 ypbind 正在运行,但命令仍然挂起,则请通过运行 ypwhich 命令来确保客户机已绑定到服务器。如果刚刚启动 ypbind,则可多运行几次 ypwhich(通常,第一次运行时会报告域未绑定,第二次便会成功)。

没有可用的服务器

如果域名设置正确,而且 ypbind 正在运行,但有消息指出客户机无法与服务器通信,则原因可能有多种:


注意 –

出于安全和管理控制的原因,最好在客户机的 ypservers 文件中指定该客户机要绑定到的服务器,而不是让客户机通过广播来搜索服务器。广播将为不同客户机列出不同服务器,从而会降低网络和客户机的运行速度,并妨碍您平衡服务器负载。


ypwhich 显示不一致

在同一客户机上多次使用 ypwhich 时,生成的显示会随 NIS 服务器的更改有所不同。这很正常。当网络或 NIS 服务器繁忙时,NIS 客户机到 NIS 服务器的绑定会随着时间而变化。网络总是尽可能趋向于在一个平衡点达到稳定,此平衡点指所有客户机从 NIS 服务器获得响应的时间都可以接受。只要您的客户机能够获得 NIS 服务,服务来源便无关紧要。例如,一台 NIS 服务器计算机可以从网络中的其他 NIS 服务器获取其 NIS 服务。

当无法进行服务器绑定时

在无法进行本地服务器绑定的特殊情况下,使用 ypset 命令可以暂时允许绑定到其他网络或子网中的其他服务器(如果可用)。但是,为了使用 -ypset 选项,启动 ypbind 时必须使用 -ypset-ypsetme 选项。


注意 –

出于安全考虑,应将 -ypset-ypsetme 选项的使用限制于在受控情况下的调试用途。使用 -ypset-ypsetme 选项会严重破坏安全性,因为当这些守护进程运行时,任何人都可以更改服务器绑定,从而给其他用户造成麻烦,并允许对敏感数据进行未经授权的访问。如果必须以这些选项来启动 ypbind,等修复问题后,应立即中止 ypbind,并在不使用这些选项的情况下重新启动。


ypbind 崩溃

如果 ypbind 崩溃几乎都发生在每次启动后的瞬间,请查找系统其他某个部分中的问题。通过键入以下内容来检查是否存在 rpcbind 守护进程。


% ps -e | grep rpcbind

如果 rpcbind 不存在、无法持续运行或行为异常,请查阅 RPC 文档。

您可以通过正常运行的计算机与存在问题的客户机中的 rpcbind 通信。从运行正常的计算机中,键入以下内容。


% rpcinfo client

如果存在问题的客户机中的 rpcbind 正常,rpcinfo 将生成以下输出。


program	version	netid	address	service	owner

...

100007	2	udp	0.0.0.0.2.219	ypbind	superuser

100007	1	udp	0.0.0.0.2.219	ypbind	superuser

100007	1	tcp	0.0.0.0.2.220	ypbind	superuser

100007	2	tcp	0.0.0.0.128.4	ypbind	superuser

100007	2	ticotsord	\000\000\020H	ypbind	superuser

100007	2	ticots	\000\000\020K	ypbind	superuser

...

您的计算机将具有不同地址。如果未显示这些地址,则 ypbind 无法注册其服务。请重新引导计算机并再次运行 rpcinfo。如果存在 ypbind 进程并且这些进程在每次重新启动 NIS 服务时都会更改,那么请重新引导系统,即使 rpcbind 守护进程正在运行,也应如此。

影响许多客户机的 NIS 问题

如果只有一两台客户机出现表明存在 NIS 绑定问题的症状,则可能是这些客户机存在问题。请参见影响一台客户机的 NIS 问题。如果许多 NIS 客户机都无法正确绑定,则可能是一台或多台 NIS 服务器存在问题。

rpc.yppasswdd 将以 r 开头的非受限 Shell 视为受限制

  1. 创建包含以下特殊字符串的 /etc/default/yppasswdd"check_restricted_shell_name=1"

  2. 如果将 "check_restricted_shell_name=1" 字符串注释掉,则不会进行 "r" 检查。

网络或服务器过载

如果网络或 NIS 服务器过载,从而导致 ypserv 无法使响应在超时时间段内返回到客户机 ypbind 进程,则 NIS 将挂起。

在这些情况下,网络中的每台客户机都会遇到相同或相似的问题。在大多数情况下,这是暂时的。当 NIS 服务器重新引导并重新启动 ypserv 时或 NIS 服务器或网络自身的负载降低时,通常不会再显示消息。

服务器出现异常

确保服务器已启动并且正在运行。如果您的物理位置离服务器较远,请使用 ping 命令。

NIS 守护进程未运行

如果服务器已启动并且正在运行,请尝试找到行为正常的客户机计算机,并运行 ypwhich 命令。如果 ypwhich 不响应,请将其中止。然后作为 root 登录 NIS 服务器并通过输入以下内容来检查 NIS 进程是否正在运行。


# ps -e | grep yp

注意 –

不要将 -f 选项与 ps 结合使用,因为此选项会尝试将用户 ID 转换为名称,从而导致可能不会成功的更多名称服务查找。


如果 NIS 服务器 (ypserv) 和 NIS 客户机 (ypbind) 守护进程都未运行,请通过键入以下内容来使其重新启动。


# svcadm restart network/nis/server

or

# /usr/lib/netsvc/yp/ypstop

# /usr/lib/netsvc/yp/ypstart

如果 ypservypbind 进程都在 NIS 服务器上运行,则请运行 ypwhich。如果 ypwhich 不响应,ypserv 可能已挂起,应重新启动。作为 root 登录服务器后,请通过键入以下内容来重新启动 NIS 服务。


# svcadm restart network/nis/server

or

# /usr/lib/netsvc/yp/ypstop

# /usr/lib/netsvc/yp/ypstart

服务器具有不同版本的 NIS 映射

由于 NIS 在服务器之间传播映射,有时您会在网络中的不同 NIS 服务器上发现同一映射的不同版本。如果差别持续的时间不长,则此版本差异正常并且可以接受。

引起映射差异的最常见原因是某些因素阻止了正常的映射传播。例如,NIS 服务器或 NIS 服务器之间的路由器关闭。当所有 NIS 服务器以及 NIS 服务器之间的路由器都在运行时,ypxfr 应该能成功运行。

如果服务器和路由器运行正常,请检查以下各项:

记录 ypxfr 输出

如果特定从属服务器在更新映射时出现问题,请登录该服务器并以交互方式运行 ypxfr。如果 ypxfr 运行失败,则会指出失败原因,然后您可以针对原因解决问题。如果 ypxfr 运行成功,但您怀疑过程中可能曾出现问题,请创建一个日志文件以便记录消息。要创建日志文件,请在从属服务器上输入以下内容。


ypslave# cd /var/yp 

ypslave# touch ypxfr.log

这将创建一个 ypxfr.log 文件,该文件会保存 ypxfr 的所有输出。

该输出与 ypxfr 在以交互方式运行时所显示的输出类似,但日志文件中的每行都带有时间标记。(您可能会发现时间标记排序不正常。这是正常情况-时间标记会指出 ypxfr 开始运行的时间。如果 ypxfr 的副本同时运行,但它们所用的时间不同,则它们实际上按照不同于调用顺序的顺序将摘要状态行写入日志文件。)日志中将显示任何形式的间歇性故障。


注意 –

解决问题后,请通过删除日志文件来关闭记录功能。如果忘记删除该文件,它会继续无限制地增大。


检查 crontab 文件和 ypxfr Shell 脚本

检查根 crontab 文件,并检查该文件调用的 ypxfr shell 脚本。这些文件中的排字错误会引起传播问题。无法引用 /var/spool/cron/crontabs/root 文件中的 shell 脚本以及无法引用任何 shell 脚本中的映射也会引起错误。

检查 ypservers 映射

此外,还要确保域的主服务器上的 ypservers 映射中列出该 NIS 从属服务器。否则,从属服务器仍可作为服务器正常运行,但 yppush 不会将映射更改传播至从属服务器。

解决方法

如果 NIS 从属服务器的问题不明显,可在调试时解决这一问题,方法是使用 rcpftp 从运行状况良好的 NIS 服务器中复制不一致映射的最新版本。下面显示了如何传送有问题的映射。


ypslave# rcp ypmaster:/var/yp/mydomain/map.\* /var/yp/mydomain

* 字符在命令行中进行了转义,这样它将在 ypmaster 中展开,而不是在 ypslave 本地展开。

ypserv 崩溃

如果 ypserv 进程几乎总是在启动后的瞬间崩溃,并且即使重复激活也无法持续运行,则基本上可遵照ypbind 崩溃中所述的过程进行调试。如下所示,检查是否存在 rpcbind 守护进程。


ypserver% ps -e | grep rpcbind

如果找不到守护进程,请重新引导服务器。或者,如果守护进程正在运行,请键入以下内容并查找类似输出。


% rpcinfo -p ypserver

% program 	vers 	proto 	port 	service

100000	4	tcp	111	portmapper

100000	3	tcp	111	portmapper

100068	2	udp	32813	cmsd

...

100007	1	tcp	34900	ypbind

100004	2	udp	731	ypserv

100004	1	udp	731	ypserv

100004	1	tcp	732	ypserv

100004	2	tcp	32772	ypserv

您的计算机可能具有不同的端口号。表示 ypserv 进程的四个项如下所示。


100004 	2 	udp 	731 	ypserv

100004 	1 	udp 	731 	ypserv

100004 	1 	tcp 	732 	ypserv

100004 	2 	tcp 	32772 	ypserv

如果没有任何项并且 ypserv 无法向 rpcbind 注册其服务,请重新引导计算机。如果存在这些项,请在重新启动 ypserv 之前从 rpcbind 取消注册服务。要从 rpcbind 中取消注册服务,请在服务器上键入以下内容。


# rpcinfo -d number 1 

# rpcinfo -d number 2

其中,numberrpcinfo 报告的ID 号(在以上示例中,ID 号为 100004)。