本章描述了配置问题以及为解决它们而建议的解决方案。
LDAP 服务由服务管理工具管理。 可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。有关针对 LDAP 使用服务管理工具的更多信息,请参见LDAP 和服务管理工具。有关服务管理工具的概述,请参阅System Administration Guide: Basic Administration中的“管理服务(概述)”。有关更多详细信息,另请参阅 svcadm(1M)和 svcs(1) 手册页。
以下各节介绍了各种可帮助确定 LDAP 客户机环境状态的命令。有关可以使用的选项的其他信息,另请参见相应的手册页。
有关服务管理工具的概述,请参阅System Administration Guide: Basic Administration中的“管理服务(概述)”。有关更多详细信息,另请参阅 svcadm(1M)和 svcs(1) 手册页。
ldap_cachemgr 守护进程必须一直正常运行。否则,系统将无法正常工作。当启动 LDAP 客户机时,客户机会自动启动 ldap_cachemgr 守护进程。因此,如果 ldap_cachemgr 未运行,LDAP 客户机将被禁用。下面是两种用于确定 LDAP 客户机是否联机的方法:
使用 svcs 命令。
# svcs \*ldap\* STATE STIME FMRI disabled Aug_24 svc:/network/ldap/client:default |
或
# svcs -l network/ldap/client:default fmri svc:/network/ldap/client:default enabled true state online next_state none restarter svc:/system/svc/restarter:default contract_id 1598 dependency require_all/none file://localhost/var/ldap/ldap_client_file (-) dependency require_all/none svc:/network/initial (online) dependency require_all/none svc:/system/filesystem/minimal (online) |
向 ldap_cachemgr 传递 -g 选项。
此选项提供更广泛的状态信息,这些信息可用于诊断问题。
# /usr/lib/ldap/ldap_cachemgr -g cachemgr configuration: server debug level 0 server log file "/var/ldap/cachemgr.log" number of calls to ldapcachemgr 19 cachemgr cache data statistics: Configuration refresh information: Previous refresh time: 2001/11/16 18:33:28 Next refresh time: 2001/11/16 18:43:28 Server information: Previous refresh time: 2001/11/16 18:33:28 Next refresh time: 2001/11/16 18:36:08 server: 192.168.0.0, status: UP server: 192.168.0.1, status: ERROR error message: Can't connect to the LDAP server Cache data information: Maximum cache entries: 256 Number of cache entries: 2 |
有关 ldap_cachemgr 守护进程的更多信息,请参见 ldap_cachemgr(1M) 手册页。
成为超级用户或承担等效角色,然后运行带 list 选项的 ldapclient。
# ldapclient list NS_LDAP_FILE_VERSION= 2.0 NS_LDAP_BINDDN= cn=proxyagent,ou=profile,dc=west,dc=example,dc=com NS_LDAP_BINDPASSWD= {NS1}4a3788e8c053424f NS_LDAP_SERVERS= 192.168.0.1, 192.168.0.10 NS_LDAP_SEARCH_BASEDN= dc=west,dc=example,dc=com NS_LDAP_AUTH= simple NS_LDAP_SEARCH_REF= TRUE NS_LDAP_SEARCH_SCOPE= one NS_LDAP_SEARCH_TIME= 30 NS_LDAP_SERVER_PREF= 192.168.0.1 NS_LDAP_PROFILE= pit1 NS_LDAP_CREDENTIAL_LEVEL= proxy NS_LDAP_SERVICE_SEARCH_DESC= passwd:ou=people,?sub NS_LDAP_SERVICE_SEARCH_DESC= group:ou=group,dc=west,dc=example,dc=com?one NS_LDAP_BIND_TIME= 5 |
目前,/var/ldap 文件采用 ASCII 格式。因为文件有时可更改为二进制格式,所以串联文件会产生问题。可以使用 ldapclient list 来访问此信息。有关更多信息,请参见 ldapclient(1M) 手册页。
检查客户机是否正在与 LDAP 服务器通信的最佳方法是使用 ldaplist 命令。 使用不带任何参数的 ldaplist 会转储服务器上的所有容器。 只要这些容器存在且不必填充,此方法就起作用。有关更多信息,请参见 ldaplist(1) 手册页。
如果第一步起作用,则可以尝试使用 ldaplist passwd username 或 ldaplist hosts hostname,但是如果容器中包含大量数据,您可能需要选取一个填充量较小的服务,或者将它们传输到 head 或 more。
以上各节中的大多数命令都假设您已经创建了 LDAP 客户机。 如果尚未创建客户机,请使用 ldapsearch 命令来检查服务器上的数据。 以下示例列出了所有容器:
# ldapsearch -h server1 -b "dc=west,dc=example,dc=com" -s one "objectclass=*" |
在 Solaris 9 和早期版本中,在缺省情况下,ldapsearch 命令可生成非标准文本表示形式的输出。在以后的 Solaris 发行版中,ldapsearch 的缺省输出是行业标准化的 LDIF 格式,该格式由 RFC-2849 定义。所有版本的 ldapsearch 都可以使用 -L 选项输出 LDIF 格式。
以下各节描述了 LDAP 配置问题以及为解决它们而建议的解决方案。
在执行主机查找时, Solaris 平台 LDAP 客户机后端返回完全限定的 主机名,如由 gethostbyname() 和 getaddrinfo() 返回的主机名。 如果存储的名称是限定名称(即至少包含一个点),则客户机将按原样返回该名称。例如,如果存储的名称是 hostB.eng,则返回的名称是 hostB.eng。
如果存储在 LDAP 目录中的名称不是限定名称(即不包含点),则客户机后端会在该名称后面附加域名部分。例如,如果存储的名称是 hostA,则返回的名称是 hostA.domainname。
如果 DNS 域名 不同于 LDAP 域名, 那么,除非所存储的主机名是完全限定的名称,否则 LDAP 名称服务不能用于为主机名提供服务。
在登录过程中,LDAP 客户机使用 PAM 模块 进行用户验证。在使用标准的 UNIX PAM 模块时,口令是从服务器读取并在客户端上检查的。这可能会由于以下某种原因而失败:
ldap 未由 /etc/nsswitch.conf 文件中的 passwd 服务使用。
代理无法读取服务器列表中用户的 userPassword 属性。必须至少允许一个代理读取口令,因为该代理可以将口令返回给客户机进行比较。pam_ldap 不需要对口令具有读取访问权限。
代理可能没有正确的口令。
该项没有 shadowAccount 对象类。
没有为该用户定义口令。
在使用 ldapaddent 时,必须使用 -p 选项来确保已向该用户项中添加了口令。如果使用不带 -p 选项的 ldapaddent,用户的口令将不存储在目录中,除非使用 ldapaddent 另外添加了 /etc/shadow 文件。
没有可访问的 LDAP 服务器。
检查服务器的状态。
# /usr/lib/ldap/ldap_cachemgr -g |
pam.conf 的配置有误。
没有在 LDAP 名称空间中定义该用户。
NS_LDAP_CREDENTIAL_LEVEL 对于 pam_unix 设置为 anonymous,而且 userPassword 对于匿名用户不可用。
口令没有以 crypt 格式存储。
如果所配置的 pam_ldap 支持帐户管理,则登录失败可能是由以下某种原因引起的:
用户的口令已过期。
用户的帐户由于登录失败尝试的次数过多而被锁定。
用户的帐户已经由管理员停用。
用户尝试通过不使用口令的程序(如 rsh、rlogin、ssh 或 sftp)进行登录。
LDAP 数据库依赖索引 来改进搜索性能。如果索引的配置有误,会大大降低性能。本文档中包括一组应当针对其编制索引的常见属性。您还可以添加自己的索引来改进站点的性能。
在指定了 profileName 属性时,无法使用带 init 选项的 ldapclient 初始化客户机。失败的原因 包括:
在命令行上指定的域名有误。
没有在 DIT 中设置 nisDomain 属性,该属性表示指定客户机域的入口点。
未在服务器上正确设置访问控制信息,从而不允许在 LDAP 数据库中进行匿名搜索。
向 ldapclient 命令传递的服务器地址有误。请使用 ldapsearch 检验服务器地址。
向 ldapclient 命令传递的配置文件名称有误。请使用 ldapsearch 检验 DIT 中的配置文件名称。
针对客户机网络接口使用 snoop,看传出的是哪种通信并确定哪台服务器正与之通信。
使用带 -g 选项的 ldap_cachemgr 可能是比较有用的调试方法,因为通过它可以查看当前的客户机配置和统计信息。例如,
# ldap_cachemgr -g |
将按上面提到的那样,在标准输出中列显当前的配置和统计信息(包括所有 LDAP 服务器的状态)。请注意,不必成为超级用户即可执行此命令。
如果 ldapclient 命令挂起,则在恢复先前的环境之后按 Ctrl-C 将退出。 如果出现这种情况,请与服务器管理员核对,以确保该服务器正在运行。
还要在配置文件中或从命令行检查服务器列表中的属性,并确保服务器信息正确无误。