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

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)。