本章介绍如何设置 Solaris LDAP 名称服务客户机。
本章包含以下主题:
要使 Solaris 客户机将 LDAP 用作名称服务,必须满足以下条件:
客户机的域名必须由 LDAP 服务器提供
nsswitch.conf 文件必须指向 LDAP 以获取所需服务
需要为客户机配置用于定义其行为的所有给定参数
ldap_cachemgr 需要在客户机中运行
至少应有一台将用于所配置的客户机的服务器已启动并正在运行
ldapclient 实用程序可以执行上述除启动服务器之外的所有步骤,因此对于设置 LDAP 客户机而言非常关键。 本章其余部分将举例说明如何使用 ldapclient 实用程序设置 LDAP 客户机,以及如何使用其他各种 LDAP 实用程序获取有关 LDAP 客户机的信息并检查其状态。
可以使用服务管理工具来管理 LDAP 客户机服务。有关 SMF 的概述,请参阅System Administration Guide: Basic Administration中的“Managing Services (Overview)”。另请参阅 svcadm(1M) 和 svcs( 1) 手册页以获取更多详细信息。
可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。
使用 -t 选项暂时禁用服务可为服务配置提供一些保护。如果禁用服务时使用了 -t 选项,则在重新引导后将恢复服务的初始设置。如果禁用服务时未使用 -t,则服务在重新引导后仍将保持禁用状态。
用于 LDAP 客户机服务的故障管理资源标识符 (Fault Managed Resource Identifier, FMRI) 为 svc:/network/ldap/client:<instance>。
使用 svcs 命令可以查询 LDAP 客户机和 ldap_cachemgr 的状态。
svcs 命令和输出示例。
# svcs \*ldap\* STATE STIME FMRI online 15:43:46 svc:/network/ldap/client:default |
svcs -l 命令和输出示例。要获得如下所示的输出,必须在 FMRI 中使用实例名称。
# 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) |
可使用 ps 命令检查守护进程是否存在。
# ps -e | grep slapd root 23320 1 0 Aug 27 ? 16:30 ./ns-slapd -D \ /usr/iplanet/ds5/slapd-lastrev -i /usr/iplanet/ds5/slapd-lastrev/ root 25367 25353 0 15:35:19 pts/1 0:00 grep slapd |
不要将 -f 选项与 ps 结合使用,因为此选项会尝试将用户 ID 转换为名称,从而导致可能不会成功的更多名称服务查找。
ldapclient(1M) 是用于在 Solaris 系统中设置 LDAP 客户机的实用程序。ldapclient 假定已使用适当的客户机配置文件配置了服务器。必须先安装服务器并用适当的配置文件对其进行配置,然后才能设置客户机。
Solaris 操作系统不支持 NIS 客户机与本机 LDAP 客户机共存于同一台客户机上的配置。
使用 ldapclient 设置客户机主要有两种方法。
配置文件
至少需要指定包含配置文件的服务器地址以及要使用的域。如果未指定配置文件,则会使用“缺省”配置文件。服务器将提供其余的必需信息,但代理和证书数据库信息除外。如果客户机的凭证级别为 proxy 或 proxy anonymous,则必须提供代理的绑定 DN 和口令。有关更多信息,请参见指定客户机凭证级别。
手动
在客户机自身中配置配置文件,这意味着要从命令行定义所有参数。这样,配置文件信息便存储在高速缓存文件中,服务器永远不会刷新这些信息。
尽管可以手动配置客户机,但建议不使用此方法。使用配置文件可以降低管理客户机的复杂性和成本。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
运行 ldapclient init 命令。
# ldapclient init \ -a profileName=new \ -a domainName=west.example.com 192.168.0.1 System successfully configured |
请勿直接编辑任何客户机配置文件。 请使用 ldapclient 创建或修改这些文件的内容。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
运行 ldapclient(定义代理值)。
# ldapclient init \ -a proxyDN=cn=proxyagent,ou=profile,dc=west,dc=example,dc=com \ -a domainName=west.example.com \ -a profileName=pit1 \ -a proxyPassword=test1234 192.168.0.1 System successfully configured |
如果要为 proxy 设置要使用的配置文件,则 -a proxyDN 和 -a proxyPassword 是必需的。 由于服务器上保存的配置文件中未存储凭证,因此必须在初始化客户机时提供该信息。与原先在服务器上存储代理凭证的方法相比,此方法更安全。
代理信息用来创建 /var/ldap/ldap_client_cred。其余信息放置在 /var/ldap/ldap_client_file 中。
超级用户或承担等效角色的管理员可以执行手动客户机配置。但是在此过程中会跳过许多检查,因此系统配置相对容易出错。 此外,还必须在每台计算机中更改设置,而不像使用配置文件时那样,只需在一个集中位置进行更改即可。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
使用 ldapclient manual 初始化客户机。
# ldapclient manual \ -a domainName=dc=west.example.com \ -a credentialLevel=proxy \ -a defaultSearchBase=dc=west,dc=example,dc=com \ -a proxyDN=cn=proxyagent,ou=profile,dc=west,dc=example,dc=com \ -a proxyPassword=testtest 192.168.0.1 |
使用 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 NS_LDAP_SEARCH_BASEDN= dc=west,dc=example,dc=com NS_LDAP_CREDENTIAL_LEVEL= proxy |
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
使用 ldapclient mod 命令将身份验证方法更改为 simple。
# ldapclient mod -a authenticationMethod=simple |
使用 ldapclient list 验证是否进行了更改。
# 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 NS_LDAP_SEARCH_BASEDN= dc=west,dc=example,dc=com NS_LDAP_AUTH= simple NS_LDAP_CREDENTIAL_LEVEL= proxy |
ldapclient uninit 可将客户机名称服务恢复到它在最近的 init、modify 或 manual 操作之前的状态。换言之,该命令可对采取的上一个步骤执行“撤消”操作。例如,如果对客户机进行配置,使其使用 profile1,然后更改为使用 profile2,则使用 ldapclient uninit 将使客户机恢复使用 profile1。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见System Administration Guide: Security Services中的“Using Role-Based Access Control (Tasks)”。
使用 ldapclient uninit。
# ldapclient uninit System successfully recovered |
安全数据库文件必须可供任何人读取。请勿在 key3.db 中包括任何私钥。
如果使用 TLS,则必须安装必要的安全数据库。需要特别指出的是,需要证书和密钥数据库文件。例如,如果采用 Netscape Communicator 的旧数据库格式,则需要以下两个文件:cert7.db 和 key3.db。或者,如果使用 Mozilla 的新数据库格式,则需要以下三个文件:cert8.db、key3.db 和 secmod.db。cert7.db 或 cert8.db 文件中包含受信任证书。key3.db 文件包含客户机的密钥。即使 LDAP 名称服务客户机不使用客户机密钥,此文件也必须存在。secmod.db 文件包含安全模块,如 PKCS#11 模块。如果使用的是旧格式,则不需要此文件。
在运行 ldapclient 之前,应设置并安装本节中介绍的必需的安全数据库文件。
有关如何创建并管理这些文件的信息,请参见针对您使用的 Sun Java System Directory Server 版本的管理员指南中“管理 SSL” 一章中有关配置 LDAP 客户机以使其使用 SSL 一节。配置后,这些文件必须存储在 LDAP 名称服务客户机所期望的位置。属性 certificatePath 用来确定此位置。 此位置缺省为 /var/ldap。
例如,在使用 Netscape CommunicatorTM 设置必需的 cert7.db 和 key3.db 文件后,请将这些文件复制到缺省位置。
# cp $HOME/.netscape/cert7.db /var/ldap # cp $HOME/.netscape/key3.db /var/ldap |
然后,向所有人授予读访问权限。
# chmod 444 /var/ldap/cert7.db # chmod 444 /var/ldap/key3.db |
Netscape 在 $HOME/.netscape 目录中管理 cert7.db 和 key3.db 文件,而 Mozilla 将其 cert8.db、key3.db 和 secmod.db 文件放在 $HOME/.mozilla 下的一个子目录中进行管理。如果要将这些安全数据库用于 LDAP 名称服务客户机,则必须将其副本存储在本地文件系统中。
pam_ldap 是用于 LDAP 的身份验证和帐户管理 PAM 模块。请参见pam_ldap(5) 手册页和附录 A,Solaris 10 软件中对 DNS、NIS 和 LDAP 的更新,以获取更多有关 pam_ldap 当前支持的功能的信息。
要配置 PAM,使其使用 UNIX policy,请参考pam_ldap 的示例 pam.conf 文件中的样例进行操作。向客户机的 /etc/pam.conf 文件中添加包含 pam_ldap.so.1 的行。有关详细信息,请参见 pam.conf(4) 手册页。
要配置 PAM,使其使用 LDAP server_policy,请遵照为帐户管理配置的 pam_ldap 的示例 pam_conf 文件中的样例。向客户机的 /etc/pam.conf 文件中添加包含 pam_ldap.so.1 的行。此外,如果 pam.conf 文件样例中的任何 PAM 模块指定了 binding 标志和 server_policy 选项,则必须对该客户机的 /etc/pam.conf 文件中的对应模块使用相同的标志和选项。 而且,还要将 server_policy 选项添加到包含服务模块 pam_authtok_store.so.1 的行中。
启用 pam_ldap 帐户管理后,所有用户在每次登录系统时都必须提供口令。进行验证时必须提供登录口令。因此,使用 rsh、rlogin 或 ssh等工具进行的不基于口令的登录将会失败。
binding 控制标志
使用 binding 控制标志允许本地口令覆盖远程 (LDAP) 口令。例如,如果在本地文件和 LDAP 名称空间中都找到某一用户帐户,则与本地帐户关联的口令将优先于远程口令。因此,如果本地口令到期,即使远程 LDAP 口令仍有效,身份验证也会失败。
server_policy 选项
server_policy 选项指示 pam_unix_auth、pam_unix_account 和 pam_passwd_auth 忽略在 LDAP 名称空间中找到的用户,并允许 pam_ldap 执行身份验证或帐户验证。对于 pam_authtok_store,会向 LDAP 服务器传递一个未经加密的新口令。因此,该口令将根据服务器中配置的口令加密方案存储在目录中。有关更多信息,请参见 pam.conf(4) 和 pam_ldap(5)。
使用 ldaplist 实用程序可以检索有关 LDAP 名称服务的信息。此 LDAP 实用程序会以 LDIF 格式列出 LDAP 服务器中的名称信息。该实用程序可用于进行故障排除。 有关详细信息,请参见 ldaplist(1)。
ldaplist 显示输出时以空白行分隔记录,这对显示由多行组成的大量记录很有帮助。
ldaplist 的输出取决于客户机配置。例如,如果 ns_ldap_search 的值是 sub 而不是 one,ldaplist 将列出当前搜索 baseDN 下的所有项。
下面是 ldaplist 输出的示例。
# ldaplist dn: ou=people,dc=west,dc=example,dc=com dn: ou=group,dc=west,dc=example,dc=com dn: ou=rpc,dc=west,dc=example,dc=com dn: ou=protocols,dc=west,dc=example,dc=com dn: ou=networks,dc=west,dc=example,dc=com dn: ou=netgroup,dc=west,dc=example,dc=com dn: ou=aliases,dc=west,dc=example,dc=com dn: ou=hosts,dc=west,dc=example,dc=com dn: ou=services,dc=west,dc=example,dc=com dn: ou=ethers,dc=west,dc=example,dc=com dn: ou=profile,dc=west,dc=example,dc=com dn: automountmap=auto_home,dc=west,dc=example,dc=com dn: automountmap=auto_direct,dc=west,dc=example,dc=com dn: automountmap=auto_master,dc=west,dc=example,dc=com dn: automountmap=auto_shared,dc=west,dc=example,dc=com |
要列出特定信息(如用户的 passwd 项),请按如下所示使用 getent:
# getent passwd user1 user1::30641:10:Joe Q. User:/home/user1:/bin/csh |
如果要列出所有属性,请将 ldaplist 与 -l 选项结合使用。
# ldaplist -l passwd user1dn: uid=user1,ou=People,dc=west,dc=example,dc=com uid: user1 cn: user1 uidNumber: 30641 gidNumber: 10 gecos: Joe Q. User homeDirectory: /home/user1 loginShell: /bin/csh objectClass: top objectClass: shadowAccount objectClass: account objectClass: posixAccount shadowLastChange: 6445 |
以下各节介绍如何自定义客户机环境。
可以更改任何服务,但一定要小心,因为如果未在服务器上为指定的服务填充数据,则服务会停止工作。而且,在某些情况下,可能不会按缺省情况设置文件。
可以修改 /etc/nsswitch.conf 文件,以自定义每个服务获取信息的位置。 缺省设置存储在 /etc/nsswitch.ldap 中,在初始化客户机时 ldapclient 使用此文件创建 /etc/nsswitch.conf 文件。
如果要通过设置 /etc/resolv.conf 文件来启用 DNS,请按如下所示将 DNS 添加到主机行。
hosts: ldap dns [NOTFOUND=return] files |