本节包括两个方面的疑难解答:
有时,N2L 服务器会记录与内部 LDAP 问题相关的错误,并生成与 LDAP 相关的错误消息。尽管这些错误不是致命的,但是它们指明有问题需要检查。例如,N2L 服务器可能会继续工作,但是会提供过时或不完整的结果。
以下列出了在实现 N2L 服务时可能遇到的一些常见的 LDAP 错误消息,以及错误说明、可能的原因和针对这些错误的解决方案。
超过管理限制
错误号:11
原因:执行的 LDAP 搜索大于目录服务器的 nsslapd-sizelimit 属性所允许的大小。将仅返回部分信息。
解决方案:增大 nsslapd-sizelimit 属性的值,或者针对失败的搜索实现 VLV 索引。
DN 语法无效
错误号:34
原因:尝试写入的 LDAP 项的 DN 包含非法字符。N2L 服务器尝试对 DN 中生成的非法字符(如 + 号)转义。
解决方案:检查 LDAP 服务器错误日志,确定写入的非法 DN,然后修改生成了非法 DN 的 NISLDAPmapping 文件。
对象类违规
错误号:65
原因:尝试写入无效的 LDAP 项。通常,出现此错误是由于缺少 MUST 属性,以下任一情况都可能会导致此错误。
NISLDAPmapping 文件中存在导致所创建的项缺少属性的错误
尝试向不存在的对象添加 AUXILIARY 属性
例如,如果尚未从 passwd.byxxx 映射中创建用户名,则尝试向该用户添加辅助信息将会失败。
解决方案:对于 NISLDAPmapping 文件中的错误,检查写入服务器错误日志中的内容,确定问题的性质。
无法联系 LDAP 服务器
错误号:81
原因:ypserv 文件可能错误配置为指向错误的 LDAP 目录服务器。或者,目录服务器当前可能未运行。
解决方案:
重新配置 ypserv 文件,使其指向正确的 LDAP 目录服务器。
要确认 LDAP 服务器是否正在运行,请在目录服务器上成为超级用户或承担等效角色,然后键入以下内容:
# pgrep -l slapd |
超时
错误号:85
原因:LDAP 操作已超时,这通常发生在从 DIT 更新映射时。该映射现在可能包含过时的信息。
解决方案:增大 ypserv 配置文件中的 nisLDAPxxxTimeout 属性。
运行 N2L 服务器时可能会出现以下问题。此处提供了可能的原因和解决方案。
映射文件 NISLDAPmapping 非常复杂。许多可能的错误都会导致映射出现意外的行为方式。请使用以下方法来解决这类问题。
运行 ypserv -ir(或 -Ir)时显示控制台消息
问题:控制台上会显示简单的消息,并且服务器会退出(详细说明将写入 syslog)。
原因:映射文件的语法可能不正确。
解决方案:检查并更正 NISLDAPmapping 文件中的语法。
NIS 守护进程在启动时退出
问题: 运行 ypserv 或其他 NIS 守护进程时,会记录一条与 LDAP 相关的错误消息,并且守护进程会退出。
原因: 这可能是由于以下原因之一导致的:
无法访问 LDAP 服务器。
在 NIS 映射或 DIT 中找到的项与指定的映射不兼容。
尝试对 LDAP 服务器执行读写操作时返回错误。
解决方案:检查 LDAP 服务器上的错误日志。请参见常见的 LDAP 错误消息中所列的 LDAP 错误。
NIS 操作产生意外的结果
问题:NIS 操作未返回预期的结果,但是未记录错误。
原因:LDAP 或 NIS 映射中可能存在不正确的项,这会导致映射无法按照预期的方式完成。
解决方案:检查并更正 LDAP DIT 以及 N2L 版本的 NIS 映射中的各项。
检查 LDAP DIT 中的项是否正确,并根据需要更正这些项。
如果使用的是 Sun Java System Directory Server,请通过运行 directoryserver startconsole 来启动管理控制台。
检查 /var/yp 目录中 N2L 版本的 NIS 映射是否包含预期的项,方法是将新生成的映射与原来的映射进行比较。请根据需要更正这些项。
# cd /var/yp/domainname # makedbm -u test.byname # makedbm -u LDAP_test.byname |
检查映射的输出时请注意以下情况:
在这两个文件中,各项的顺序可能不同。
在对输出进行比较之前,请使用 sort 命令。
在这两个文件中,空格的用法可能不同。
在对输出进行比较时,请使用 diff -b 命令。
NIS 映射的处理顺序
问题:出现对象类违规。
原因:运行 ypserv -i 命令时,会读取每个 NIS 映射并将其内容写入 DIT 中。同一个 DIT 对象的属性可以由多个映射创建。通常,可通过一个映射来创建该对象的大部分属性,包括该对象的所有 MUST 属性。其他映射则负责创建其他 MAY 属性。
映射是按照 nisLDAPobjectDN 属性在 NISLDAPmapping 文件中的出现顺序来处理的。如果包含 MAY 属性的映射在包含 MUST 属性的映射之前进行处理,则会出现对象类违规。有关此错误的更多信息,请参见常见的 LDAP 错误消息中的错误 65。
解决方案:将 nisLDAPobjectDN 属性重新排序,以便按照正确的顺序处理这些映射。
临时解决方法是多次重新运行 ypserv -i 命令。每次执行该命令,都会增加更多的 LDAP 项。
如果这种映射方式会导致不能从至少一个映射创建某个对象的所有 MUST 属性,则不支持以这种方式进行映射。
问题:服务器超时。
原因:N2L 服务器在刷新映射时,可能会对 LDAP 目录进行大量访问。如果 Sun Java System Directory Server 配置不正确,则该操作可能会因超时而无法完成。
解决方案:要避免目录服务器超时,请手动或者通过运行 idsconfig 命令来修改 Sun Java System Directory Server 属性。有关详细消息,请参见常见的 LDAP 错误消息和使用 Sun Java System Directory Server 进行 NIS 到 LDAP 转换的最佳做法。
问题:ypserv 命令可以启动,但是不响应 NIS 请求。
原因:N2L 服务器锁定文件不能正确地同步对 NIS 映射的访问。绝不允许发生这种情况。
解决方案:在 N2L 服务器上键入以下命令:
# svcadm disable network/nis/server:default # rm /var/run/yp_maplock /var/run/yp_mapupdate # svcadm enable network/nis/server:default |
问题:N2L 服务器死锁。
原因:如果 hosts、ipnodes 或 ypserv 文件中未正确列出 N2L 主服务器和 LDAP 服务器的地址,则可能会出现死锁问题。有关如何为 N2L 配置正确地址的详细消息,请参见NIS 到 LDAP 转换的先决条件。
有关死锁情况的示例,请考虑以下一系列事件:
NIS 客户机尝试查找 IP 地址。
N2L 服务器发现 hosts 项已过时。
N2L 服务器尝试通过 LDAP 更新 hosts 项。
N2L 服务器从 ypserv 获取其 LDAP 服务器的名称,然后使用 libldap 进行搜索。
libldap 尝试通过调用名称服务转换器来将 LDAP 服务器的名称转换为 IP 地址。
名称服务转换器可能会对 N2L 服务器发出 NIS 调用,这会造成死锁。
解决方案:在 N2L 主服务器上的 hosts 或 ipnodes 文件中列出 N2L 主服务器和 LDAP 服务器的地址。必须将服务器地址列在 hosts、ipnodes 还是同时列在这两个文件中取决于为解析本地主机名而配置这些文件的方式。另外,还要检查在查找顺序中,nsswitch.conf 文件中的 hosts 和 ipnodes 项是否将 files 列在 nis 之前。
此死锁问题的替代解决方案是在 ypserv 文件中列出 LDAP 服务器的地址而不是其主机名。这意味着 LDAP 服务器地址将列在其他位置。因此,更改 LDAP 服务器或 N2L 服务器的地址会使工作量稍有增加。