跳过导航链接 | |
退出打印视图 | |
在 Oracle Solaris 11.1 中使用命名和目录服务 Oracle Solaris 11.1 Information Library (简体中文) |
4. 设置 Oracle Solaris Active Directory 客户机(任务)
11. 为使用 LDAP 客户机设置 Oracle Directory Server Enterprise Edition(任务)
ldapclient 命令用于在 Oracle Solaris 系统上设置 LDAP 客户机。该命令假定已经为服务器配置了合适的客户机配置文件。您必须先安装服务器并用适当的配置文件对其进行配置,然后才能设置客户机。
注 - 因为 LDAP 和 NIS 使用在 network/nis/domain 服务中定义的同一域名组成部分,所以 Oracle Solaris OS 不支持 NIS 客户机和本机 LDAP 客户机共存于同一客户机系统上的配置。
使用 ldapclient 设置客户机主要有两种方法。
配置文件
您至少需要指定包含配置文件以及要使用的域的服务器地址。如果未指定配置文件,则会使用“缺省”的配置文件。服务器将提供其余的必需信息,但代理和证书数据库信息除外。如果客户机的凭证级别为 proxy 或 proxy anonymous,则必须提供代理的绑定 DN 和口令。有关更多信息,请参见指定客户机凭证级别。
要启用影子数据更新,您必须提供管理凭证(adminDN 与 adminPassword)。
手动
在客户机上配置配置文件,这意味着要从命令行定义所有参数。这样,配置文件信息将存储在高速缓存文件中,服务器永远不会刷新这些信息。
注 - 在企业环境中,使用 LDAP 配置文件可以降低复杂性(如果该配置文件是在各台计算机之间共享的)。
# ldapclient init -a profileName=new \ -a domainName=west.example.com 192.168.0.1 System successfully configured
开始之前
使用每用户凭证设置 LDAP 客户机之前,必须已经配置以下各项:
必须已配置了一台或多台 Kerberos 密钥分发中心 (key distribution center, KDC) 服务器且这台(些)服务器正在运行。
必须已配置了 DNS、对 DNS 服务器的客户机访问以及至少一台 DNS 服务器,且它们正在运行。
客户机上的 Kerberos 必须已配置且已启用。
必须存在一个类似于以下内容的 Kerberos 客户机安装配置文件:
# cat /usr/tmp/krb5.profile REALM EXAMPLE.COM KDC kdc.example.com ADMIN super/admin FILEPATH /usr/tmp/krb5.conf NFS 1 DNSLOOKUP none
必须安装并配置 LDAP 服务器来支持 sasl/GSSAPI。
必须存在适当的标识映射配置。
必须在 KDC 中设置了目录服务器和 KDC 的 Kerberos 主机主体。
必须已对要使用的目录服务器 DIT 运行 idsconfig 命令。
必须已创建适当的每用户 gssapi 配置文件(如 gssapi_EXAMPLE.COM)。
idsconfig 命令中的每用户配置文件的说明如下面的部分示例所示:
# /usr/lib/ldap/idsconfig Do you wish to continue with server setup (y/n/h)? [n] y Enter the Directory Server's hostname to setup: kdc.example.com Enter the port number for DSEE (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.COM
注 - 此外,对于 gssapi 配置文件,您必须提供 4 self 凭证级别和 6 sasl/GSSAPI 验证方法。
KDC 中必须存在所需的用户主体。
在客户机上,必须使用含有诸如以下命令的客户机配置文件初始化 Kerberos:
# /usr/sbin/kclient -p /usr/tmp/krb5.profile
必须对名称服务转换进行配置以便为 hosts 使用 dns。以下命令检查当前的系统信息库值:
% svcprop -p config/host system/name-service/switch files\ dns\ nis
必须已配置 DNS 且 DNS 服务必须正在运行。有关详细信息,请参见本文档中有关 DNS 的章节。
目录服务器 DIT 必须至少预装入此客户机的用户、客户机主机和必要的 auto_home LDAP 项。有关如何使用 ldapaddent 命令添加项的详细信息,请参见本手册的其他各节。
注 - 不要直接编辑任何一个客户机配置文件。请使用 ldapclient 命令创建或修改这些文件的内容。
# /usr/sbin/ldapclient init -a profilename=gssapi_EXAMPLE.COM -a \ domainname=example.com 9.9.9.50
如果 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 配置。如果它在转换检查中失败,则常见的原因是 DNS 不是主机数据库的搜索条件。
如果检查因为 DNS 客户机 id 未启用而失败,请运行 svcs -l dns/client 来确定服务是否被禁用。运行 svcadm enable dns/client 来启用服务。
如果检查因为某个 sasl/GSSAPI 绑定而失败,请检查 syslog 来确定问题。
有关详细信息,请参见本指南和《Oracle Solaris 11.1 管理:安全服务》中的其他参考。
注 - 请勿直接编辑任何客户机配置文件。请使用 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 是必需的。由于凭据并不是存储在服务器上保存的配置文件中,因此您必须在初始化客户机时提供该信息。与原先在服务器上存储代理凭证的方法相比,这种方法更安全。
代理信息存储在 config 和 cred 属性组中的 svc:/network/ldap/client 服务中。
# 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=<proxy_password> \ 192.168.0.1 System successfully configured
输出内容类似如下:
# svcprop -p cred svc:/network/ldap/client cred/read_authorization astring solaris.smf.value.name-service.ldap.client cred/value_authorization astring solaris.smf.value.name-service.ldap.client cred/bind_dn astring cn=proxyagent,ou=profile,dc=west,dc=example,dc=com cred/bind_passwd astring {NS1}4a3788f8eb85de11 cred/enable_shadow_update boolean true cred/admin_bind_dn astring cn=admin,ou=profile,dc=west,dc=example,dc=com cred/admin_bind_passwd astring {NS1}4a3788f8c053434f
Root 用户或具有等效角色的管理员可以执行手动 LDAP 客户机配置。但是在手动配置期间,会跳过许多检查,因此系统配置相对容易出错。此外,您必须更改每台计算机上的设置,而不像使用配置文件时那样,只需在一个集中位置进行更改即可。
# 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
# 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 命令创建一个新的配置文件,如如何使用配置文件初始化 LDAP 客户机中所述。或者运行 ldapclient manual 命令,如如何手动初始化 LDAP 客户机中所述。
ldapclient uninit 命令可将客户机名称服务恢复到它在最近一次 init、modify 或 manual 操作之前的状态。换言之,该命令可对所采取的上一个步骤执行“撤消”操作。例如,如果客户机被配置为使用 profile1,然后更改为使用 profile2,则使用 ldapclient uninit 将使客户机恢复使用 profile1。
注 - 安全数据库文件必须可供任何人读取。请勿在 key3.db 文件中包含任何私钥。
如果使用传输层安全 (transport layer security, TLS),则必须安装必要的安全数据库。尤其要指出的是,证书和密钥数据库文件是必需的。例如,如果您使用来自 Mozilla Firefox 的较新的数据库格式,则 cert8.db、key3.db 和 secmod.db 这三个文件是必需的。cert8.db 文件包含受信任的证书。key3.db 文件中包含客户机的密钥。即使 LDAP 命名服务客户机不使用客户机密钥,此文件也必须存在。secmod.db 文件中包含安全模块,如 PKCS#11 模块。如果使用的是旧格式,则不需要此文件。
注 - 在运行 ldapclient 之前,应设置并安装本节中介绍的必需的安全数据库文件。
请参见您所使用的 Oracle Directory Server Enterprise Edition 版本的管理员指南中 "Managing SSL"(管理 SSL)一章中有关配置 LDAP 客户机以使用 SSL 的一节,了解如何创建和管理这些文件的信息。配置后,这些文件必须存储在 LDAP 命名服务客户机希望的位置。属性 certificatePath 用于确定此位置。缺省值为 /var/ldap。
例如,通过使用 Mozilla Firefox 设置所需的 cert8.db、key3.db 和 secmod.db 文件后,请按如下方式将文件复制到缺省位置:
# cp $HOME/.mozilla/firefox/*.default/cert8.db /var/ldap # cp $HOME/.mozilla/firefox/*.default/key3.db /var/ldap # cp $HOME/.mozilla/firefox/*.default/secmod.db /var/ldap
然后,向所有人授予读取访问权限。
# chmod 444 /var/ldap/cert8.db # chmod 444 /var/ldap/key3.db # chmod 444 /var/ldap/secmod.db
注 - Mozilla Firefox 在 $HOME/.mozilla 下的子目录中管理其 cert8.db、key3.db 和 secmod.db 文件。如果要将这些安全数据库用于 LDAP 命名服务客户机,必须将其副本存储在本地文件系统中。
pam_ldap 模块是用于 LDAP 的一个验证和客户管理 PAM 模块选件。有关 pam_ldap 当前支持的功能的更多信息,请参见 pam_ldap(5) 手册页。
如果同时选择了每用户模式和 self 凭证选项,则还必须启用 PAM Kerberos pam_krb5 模块。有关更多详细信息,请参见 pam_krb5(5) 手册页和《Oracle Solaris 11.1 管理:安全服务》文档。
要将 PAM 配置为使用 UNIX policy,请使用缺省的 /etc/pam.conf 文件。不需要进行更改。有关详细信息,请参见 pam.conf(4) 手册页。
不过,如果由 shadow 数据控制的口令生命期和口令策略是必需的,则必须将客户机配置为在带有 enableShadowUpdate 开关的情况下运行。有关更多信息,请参见如何初始化 LDAP 客户机以启用影子数据更新。
要配置 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 帐户管理,所有用户在每次登录系统时都必须提供登录口令以进行验证。因此,使用 ssh 等工具的非基于口令的登录将失败。
在用户登录时,在不向目录服务器进行验证的情况下执行帐户管理并检索用户的帐户状态。目录服务器上的新控件是 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)。