JavaScript is required to for searching.
跳过导航链接
退出打印视图
系统管理指南:命名和目录服务(DNS、NIS 和 LDAP)     Oracle Solaris 10 8/11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分关于命名和目录服务

1.  命名和目录服务(概述)

2.  名称服务转换器(概述)

第 2 部分DNS 设置和管理

3.  DNS 设置和管理(参考)

第 3 部分NIS 设置和管理

4.  网络信息服务 (Network Information Service, NIS)(概述)

5.  设置和配置 NIS 服务

6.  管理 NIS(任务)

7.  NIS 疑难解答

第 4 部分LDAP 命名服务的设置和管理

8.  LDAP 命名服务介绍(概述/参考)

9.  LDAP 基本组件和概念(概述)

LDAP 数据交换格式 (LDAP Data Interchange Format, LDIF)

随 LDAP 使用全限定域名

缺省目录信息树 (Directory Information Tree, DIT)

缺省的 LDAP 架构

服务搜索描述符 (Service Search Descriptor, SSD) 和架构映射

SSD 说明

属性映射

objectClass 映射

LDAP 客户机配置文件

客户机的配置文件属性

本地客户机属性

ldap_cachemgr 守护进程

LDAP 命名服务安全模型

介绍

传输层安全性 (Transport Layer Security, TLS)

指定客户机凭证级别

enableShadowUpdate 开关

凭证存储

选择验证方法

验证和服务

可插拔验证方法

pam_unix 服务模块

pam_krb5 服务模块

pam_ldap 服务模块

PAM 和更改口令

帐户管理

使用 pam_unix 管理帐户

10.  LDAP 命名服务的规划要求(任务)

11.  为使用 LDAP 客户机设置 Sun Java System Directory Server(任务)

12.  设置 LDAP 客户机(任务)

13.  LDAP 疑难解答(参考)

14.  LDAP 一般参考(参考)

15.  从 NIS 转换为 LDAP(概述/任务)

16.  从 NIS+ 转换为 LDAP

A.  Solaris 10 软件中对 DNS、NIS 和 LDAP 的更新

服务管理工具的更改

DNS BIND

pam_ldap 更改

文档错误

词汇表

索引

LDAP 命名服务安全模型

介绍

Solaris LDAP 命名服务能够以两种不同的方式使用 LDAP 系统信息库。一种是同时用作命名服务和验证服务的源。另一种是严格用作命名数据的源。本节讨论了客户机标识、验证方法、pam_ldappam_unix 模块的概念,以及将 LDAP 系统信息库同时用作命名服务和验证服务时如何管理帐户。本节还讨论了 LDAP 命名服务如何与 Kerberos 环境(《系统管理指南:安全性服务》中的第 VI 部分, "Kerberos 服务"中的第 VI 部分"Kerberos Service")以及 pam_krb5(5) 模块配合使用。


注 - 以前,如果启用了 pam_ldap 帐户管理,所有用户在每次登录系统时都必须提供登录口令以进行验证。因此,使用 rshrloginssh 等工具进行的不基于口令的登录将会失败。

但是现在,pam_ldap(5) 与 Sun Java System Directory Servers DS5.2p4 及更高发行版配合使用时,用户可以使用 rshrloginrcpssh 登录,而不需要提供口令。

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


注 - 如果您使用 Kerberos 作为验证系统并将其与 LDAP 命名系统相集成,则您将能够在您的企业中通过 Kerberos 支持单点登录 (single sign on, SSO)。您还能够在按每用户或每主机查询 LDAP 命名数据时使用同一标识系统。


要访问 LDAP 系统信息库中的信息,客户机可以先通过目录服务器建立标识。此标识可以是匿名的,也可以是 LDAP 服务器能够识别的对象。基于客户机的标识和服务器的访问控制信息 (access control information, ACI),LDAP 服务器将允许客户机读写目录信息。有关 ACI 的更多信息,请查阅所用的 Sun Java System Directory Server 版本的管理指南

如果客户机对于任何给定的请求以非匿名方式进行连接,则必须使用自己和服务器均支持的验证方法向服务器证明自己的身份。在确认了自己的身份之后,客户机即可发出各种 LDAP 请求。

使用 pam_ldap 时,命名服务访问目录的方式与验证服务 (pam_ldap) 访问目录的方式有所不同。命名服务基于预定义的标识从目录中读取各个条目及其属性。验证服务使用用户名和口令向 LDAP 服务器验证用户身份,以确认用户是否输入了正确的口令。有关验证服务的更多信息,请参见 pam_ldap(5) 手册页。

当使用 Kerberos 执行验证并且在 LDAP 命名服务中也启用了验证(这是“每用户”模式所必需的)时,Kerberos 可以提供双重功能。Kerberos 向服务器验证身份,主体(用户或主机)的 Kerberos 标识用于向目录验证身份。这样,用于向系统验证身份的用户标识同样也将用于向目录验证身份,以执行查找或更新,如果需要,管理员可以在目录中使用访问控制信息 (Access Control Information, ACI) 来限制命名服务返回的结果。

传输层安全性 (Transport Layer Security, TLS)


注 - 要为 Solaris LDAP 命名服务使用 TLS,目录服务器必须分别为 LDAP 和 SSL 使用缺省端口 389 和 636。如果您的目录服务器未使用这些端口,则目前尚无法使用 TLS。


TLS 可以用来保护 LDAP 客户机与目录服务器之间的通信安全,既确保保密性又确保数据完整性。TLS 协议是安全套接字层 (Secure Sockets Layer, SSL) 协议的一个超集。Solaris LDAP 命名服务支持 TLS 连接。请注意,使用 SSL 会增加目录服务器和客户机的负荷。

您需要为 SSL 设置目录服务器。有关为 SSL 设置 Sun Java System Directory Server 的更多信息,请参阅您使用的 Sun Java System Directory Server 版本的管理指南。您还需要为 SSL 设置 LDAP 客户机。

如果使用 TLS,必须安装必要的安全数据库。特别的是,需要证书和密钥数据库文件。例如,如果采用 Netscape Communicator 的旧数据库格式,则需要 cert7.dbkey3.db 这两个文件。或者,如果使用 Mozilla 提供的较新数据库格式,则需要 cert8.dbkey3.dbsecmod.db 这三个文件。cert7.dbcert8.db 文件中包含可信证书。key3.db 文件中包含客户机的密钥。即使 LDAP 命名服务客户机不使用客户机密钥,此文件也必须存在。secmod.db 文件中包含安全模块,如 PKCS#11 模块。如果使用的是旧格式,则不需要此文件。

有关更多信息,请参见设置 TLS 安全性

指定客户机凭证级别

LDAP 命名服务客户机根据客户机的凭证级别向 LDAP 服务器验证身份。可以为 LDAP 客户机指定的凭证级别有四个,客户机将使用它们向目录服务器验证身份。

Anonymous

如果使用 anonymous 访问,则只能访问所有人都能使用的数据。在 anonymous 模式中,不能执行 LDAP BIND 操作。此外,还应考虑安全问题。允许对目录的某些部分进行 anonymous 访问,意味着任何具有该目录访问权限的人都有读取访问权限。如果使用 anonymous 凭证级别,您需要允许对所有 LDAP 命名条目和属性进行读取访问。


注意

注意 - 绝对不要允许对目录进行 anonymous 写入,因为任何人都可以对其具有写入访问权限的 DIT 中更改信息,包括其他用户的口令或他们自己的身份。



注 - Sun Java System Directory Server 允许您基于 IP 地址、DNS 名称、验证方法和一天中的时段对访问进行限制。您可能希望通过进一步的约束来限制访问。有关更多信息,请参见您使用的 Sun Java System Directory Server 版本的管理指南中的“管理访问控制”。


Proxy

客户机使用单个代理帐户绑定到目录或向目录验证身份。此代理帐户可以是任何允许绑定到目录的条目。此代理帐户需要有足够的权限才能在 LDAP 服务器上执行命名服务功能。此代理帐户是一个按系统共享的资源。也就是说,每个使用代理访问权限登录到某个系统的用户(包括超级用户)与该系统上的所有其他用户看到的结果相同。您需要在使用 proxy 凭证级别的每台客户机上配置 proxyDNproxyPassword。经过加密的 proxyPassword 存储在客户机本地。您可以为不同的客户机组设置不同的代理。例如,您可以为所有销售客户机配置一个代理来访问整个公司都可访问的目录以及销售目录,同时阻止销售客户机访问包含工资信息的人力资源目录。或者,在最极端的情况中,您可以为每个客户机指定不同的代理,或者为所有客户机仅指定一个代理。典型的 LDAP 部署应当介于这两种极端情况之间。请仔细考虑您的选择。代理太少可能会限制您对用户访问资源进行控制的能力。但是,代理太多,又会增加系统设置和维护的难度。您需要根据自己的环境向代理用户授予合适的权限。有关如何确定哪种验证方法最适合您的配置的信息,请参见凭证存储

如果某个代理用户的口令发生了更改,您需要在使用该代理用户的每台客户机上更新该口令。如果您为 LDAP 帐户使用口令生命期功能,请确保为代理用户关闭此功能。


注 - 请注意,proxy 凭证级别应用于任意给定系统上的所有用户和进程。如果两个用户需要使用不同的命名策略,他们必须使用不同的计算机,或者必须使用“每用户”验证模式。


另外,如果客户机使用 proxy 凭证进行验证,则 proxyDN 在所有服务器上都必须具有相同的 proxyPassword

Proxy anonymous

proxy anonymous 是一个多值条目,它定义了多个凭证级别。指定了 proxy anonymous 级别的客户机将首先尝试使用其代理标识进行验证。如果客户机由于某种原因(例如,用户锁定、口令失效)而无法作为代理用户进行验证,客户机将使用匿名访问。这可能会导致服务的级别有所不同,具体取决于目录的配置方式。

每用户

“每用户”(self) 验证方式在向目录服务器验证身份时使用 Kerberos 标识(主体)来针对每个用户或每个系统执行查找。使用“每用户”验证,系统管理员可以使用访问控制指令 (access control instruction, ACI)、访问控制列表 (access control list, ACL)、角色、组或其他目录访问控制机制来向特定用户或系统授予或拒绝对特定命名服务数据的访问权限。


注 - 在配置“每用户”模式时,用于启用该模式的配置值是“self”,它表示“每用户”模式。


要使用“每用户”验证模型,必须部署 Kerberos 单点登录服务。此外,部署中使用的一个或多个目录服务器必须支持 SASL 和 SASL/GSSAPI 验证机制。因为 Kerberos 预期使用文件和 DNS(而非 LDAP)进行主机名查找,因此应当在该环境中部署 DNS。另外,要使用“每用户”验证,还必须启用 nscd。在该配置中,nscd 守护进程不是可选组件。

enableShadowUpdate 开关

从 Solaris 10 10/09 发行版开始,如果在客户机上 enableShadowUpdate 开关设置为 true,则使用管理凭证来更新阴影数据。阴影数据存储在目录服务器上的 shadowAccount 对象类中。管理凭证由 adminDNadminPassword 属性的值定义,如本地客户机属性中所述。这些管理凭证不用于任何其他用途。

管理凭证具有与 Proxy 凭证类似的属性。不同之处在于,对于管理凭证,用户必须具有区域的所有特权或者有效的 root UID,才能读取或更新阴影数据。管理凭证可以指定给任何允许绑定到目录的条目。不过,不要使用 LDAP 服务器的同一目录管理器标识 (cn=Directory Manager)。

具有管理凭证的该条目必须具有足够的访问权限才能读取和写入目录中的阴影数据。因为该条目是按系统共享的资源,因此必须在每个客户机上配置 adminDNadminPassword 属性。经过加密的 adminPassword 存储在客户机本地。口令使用为客户机配置的相同验证方法。给定系统上的所有用户和进程使用管理凭证读取和更新阴影数据。

凭证存储

如果将客户机配置为使用代理标识,则客户机将其 proxyDNproxyPassword 存储在 /var/ldap/ldap_client_cred 中。为了增强安全性,该文件仅限超级用户访问,并且 proxyPassword 的值也经过了加密。尽管以前的 LDAP 实现已将代理凭证存储在客户机的配置文件中,但是 Solaris 9 LDAP 命名服务却不是这样。初始化过程中使用 ldapclient 设置的所有代理凭证都存储在本地。这样便提高了代理的 DN 和口令信息的安全性。有关设置客户机配置文件的更多信息,请参见第 12 章

类似地,如果您将客户机配置为启用阴影数据更新,且客户机凭证级别不是 self,则客户机将其 adminDNadminPassword 属性保存在本地的 /var/ldap/ldap_client_cred 文件中。adminPassword 的值也是加密的,且只能由 ldap_cachemgr 守护进程使用。

如果您将客户机配置为使用“每用户”验证,则在验证期间将使用每个主体(每个用户或主机)的 Kerberos 标识和 Kerberos 票证信息。在这样的环境中,目录服务器将 Kerberos 主体映射到一个 DN,并使用 Kerberos 凭证向该 DN 验证身份。然后,目录服务器根据需要使用其访问控制指令 (access control instruction, ACI) 机制来允许或拒绝对命名服务数据的访问。在这种情况下,Kerberos 票证信息用于向目录服务器验证身份,系统不会存储用于验证 DN 或口令。因此,对于这种类型的配置来说,在使用 ldapclient 命令初始化客户机时,不需要指定 adminDNadminPassword 属性。

选择验证方法

为客户机指定 proxyproxy-anonymous 凭证级别时,还需要选择代理向目录服务器验证身份所使用的方法。缺省情况下,验证方法是 none,它表示匿名访问。验证方法还可以有与之关联的传输安全选项。

与凭证级别一样,验证方法可以是多值的。例如,在客户机配置文件中,您可以指定客户机首先尝试使用由 TLS 保护的 simple 方法进行绑定。如果失败,客户机将尝试使用 sasl/digest-MD5 方法进行绑定。这样,authenticationMethod 将为 tls:simple;sasl/digest-MD5

LDAP 命名服务支持某些简单身份验证和安全层 (Simple Authentication and Security Layer, SASL) 机制。这些机制无需 TLS 便可安全地交换口令。但是,这些机制不提供数据完整性和保密性。有关 SASL 的信息,请参见 RFC 2222。

支持的验证机制如下所示:


注意

注意 - Sun Java System Directory Server 要求口令以明文形式存储才能使用 digest-MD5。如果验证方法设置为 sasl/digest-MD5tls:sasl/digest-MD5,则代理用户的口令需要以明文形式存储。要特别注意的是,如果 userPassword 属性以明文形式存储,它应具有正确的 ACI,以便它将是不可读的。


下表概述了各种验证方法及其各自的特征。

表 9-4 验证方法

绑定
线路上的口令
Sun Java System Directory Server 上的口令
会话
none
N/A
N/A
不加密
simple
明文
任意
不加密
sasl/digest-MD5
加密
明文
不加密
sasl/cram-MD5
加密
N/A
不加密
sasl/GSSAPI
Kerberos
Kerberos
加密
tls:simple
加密
任意
加密
tls:sasl/cram-MD5
加密
N/A
加密
tls:sasl/digest-MD5
加密
明文
加密

验证和服务

可以在 serviceAuthenticationMethod 属性中为给定的服务指定验证方法。目前下列服务支持此功能:


注 - 如果该服务未设置 serviceAuthenticationMethod,则缺省情况下将使用 authenticationMethod 属性的值。



注 - 在“每用户”模式中,pam_krb5 服务模块 (pam Kerberos) 用作验证服务。在此操作模式中,ServiceAuthenticationMethod 不是必需的。



注 - 如果 enableShadowUpdate 开关设置为 trueldap_cachemgr 守护进程将使用 passwd-cmdserviceAuthenticationMethod 参数中定义的验证方法(如果定义了该方法的话)绑定到 LDAP 服务器。否则,将使用 authenticationMethod。守护进程不会使用 none 验证方法。


下面的示例显示了某个客户机配置文件的一部分,其中,用户将使用 sasl/digest-MD5 来向目录服务器验证身份,但将使用 SSL 会话更改其口令。

serviceAuthenticationMethod=pam_ldap:sasl/digest-MD5
serviceAuthenticationMethod=passwd-cmd:tls:simple

可插拔验证方法

通过使用 PAM 框架,您可以在几种验证服务之间进行选择,包括 pam_unixpam_krb5pam_ldap

如果使用“每用户”验证方法,则必须启用上面列出的三种方法中最强的验证服务 pam_krb5。请参见 pam_krb5(5)《系统管理指南:安全性服务》

即使未启用“每用户”验证,也可以使用 pam_krb5 验证系统。如果使用 proxy 或 anonymous 凭证级别来访问目录服务器数据,则无法基于每个用户限制对目录数据的访问。

当使用 anonymous 或 proxy 验证方法时,建议优先使用 pam_ldap 而非 pam_unix,因为前者的灵活性更强、支持更强大的验证方法并且能够使用帐户管理。

pam_unix 服务模块

如果您未更改过 pam.conf(4) 文件,则缺省情况下会启动 pam_unix 功能。


注 - pam_unix 模块已被删除,Solaris 将不再支持该模块。但是,Solaris 提供了一组其他服务模块,这些模块将提供等效或更强的功能。因此,在本指南中,pam_unix 是指等效的功能,而并非指 pam_unix 模块本身。


下面列出了提供等效 pam_unix 功能的模块:

pam_unix 遵循传统的 UNIX 验证模型,如下所述。

  1. 客户机从名称服务检索用户的加密口令。

  2. 系统提示用户输入其口令。

  3. 对用户的口令进行加密。

  4. 客户机比较这两个经过加密的口令,确定用户是否应通过验证。

另外,使用 pam_unix 时还存在以下两个限制:


注 - pam_unixsasl 验证方法 digest-MD5 不兼容,因为 Sun Java System Directory Server 要求口令必须以明文形式存储才能使用 digest-MD5。pam_unix 则要求口令以 crypt 格式存储。



注 - 从 Solaris 10 10/09 发行版开始,当 enableShadowUpdate 开关设置为 true 时,pam_unix 可以支持帐户管理。对远程 LDAP 用户帐户实施控制的方式与对 passwdshadow 文件中定义的本地用户帐户实施控制的方式是相同的。在 enableShadowUpdate 模式中,对于 LDAP 帐户,系统将更新并使用 LDAP 服务器上的阴影数据执行口令生命期和帐户锁定功能。当然,本地帐户的阴影数据仅应用于本地客户机系统,而 LDAP 用户帐户的阴影数据将应用于所有客户机系统上的用户。

只有本地客户机支持口令历史记录检查,LDAP 用户帐户不支持此功能。


pam_krb5 服务模块

请参阅 pam_krb5(5)《系统管理指南:安全性服务》

pam_ldap 服务模块

实现 pam_ldap 时,用户使用 pam_ldapserviceAuthenticationMethod 参数(如果存在的话)中定义的验证方法绑定到 LDAP 服务器。如果不存在,将使用 authenticationMethod

如果 pam_ldap 能够使用用户的身份和提供的口令绑定到服务器,它将验证用户的身份。


注 - 以前,如果启用了 pam_ldap 帐户管理,所有用户在每次登录系统时都必须提供登录口令以进行验证。因此,使用 rshrloginssh 等工具进行的不基于口令的登录将会失败。

但是现在,pam_ldap(5) 与 Sun Java System Directory Servers DS5.2p4 及更高发行版配合使用时,用户可以使用 rshrloginrcpssh 登录,而不需要提供口令。

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

pam_ldap 不读取 userPassword 属性。因此,除非有其他客户机正在使用 pam_unix,否则无需授予对 userPassword 属性的读取访问权限。此外,pam_ldap 不支持 none 验证方法。因此,您必须定义 serviceAuthenticationMethodauthenticationMethod 属性,以便客户机可以使用 pam_ldap。有关更多信息,请参见 pam_ldap(5) 手册页。


注意

注意 - 如果使用 simple 验证方法,userPassword 属性在传输过程中可能会被第三方读取。


请参见pam_ldap 的示例 pam.conf 文件

下表汇总了 pam_unixpam_ldappam_krb5 之间的主要区别。

表 9-5 使用 pam_unixpam_ldappam_krb5 时 LDAP 中的验证行为

pam_unix
pam_ldap
pam_krb5
发送的口令
使用 passwd 服务验证方法
使用 passwd 服务验证方法
使用 Kerberos 单点登录技术,不需要口令
发送的新口令
加密
不加密(除非使用了 TLS)
使用 Kerberos,不通过线路发送口令
存储的新口令
crypt 格式
Sun Java System Directory Server 中定义的口令存储方案
口令由 Kerberos 管理
是否需要读取口令?
更改口令之后,是否与 sasl/digest-MD5 兼容
否。口令不以 clear 形式存储。用户无法验证身份。
是。只要将缺省的存储方案设置为 clear,用户即可验证身份。
否。使用了 sasl/GSSAPI。线路上没有口令,目录服务器中也不存储口令,除非所使用的 Kerberos kdc 在 LDAP 目录服务器中管理其口令数据库。
是否支持口令策略?
是。enableShadowUpdate 必须设置为 true
是(如果进行了这样的配置)。
请参见 pam_krb5(5),Kerberos V5 帐户管理模块。

PAM 和更改口令

使用 passwd 命令可以更改口令。如果 enableShadowUpdate 开关未设置为 true,则用户必须可以对 userPassword 属性进行写入。如果 enableShadowUpdate 开关设置为 true,则管理凭证必须能够更新 userPassword 属性。请记住,对于此操作,passwd-cmdserviceAuthenticationMethod 会覆盖 authenticationMethod。当前口令在传输过程中可能是未加密的,具体取决于所使用的验证方法。

对于 pam_unix,新的 userPassword 属性在写入到 LDAP 之前会使用 UNIX crypt 格式进行加密和标记。因此,无论使用哪种验证方法绑定到服务器,在传输过程中都会对新口令进行加密。有关更多信息,请参见 pam_authtok_store(5) 手册页。

如果 enableShadowUpdate 开关设置为 true,则当用户口令被更改时,pam_unix 还会更新相关的 shadow 信息。pam_unix 更新的本地 shadow 文件中的 shadow 字段与更改本地用户口令时 pam_unix 更新的 shadow 字段相同。

从 Solaris 10 软件发行版开始,pam_ldap 不再支持口令更新。之前建议使用的带有 server_policy 选项的 pam_authtok_store 现已取代 pam_ldap 口令更新功能。使用 pam_authtok_store 时,新口令将以明文形式发送到 LDAP 服务器。因此,为了确保保密性,请使用 TLS。如果不使用 TLS,新的 userPassword 将很容易被窥探。如果您为 Sun Java System Directory Server 设置了未标记的口令,则该软件会使用 passwordStorageScheme 属性对口令进行加密。有关 passwordStorageScheme 的更多信息,请参见所用的 Sun Java System Directory Server 版本的管理指南中有关用户帐户管理的章节。


注 - 设置 passwordStorageScheme 属性时,需要考虑以下配置问题。如果 NIS、NIS+ 或另一台使用 pam_unix 的客户机使用 LDAP 作为系统信息库,则 passwordStorageScheme 必须为 crypt。此外,如果将 pam_ldapsasl/digest-MD5 用于 Sun Java System Directory Server,则 passwordStorageScheme 必须设置为 clear(明文)。


帐户管理

如果您选择 pam_krb5 作为帐户和口令管理系统,Kerberos 环境将负责管理您所有的帐户、口令、帐户锁定和其他帐户管理详细信息。请参阅 pam_krb5(5)《系统管理指南:安全性服务》

如果您不使用 pam_krb5,则可以配置 LDAP 命名服务以利用 Sun Java System Directory Server 中提供的口令和帐户锁定策略支持。您可以配置 pam_ldap(5) 以支持用户帐户管理。与正确的 PAM 配置一起使用时,passwd(1) 可强制实施由 Sun Java System Directory Server 口令策略设置的口令语法规则。

通过 pam_ldap(5),可以支持以下帐户管理功能。这些功能取决于 Sun Java System Directory Server 的口令和帐户锁定策略配置。您可以根据需要启用任意多的功能。


注 - 上述帐户管理功能只能用于 Sun Java System Directory Server。有关在服务器上配置口令和帐户锁定策略的信息,请参见所用 Sun Java System Directory Server 版本的管理指南中的“用户帐户管理”一章。另请参见为帐户管理配置的 pam_ldap 的示例 pam_conf 文件。请勿为 proxy 帐户启用帐户管理。


在 Sun Java System Directory Server 上配置口令和帐户锁定策略之前,请确保所有主机都使用具有 pam_ldap 帐户管理功能的“最新”LDAP 客户机。

另外,确保客户机上具有已正确配置的 pam.conf(4) 文件。否则,当 proxy 或用户口令到期后,LDAP 命名服务将无法工作。


注 - 以前,如果启用了 pam_ldap 帐户管理,所有用户在每次登录系统时都必须提供登录口令以进行验证。因此,使用 rshrloginssh 等工具进行的不基于口令的登录将会失败。

但是现在,pam_ldap(5) 与 Sun Java System Directory Servers DS5.2p4 及更高发行版配合使用时,用户可以使用 rshrloginrcpssh 登录,而不需要提供口令。

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

使用 pam_unix 管理帐户

自 Solaris 10 10/09 发行版开始,提供了 enableShadowUpdate 开关。当 enableShadowUpdate 设置为 true 时,LDAP 提供与文件命名服务相同的帐户管理功能。

如果在客户机上 enableShadowUpdate 开关设置为 true,则对于本地帐户可用的帐户管理功能也可用于 LDAP 帐户。这些功能包括口令生命期、帐户到期和通知、锁定登录失败的帐户等等。另外,LDAP 中现在支持 passwd 命令的 -dluNfnwx 选项。因此,LDAP 命名服务支持文件命名服务中的 passwd 命令以及 pam_unix* 模块的完整功能。enableShadowUpdate 开关为在文件和 LDAP 作用域内定义的用户提供了一种统一管理帐户的方法。

为防止用户修改自己的帐户管理数据并借此规避口令策略,LDAP 服务器被配置为阻止用户对服务器上自己的阴影数据进行写入访问。具有管理凭证的管理员将负责为客户机系统执行阴影数据更新。不过,这种配置与 pam_ldap 模块冲突,因为该模块要求口令可由用户修改。因此,使用 pam_ldap 管理帐户与使用 pam_unix 管理帐户不兼容。


注意

注意 - 不要在同一 LDAP 命名域中同时使用 pam_ldappam_unix。所有客户机要么都使用 pam_ldap,要么都使用 pam_unix。因为存在这种限制,您可能需要专用的 LDAP 服务器。例如,某个 web 或电子邮件应用程序可能希望用户能够在 LDAP 服务器上更改自己的口令。


enableShadowUpdate 的实现还要求管理凭证(adminDN 以及 adminPassword)存储在每个客户机本地。尽管 adminPassword 已加密,并且只能由 ldap_cachemgr 守护进程从 /var/ldap/ldap_client_cred 文件中读取,但还是必须采取特殊的措施来保护管理凭证。要保护凭证,请使其不同于服务器的目录管理器 (cn=directory manager)。另一种可以使用的保护措施是,对于 passwd-cmd 服务,将 serviceAuthenticationMethod 的值配置为 tls:simple 或更高值,使 adminPassword 的值不以明文发送,从而不易被窥探。

与使用 pam_ldap 进行帐户管理不同,使用 pam_unix 进行帐户管理时不需要更改 /etc/pam.conf 文件。使用缺省的 /etc/pam.conf 文件足以满足要求。