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

影响许多客户机的 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)。