跳过导航链接 | |
退出打印视图 | |
系统管理指南:命名和目录服务(DNS、NIS 和 LDAP) Oracle Solaris 10 8/11 Information Library (简体中文) |
4. 网络信息服务 (Network Information Service, NIS)(概述)
11. 为使用 LDAP 客户机设置 Sun Java System Directory Server(任务)
ldapclient(1M) 是用于在 Solaris 系统中设置 LDAP 客户机的实用程序。ldapclient 假定服务器已配置了适当的客户机配置文件。您必须先安装服务器并用适当的配置文件对其进行配置,然后才能设置客户机。
注 - Solaris 操作系统不支持 NIS 客户机与本地 LDAP 客户机共存于同一客户机系统中的配置。
使用 ldapclient 设置客户机主要有两种方法。
配置文件
您至少需要指定包含配置文件以及要使用的域的服务器地址。如果未指定配置文件,则会使用“缺省”的配置文件。服务器将提供其余的必需信息,但代理和证书数据库信息除外。如果客户机的凭证级别为 proxy 或 proxy anonymous,则必须提供代理的绑定 DN 和口令。有关更多信息,请参见指定客户机凭证级别。
自 Solaris 10 10/09 发行版开始,提供了 enableShadowUpdate 开关。要启用阴影数据更新,您必须提供管理凭证(adminDN 和 adminPassword)。
手动
在客户机上配置配置文件,这意味着要从命令行定义所有参数。这样,配置文件信息将存储在高速缓存文件中,服务器永远不会刷新这些信息。
注 - 尽管您可以手动配置客户机,但并不建议使用此方法。使用配置文件可以降低管理客户机的复杂性和成本。
角色包含授权和具有一定特权的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的第 9 章 "使用基于角色的访问控制(任务)"。
# ldapclient init \ -a profileName=new \ -a domainName=west.example.com 192.168.0.1 System successfully configured
注 - 请勿直接编辑任何客户机配置文件。请使用 ldapclient 命令创建或修改这些文件的内容。
开始之前
使用每用户凭证设置客户机之前,必须已经配置以下各项:
一台或多台 Kerberos KDC 服务器必须已配置且正在运行。
DNS、到 DNS 服务器的客户机访问以及至少一台 DNS 服务器必须已配置且正在运行。
客户机上的 Kerberos 必须已配置且已启用。
必须存在 Kerberos 客户机安装配置文件。此类配置文件可能如下所示:
# cat /usr/tmp/krb5.profile REALM SPARKS.COM KDC kdc.example.com ADMIN super/admin FILEPATH /usr/tmp/krb5.conf NFS 1 DNSLOOKUP none
LDAP 服务器必须已安装并配置为支持 sasl/GSSAPI。
必须存在适当的标识映射配置。
必须在 KDC 中设置了目录服务器和 KDC 的 Kerberos 主机主体。
idsconfig 必须已在要使用的目录服务器 DIT 上运行。
必须已创建适当的每用户 gssapi 配置文件(如 gssapi_EXAMPLE.COM)。
idsconfig 中的每用户配置文件的说明如下面的部分示例所示:
# /usr/lib/ldap/idsconfig Do you wish to continue with server setup (y/n/h)? [n] y Enter the iPlanet Directory Server's (iDS) hostname to setup: kdc.example.com Enter the port number for iDS (h=help): [389] <Enter your port> Enter the directory manager DN: [cn=Directory Manager] <Enter your DN> Enter passwd for cn=Directory Manager : <Enter your password> Enter the domainname to be served (h=help): [example.com] <Enter your domain> Enter LDAP Base DN (h=help): [dc=example,dc=com] <Enter your DN> GSSAPI is supported. Do you want to set up gssapi:(y/n) [n] y Enter Kerberos Realm: [EXAMPLE.COM] EXAMPLE.COMYou can create a sasl/GSSAPI enabled profile with default values now. Do you want to create a sasl/GSSAPI default profile ? [n] y Enter. the profile name (h=help): [gssapi_EXAMPLE.COM] <Enter> GSSAPI setup is done. ...
密钥分发中心 (Key Distribution Center, KDC) 中必须存在所需的用户主体。
在客户机上,必须使用含有诸如以下命令的客户机配置文件初始化 Kerberos:
# /usr/sbin/kclient -p /usr/tmp/krb5.profile
/etc/nsswitch.ldap 必须配置为针对 hosts 和 ipnodes 使用 dns。如有需要,可使用编辑器修改此文件,如下所示:
host: files dns ipnodes: files dns
/etc/resolv.conf 必须已配置,并且 dns 服务必须正在运行。有关详细信息,请参见本文档中有关 DNS 的章节。
目录服务器 DIT 必须至少预装入此客户机的用户、客户机主机和必要的 auto_home LDAP 项。有关如何使用 ldapaddent 添加项的详细信息,请参见本手册中的其他节。
# /usr/sbin/ldapclient init -a profilename=gssapi_SPARKS.COM -a \ domainname=example.com 9.9.9.50
运行 kinit -p user。
在用户登录会话中运行 ldaplist -l passwd user,然后您将看见 "userpassword"。
但是 ldaplist -l passwd bar 可以在不返回 userpassword 的同时获取项。缺省情况下,超级用户仍会看到每个人的 userpassword。
如果 syslog 包含以下消息:libsldap: Status: 7 Mesg: openConnection: GSSAPI bind failed - 82 Local error,则标识 Kerberos 可能未初始化,或者其票证已过期。运行 klist 进行浏览。运行 kinit -p foo 或 kinit -R -p foo 并重试。
如果需要,可以将 pam_krb5.so.1 添加到 /etc/pam.conf 中,这样在您登录时,它会自动执行 kinit。
例如:
login auth optional pam_krb5.so.1 rlogin auth optional pam_krb5.so.1 other auth optional pam_krb5.so.1
如果用户已执行 kinit 且 syslog 消息指示 Invalid credential,则问题可能是主机项 (root) 或用户项不在 LDAP 目录中,或者映射规则不正确。
执行 ldapclient init 时,如果 LDAP 配置文件包含 self/sasl/GSSAPI 配置,则会执行一些检查。如果在进行 /etc/nsswitch.ldap 检查时失败,通常的原因是 DNS 未添加到 host: 和 ipnodes:。
如果是因为 DNS 客户机未启用而失败,请运行 svcs -l dns/client 查看 /etc/resolv.conf 是缺失还是仅仅处于禁用状态。运行 svcadm enable dns/client 可以将其启用。
如果检查是由于 sasl/GSSAPI 绑定而失败,请检查 syslog 查找失败原因。
有关详细信息,请参见本指南和《系统管理指南:安全性服务》中的其他参考。
注 - 请勿直接编辑任何客户机配置文件。请使用 ldapclient 创建或修改这些文件的内容。
角色包含授权和具有一定特权的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的第 9 章 "使用基于角色的访问控制(任务)"。
# 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 中。
自 Solaris 10 10/09 发行版开始,提供了 enableShadowUpdate 开关。
角色包含授权和具有一定特权的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的第 9 章 "使用基于角色的访问控制(任务)"。
# ldapclient mod -a enableShadowUpdate=TRUE \ -a adminDN=cn=admin,ou=profile,dc=west,dc=example,dc=com \ -a adminPassword=admin-password System successfully configured
# ldapclient init \ -a adminDN=cn=admin,ou=profile,dc=west,dc=example,dc=com \ -a adminPassword=admin-password -a domainName=west.example.com \ -a profileName=WestUserProfile \ -a proxyDN=cn=proxyagent,ou=profile,dc=west,dc=example,dc=com \ -a proxyPassword=i<proxy_password> \ 192.168.0.1 System successfully configured
输出中应包含与下面类似的行:
# cat /var/ldap/ldap_client_cred NS_LDAP_BINDDN= cn=proxyagent,ou=profile,dc=west,dc=example,dc=com NS_LDAP_BINDPASSWD= {NS1}4a3788f8eb85de11 NS_LDAP_ENABLE_SHADOW_UPDATE= TRUE NS_LDAP_ADMIN_BINDDN= cn=admin,ou=profile,dc=west,dc=example,dc=com NS_LDAP_ADMIN_BINDPASSWD= {NS1}4a3788f8c053434f
超级用户或承担等效角色的管理员可以手动配置客户机。但是在手动配置期间,会跳过许多检查,因此系统配置相对容易出错。此外,您必须更改每台计算机上的设置,而不像使用配置文件时那样,只需在一个集中位置进行更改即可。
角色包含授权和具有一定特权的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的第 9 章 "使用基于角色的访问控制(任务)"。
# 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
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
角色包含授权和具有一定特权的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的第 9 章 "使用基于角色的访问控制(任务)"。
# ldapclient mod -a authenticationMethod=simple
# 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
故障排除
您不能使用 mod 子命令更改 LDAP 客户机配置的某些属性。例如,您不能更改 profileName 和 profileTTL 属性。要更改这些属性,请使用 ldapclient init 命令创建一个新的配置文件,如使用配置文件初始化客户机中所述,或者运行 ldapclient manual 命令,如手动初始化客户机中所述。
ldapclient uninit 可将客户机名称服务恢复到它在最近的 init、modify 或 manual 操作之前的状态。换言之,该命令可对采取的上一个步骤执行“撤消”操作。例如,如果客户机被配置为使用 profile1,然后更改为使用 profile2,则使用 ldapclient uninit 将使客户机恢复使用 profile1。
角色包含授权和具有一定特权的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的第 9 章 "使用基于角色的访问控制(任务)"。
# 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 Communicator 设置所需的 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 在 $HOME/.mozilla 下的一个子目录中管理其 cert8.db、key3.db 和 secmod.db 文件。如果要将这些安全数据库用于 LDAP 命名服务客户机,必须将其副本存储在本地文件系统中。
pam_ldap 是一个用于 LDAP 身份验证和帐户管理的 PAM 模块。请参见 pam_ldap(5) 手册页和附录 A,获取更多有关 pam_ldap 当前支持的功能的信息。
如果同时选中每用户模式和 self 凭证选项,您还必须启用 PAM Kerberos pam_krb5(5) pam 模块。有关详细信息,请参见 pam_krb5(5) 和《系统管理指南:安全性服务》文档。
要配置 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 等工具进行的不基于口令的登录将会失败。
但是现在,pam_ldap(5) 与 Sun Java System Directory Servers DS5.2p4 及更高发行版配合使用时,用户可以使用 rsh、rlogin、rcp 和 ssh 登录,而不需要提供口令。
pam_ldap(5) 现已修改为执行帐户管理和检索用户帐户状态,而不需要用户在登录时向目录服务器进行身份验证。目录服务器上对这一操作的新的控制为 1.3.6.1.4.1.42.2.27.9.5.8,它在缺省情况下是启用的。
要将此控制从缺省状态修改为其他状态,请在目录服务器上添加访问控制指令 (Access Control Instructions, ACI):
dn: oid=1.3.6.1.4.1.42.2.27.9.5.8,cn=features,cn=config objectClass: top objectClass: directoryServerFeature oid:1.3.6.1.4.1.42.2.27.9.5.8 cn:Password Policy Account Usable Request Control aci: (targetattr != "aci")(version 3.0; acl "Account Usable"; allow (read, search, compare, proxy) (groupdn = "ldap:///cn=Administrators,cn=config");) creatorsName: cn=server,cn=plugins,cn=config modifiersName: cn=server,cn=plugins,cn=config
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)。