跳过导航链接 | |
退出打印视图 | |
![]() |
在 Oracle Solaris 11.1 中使用命名和目录服务 Oracle Solaris 11.1 Information Library (简体中文) |
4. 设置 Oracle Solaris Active Directory 客户机(任务)
11. 为使用 LDAP 客户机设置 Oracle Directory Server Enterprise Edition(任务)
LDAP 命名服务能够以两种不同的方式使用 LDAP 系统信息库。一种是同时用作命名服务和验证服务的源。另一种是严格用作命名数据的源。本节讨论了当 LDAP 系统信息库同时用作命名服务和验证服务时客户机标识、验证方法、pam_ldap 和 pam_unix_* 模块以及帐户管理的概念。本节还讨论了 LDAP 命名服务如何与 Kerberos 环境(《Oracle Solaris 11.1 管理:安全服务》中的第 VI 部分, "Kerberos 服务")和 pam_krb5(5) 模块配合使用。
注 - 以前,如果启用了 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
注 - 如果您使用 Kerberos 作为验证系统并将其与 LDAP 命名系统相集成,则您将能够在您的企业中通过 Kerberos 支持单点登录 (single sign on, SSO)。您还能够在按每用户或每主机查询 LDAP 命名数据时使用同一标识系统。
要访问 LDAP 系统信息库中的信息,客户机将首先向目录服务器证明自己的标识。该标识可以是匿名的,或者是 LDAP 服务器可以识别的主机或用户。LDAP 服务器将根据客户机的标识和服务器的访问控制信息 (access control information, ACI) 允许客户机读取目录信息。有关 ACI 的更多信息,请查阅所用的 Oracle Directory Server Enterprise Edition 版本的管理指南。
如果标识基于发出请求的主机,则您使用的是代理验证。一旦该主机通过验证,则该主机上的所有用户都将获得访问权限。如果标识基于用户,则您使用的是每用户验证。主机上的每个用户都必须通过验证才能获得访问权限。
如果客户机对于任何给定的请求以非匿名方式进行连接,则必须使用自己和服务器均支持的验证方法向服务器证明自己的身份。在确认了自己的身份之后,客户机即可发出各种 LDAP 请求。
当您登录到系统时,PAM 服务可以使用来自本地计算机、来自 LDAP 服务、来自 Kerberos 服务器或这三者的某种组合的信息决定登录尝试是否将成功。当使用 pam_kerb 模块时,允许访问的决定是由 Kerberos 服务器做出的。当使用 pam_ldap 模块时,一半决定必须由 LDAP 服务器做出,而另一半决定由本地主机做出。使用 pam_unix_* 模块时,信息来自本地主机,决定是在本地做出的。
使用 LDAP 服务时,当使用 pam_ldap 进行登录时,命名服务访问目录的方式与验证服务 (pam_ldap) 访问目录的方式有所不同。命名服务基于预定义的标识从目录中读取各个条目及其属性。验证服务使用用户名和口令向 LDAP 服务器验证用户身份,以确认用户是否输入了正确的口令。有关验证服务的更多信息,请参见 pam_ldap(5) 手册页。
当使用 Kerberos 执行验证并且在 LDAP 命名服务中也启用了验证(这是“每用户”模式所必需的)时,Kerberos 可以提供双重功能。Kerberos 向服务器验证身份,主体(用户或主机)的 Kerberos 标识用于向目录验证身份。这样,用于向系统验证身份的用户标识同样也将用于向目录验证身份,以执行查找或更新,如果需要,管理员可以在目录中使用访问控制信息 (Access Control Information, ACI) 来限制命名服务返回的结果。
传输层安全 (transport layer security, TLS) 可以用来保护 LDAP 客户机与目录服务器之间的通信安全,提供保密性和数据完整性。TLS 协议是安全套接字层 (Secure Sockets Layer, SSL) 协议的一个超集。LDAP 命名服务支持 TLS 连接。请注意,使用 SSL 会增加目录服务器和客户机的负荷。
您需要为 SSL 设置目录服务器。有关为 SSL 设置 Oracle Directory Server Enterprise Edition 的更多信息,请参阅您使用的 Oracle Directory Server Enterprise Edition 版本的管理指南。您还需要为 SSL 设置 LDAP 客户机。
如果使用 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 模块。如果使用的是旧格式,则不需要此文件。
有关更多信息,请参见设置 TLS 安全性。
LDAP 命名服务客户机根据客户机的凭证级别向 LDAP 服务器进行验证。可以为 LDAP 客户机指定多个用以向目录服务器进行验证的级别。
如果使用 anonymous 访问,则只能访问所有人都能使用的数据。在 anonymous 模式中,不能执行 LDAP BIND 操作。此外,还应考虑安全问题。允许对目录的某些部分进行 anonymous 访问,意味着任何具有该目录访问权限的人都有读取访问权限。如果使用 anonymous 凭证级别,您需要允许对所有 LDAP 命名条目和属性进行读取访问。
![]() | 注意 - 绝不应当允许对目录进行 anonymous 写入,因为那样任何人都可以更改 DIT 中他们对其具有写入访问权限的信息,包括其他用户的口令或他们自己的标识。 |
注 - Oracle Directory Server Enterprise Edition 允许您基于 IP 地址、DNS 名称、验证方法和一天中的时段对访问进行限制。您可能希望通过进一步的约束来限制访问。有关更多信息,请参见您使用的 Oracle Directory Server Enterprise Edition 版本的管理指南中的“管理访问控制”。
客户机验证或者绑定到一组共享的 LDAP 绑定凭证,或者称为代理帐户。此代理帐户可以是任何允许绑定到目录的条目。此代理帐户需要有足够的权限才能在 LDAP 服务器上执行命名服务功能。此代理帐户是一个按系统共享的资源。也就是说,每个使用代理访问权限登录到某个系统的用户(包括 root 用户)与该系统上的所有其他用户看到的结果相同。您需要在使用 proxy 凭证级别的每台客户机上配置 proxyDN 和 proxyPassword。经过加密的 proxyPassword 存储在客户机本地。您可以为不同的客户机组设置不同的代理。例如,您可以为所有销售客户机配置一个代理来访问整个公司都可访问的目录以及销售目录,同时阻止销售客户机访问包含工资信息的人力资源目录。或者,在最极端的情况中,您可以为每个客户机指定不同的代理,或者为所有客户机仅指定一个代理。典型的 LDAP 部署应当介于这两种极端情况之间。请仔细考虑您的选择。代理太少可能会限制您对用户访问资源进行控制的能力。但是,代理太多,又会增加系统设置和维护的难度。您需要根据自己的环境向代理用户授予合适的权限。有关如何确定哪种验证方法最适合您的配置的信息,请参见LDAP 客户机的凭证存储。
如果某个代理用户的口令发生了更改,您需要在使用该代理用户的每台客户机上更新该口令。如果您为 LDAP 帐户使用口令生命期功能,请确保为代理用户关闭此功能。
注 - 请注意,proxy 凭证级别应用于任意给定系统上的所有用户和进程。如果两个用户需要使用不同的命名策略,他们必须使用不同的计算机,或者必须使用“每用户”验证模式。
另外,如果客户机使用 proxy 凭证进行验证,则 proxyDN 在所有服务器上都必须具有相同的 proxyPassword。
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 开关设置为 true,则将使用管理凭证来更新影子数据。影子数据存储在目录服务器上的 shadowAccount 对象类中。管理凭证是由 adminDN 和 adminPassword 属性的值定义的,如本地 LDAP 客户机属性中所述。这些管理凭证不用于任何其他用途。
管理凭证具有与 Proxy 凭证类似的属性。不同之处在于,对于管理凭证,用户必须具有区域的所有特权或者有效的 root UID,才能读取或更新影子数据。管理凭证可以指定给任何允许绑定到目录的条目。不过,不要使用 LDAP 服务器的同一目录管理器标识 (cn=Directory Manager)。
具有管理凭证的该条目必须具有足够的访问权限才能读取和写入目录中的影子数据。因为该条目是按系统共享的资源,因此必须在每个客户机上配置 adminDN 和 adminPassword 属性。经过加密的 adminPassword 存储在客户机本地。口令使用为客户机配置的相同验证方法。给定系统上的所有用户和进程使用管理凭证读取和更新影子数据。
如果您将客户机配置为使用代理标识,则客户机将代理信息保存在 svc:/network/ldap/client 服务中。当前的 LDAP 实现不将代理凭证存储在客户机的配置文件中。在初始化期间通过使用 ldapclient 设置的任何代理凭证都存储在 SMF 系统信息库中。这样便提高了代理的 DN 和口令信息的安全性。有关设置客户机配置文件的更多信息,请参见第 12 章。
同样,如果您对客户机进行配置以启用影子数据更新,并且客户机凭证级别不是 self,则客户机会将其信息保存在 svc:/network/ldap/client 服务中。
如果您将客户机配置为使用“每用户”验证,则在验证期间将使用每个主体(每个用户或主机)的 Kerberos 标识和 Kerberos 票证信息。在这样的环境中,目录服务器将 Kerberos 主体映射到一个 DN,并使用 Kerberos 凭证向该 DN 验证身份。然后,目录服务器根据需要使用其访问控制指令 (access control instruction, ACI) 机制来允许或拒绝对命名服务数据的访问。在这种情况下,Kerberos 票证信息用于向目录服务器验证身份,系统不会存储用于验证 DN 或口令。因此,对于此类型的配置,在使用 ldapclient 命令初始化客户机时,不需要指定 adminDN 和 adminPassword 属性。
为客户机指定 proxy 或 proxy-anonymous 凭证级别时,还需要选择代理用来向目录服务器进行验证的方法。缺省情况下,验证方法是 none,它表示匿名访问。验证方法还可以有与之关联的传输安全选项。
验证方法(例如凭证级别)可以是多值的。例如,在客户机配置文件中,您可以指定客户机首先尝试使用由 TLS 保护的 simple 方法进行绑定。如果失败,客户机将尝试使用 sasl/digest-MD5 方法进行绑定。这样,authenticationMethod 将是 tls:simple;sasl/digest-MD5。
LDAP 命名服务支持某些简单身份验证和安全层 (Simple Authentication and Security Layer, SASL) 机制。这些机制无需 TLS 便可安全地交换口令。但是,这些机制不提供数据完整性和保密性。有关 SASL 的信息,请参见 RFC 2222。
支持的验证机制如下所示:
客户机不向目录验证身份。这等效于 anonymous 凭证级别。
如果客户机系统使用 simple 验证方法,它将通过以明文形式发送用户口令来绑定到服务器。因此,除非会话受 IPsec 保护,否则口令很容易被窥探。使用 simple 验证方法的主要优点在于所有目录服务器都支持该验证方法且该方法容易设置。
客户机的口令在验证期间会得到保护,但会话不会被加密。某些目录服务器(包括 Oracle Directory Server Enterprise Edition)还支持 sasl/digest-MD5 验证方法。digest-MD5 的主要优点在于,在验证过程中,口令不会以明文形式通过线路传输,因此比 simple 验证方法更安全。有关 digest-MD5 的信息,请参见 RFC 2831。因为提高了安全性,digest-MD5 被视为是以 cram-MD5 为基础的改进。
使用 sasl/digest-MD5 时,验证过程是安全的,但会话无法受到保护。
注 - 如果您使用的是 Oracle Directory Server Enterprise Edition,则口令必须以明文形式存储在目录中。
sasl/cram-MD5
使用 sasl/cram-MD5 执行验证时,不会对 LDAP 会话进行加密,但是在验证期间会保护客户机的口令。此验证方法已过时,不应再使用。
sasl/GSSAPI
此验证方法与 self 凭证模式一起使用可启用“每用户”查找。为使用客户机凭证而为每位用户指定的 nscd 使用 sasl/GSSAPI 方法和客户机的 Kerberos 凭证绑定到目录服务器。在目录服务器中,可以对每位用户的访问进行控制。
客户机使用 simple 方法进行绑定,并且对会话进行加密。口令也将受到保护。
tls:sasl/cram-MD5
对 LDAP 会话进行加密,客户机使用 sasl/cram-MD5 向目录服务器验证身份。
tls:sasl/digest-MD5
对 LDAP 会话进行加密,客户机使用 sasl/digest-MD5 向目录服务器验证身份。
![]() | 注意 - Oracle Directory Server Enterprise Edition 要求口令以明文形式存储才能使用 digest-MD5。如果验证方法设置为 sasl/digest-MD5 或 tls:sasl/digest-MD5,则代理用户的口令将需要以明文形式存储。要特别注意的是,如果 userPassword 属性以明文形式存储,它应具有正确的 ACI,以便它将是不可读的。 |
下表概述了各种验证方法及其各自的特征。
表 9-4 验证方法
|
可以在 serviceAuthenticationMethod 属性中为给定的服务指定验证方法。下列服务允许选择验证方法:
此服务由 passwd(1) 用来更改登录口令和口令属性。
此服务由 chkey(1) 和 newkey(1M) 实用程序用来创建和更改用户的 Diffie-Hellman 密钥对。
此服务用于通过 pam_ldap(5) 对用户进行验证。
pam_ldap 支持帐户管理。
注 - 如果该服务未设置 serviceAuthenticationMethod,则缺省情况下将使用 authenticationMethod 属性的值。
注 - 如果 enableShadowUpdate 开关设置为 true,并且在 passwd-cmd 的 serviceAuthenticationMethod 参数中定义了验证方法,则 ldap_cachemgr 守护进程将使用该方法绑定到 LDAP 服务器。如果不存在,将使用 authenticationMethod。守护进程不会使用 none 验证方法。
下面的示例显示了某个客户机配置文件的一部分,其中,用户将使用 sasl/digest-MD5 来向目录服务器验证身份,但将使用 SSL 会话更改其口令。
serviceAuthenticationMethod=pam_ldap:sasl/digest-MD5 serviceAuthenticationMethod=passwd-cmd:tls:simple
通过使用 PAM 框架,您可以从几种验证服务中进行选择,包括 pam_unix_*、pam_krb5 和 pam_ldap_* 模块。
如果使用“每用户”验证方法,则必须启用上面列出的三种方法中最强的验证服务 pam_krb5。请参见 pam_krb5(5) 和《Oracle Solaris 11.1 管理:安全服务》。
即使未启用“每用户”验证,也可以使用 pam_krb5 验证系统。如果使用 proxy 或 anonymous 凭证级别来访问目录服务器数据,则无法基于每个用户限制对目录数据的访问。
当使用 anonymous 或 proxy authentication 方法时,建议优先使用 pam_ldap 模块而不是 pam_unix_* 模块,因为其灵活性更强,支持更强的验证方法并且能够使用帐户管理。
如果您没有更改 /etc/pam.conf 文件,则会缺省启用 UNIX 验证。
注 - pam_unix 模块已被删除并且在 Oracle Solaris 发行版中不再受支持。但是,Solaris 提供了一组其他服务模块,这些模块将提供等效或更强的功能。因此,在本指南中,pam_unix 是指等效的功能,而并非指 pam_unix 模块本身。
下面列出的模块提供了与原始 pam_unix 模块等效的功能。
pam_unix_* 模块遵循传统的 UNIX 验证模型,如以下列表中所述。
客户机从名称服务检索用户的加密口令。
系统提示用户输入其口令。
对用户的口令进行加密。
客户机比较这两个经过加密的口令,确定用户是否应通过验证。
此外,使用 pam_unix_* 模块时有两个限制。
口令必须以 UNIX crypt 格式存储,而不应采用其他任何加密方法(包括明文)存储。
名称服务必须能够读取 userPassword 属性。
例如,如果您将凭证级别设置为 anonymous,则任何人都必须能够读取 userPassword 属性。同样,如果您将凭证级别设置为 proxy,则代理用户必须能够读取 userPassword 属性。
注 - UNIX 验证与 sasl 验证方法 digest-MD5 不兼容,因为 Oracle Directory Server Enterprise Edition 要求口令以明文形式存储才能使用 digest-MD5。UNIX 验证要求口令以 crypt 格式存储。
注 - 当 enableShadowUpdate 开关设置为 true 时,pam_unix_account 模块支持帐户管理。对远程 LDAP 用户帐户实施控制的方式与对在 passwd 和 shadow 文件中定义的本地用户帐户实施控制的方式相同。在 enableShadowUpdate 模式中,对于 LDAP 帐户,系统将更新并使用 LDAP 服务器上的影子数据执行口令生命期和帐户锁定功能。当然,本地帐户的影子数据仅应用于本地客户机系统,而 LDAP 用户帐户的影子数据将应用于所有客户机系统上的用户。
只有本地客户机支持口令历史记录检查,LDAP 用户帐户不支持此功能。
请参阅 pam_krb5(5) 手册页和《Oracle Solaris 11.1 管理:安全服务》。
当实施 LDAP 验证时,如果在 pam_ldap 的 serviceAuthenticationMethod 参数中定义了验证方法,则用户使用该方法绑定到 LDAP 服务器。否则,将使用 authenticationMethod。
如果 pam_ldap 能够使用用户的身份和提供的口令绑定到服务器,它将验证用户的身份。
注 - 以前,如果启用了 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
pam_ldap 不读取 userPassword 属性。因此,不需要授予对 userPassword 属性的读取访问权限,除非有使用 UNIX 验证的其他客户机。此外,pam_ldap 不支持 none 验证方法。因此,您必须定义 serviceAuthenticationMethod 或 authenticationMethod 属性,以便客户机可以使用 pam_ldap。有关更多信息,请参见 pam_ldap(5) 手册页。
![]() | 注意 - 如果使用 simple 验证方法,userPassword 属性在传输过程中可能会被第三方读取。 |
表 9-5 LDAP 中的验证行为
|
可使用 passwd 命令更改口令。如果 enableShadowUpdate 开关未设置为 true,则用户必须可以对 userPassword 属性进行写入。如果 enableShadowUpdate 开关设置为 true,则管理凭证必须能够更新 userPassword 属性。请记住,对于此操作,passwd-cmd 的 serviceAuthenticationMethod 会覆盖 authenticationMethod。当前口令在传输过程中可能是未加密的,具体取决于所使用的验证方法。
当使用 UNIX 验证时,在将新的 userPassword 属性写入到 LDAP 之前,将使用 UNIX crypt 格式对其进行加密和标记。因此,无论使用哪种验证方法绑定到服务器,在传输过程中都会对新口令进行加密。有关更多信息,请参见 pam_authtok_store(5) 手册页。
如果 enableShadowUpdate 开关设置为 true,则当用户口令被更改时,pam_unix_* 模块还更新相关的影子信息。pam_unix_* 模块更新的字段与本地用户口令被更改时该模块在本地 shadow 文件中更新的 shadow 字段相同。
pam_ldap 不再支持口令更新。现在,pam_authtok_store 与 server_policy 选项一起替代了 pam_ldap 口令更新功能。当使用 pam_authtok_store 时,新口令以明文形式发送到 LDAP 服务器。因此,为了确保保密性,请使用 TLS。如果不使用 TLS,新的 userPassword 将很容易被窥探。如果您随 Oracle Directory Server Enterprise Edition 设置了无标记的口令,则该软件将使用 passwordStorageScheme 属性对口令进行加密。有关 passwordStorageScheme 的更多信息,请参见所用的 Oracle Directory Server Enterprise Edition 版本的管理指南中有关用户帐户管理的章节。
注 - 设置 passwordStorageScheme 属性时,需要考虑以下配置问题。如果某个 NIS 或使用 UNIX 验证的另一客户机正在使用 LDAP 作为系统信息库,则 passwordStorageScheme 需要是 crypt。另外,如果将使用 sasl/digest-MD5 的 LDAP 验证用于 Oracle Directory Server Enterprise Edition,则 passwordStorageScheme 必须设置为 clear。
如果您选择 pam_krb5 作为帐户和口令管理系统,Kerberos 环境将负责管理您所有的帐户、口令、帐户锁定和其他帐户管理详细信息。请参阅 pam_krb5(5) 和《Oracle Solaris 11.1 管理:安全服务》。
如果您不使用 pam_krb5,则可以配置 LDAP 命名服务以利用 Oracle Directory Server Enterprise Edition 中提供的口令和帐户锁定策略支持。您可以配置 pam_ldap(5) 以支持用户帐户管理。与正确的 PAM 配置一起使用时,passwd(1) 可强制实施由 Oracle Directory Server Enterprise Edition 口令策略设置的口令语法规则。
通过 pam_ldap(5),可以支持以下帐户管理功能。这些功能取决于 Oracle Directory Server Enterprise Edition 的口令和帐户锁定策略配置。您可以根据需要启用任意多的功能。
口令生命期和到期通知
用户必须按照计划更改其口令。如果在配置的时间内未更改口令,口令将过期。过期的口令会导致用户验证失败。
在过期警告期间内登录时,用户每次都会看到一条警告消息。该消息指出口令将在多少小时或多少天之后到期。
口令语法检查
新口令必须符合口令的最低长度要求。此外,口令不能与用户目录项中的 uid、cn、sn 或 mail 属性的值相同。
口令历史记录检查
用户不能重复使用口令。如果用户尝试将口令更改为之前使用过的某个口令,则 passwd(1) 将失败。LDAP 管理员可以配置保留在服务器历史记录列表中的口令数目。
用户帐户锁定
连续验证失败达到指定次数后,会锁定用户帐户。如果管理员取消激活了某个用户的帐户,该用户也会被锁定。在帐户锁定时间结束或管理员重新激活帐户之前,验证将一直失败。
注 - 上述帐户管理功能只能用于 Oracle Directory Server Enterprise Edition。有关在服务器上配置口令和帐户锁定策略的信息,请参见所用 Oracle Directory Server Enterprise Edition 版本的管理指南中的“用户帐户管理”一章。另请参见使用 pam_ldap 模块进行帐户管理的示例 pam_conf 文件。不要启用对 proxy 帐户的帐户管理。
在 Oracle Directory Server Enterprise Edition 上配置口令和帐户锁定策略之前,请确保所有主机将“最新的”LDAP 客户机用于 pam_ldap 帐户管理。
此外,请确保客户机具有正确配置的 pam.conf(4) 文件。否则,当 proxy 或用户口令到期后,LDAP 命名服务将无法工作。
注 - 以前,如果启用了 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
如果在客户机上 enableShadowUpdate 开关设置为 true,则可用于本地帐户的帐户管理功能还可以用于 LDAP 帐户。这些功能包括口令生命期、帐户到期和通知、锁定登录失败的帐户等等。另外,LDAP 中现在支持 passwd 命令的 -dluNfnwx 选项。因此,LDAP 命名服务中支持文件命名服务中的 passwd 命令和 pam_unix_* 模块的全部功能。enableShadowUpdate 开关提供了一种为在文件和 LDAP 作用域中定义的用户实施一致的帐户管理的方法。
为防止用户修改自己的帐户管理数据并借此规避口令策略,LDAP 服务器被配置为阻止用户对服务器上自己的影子数据进行写入访问。具有管理凭证的管理员将负责为客户机系统执行影子数据更新。不过,这种配置与 pam_ldap 模块冲突,因为该模块要求口令可由用户修改。因此,由 pam_ldap 模块执行的帐户管理与由 pam_unix_* 模块执行的帐户管理不兼容。
![]() | 注意 - 不要在同一个 LDAP 命名域中同时使用 pam_ldap 模块和 pam_unix_* 模块。要么所有客户机都使用 pam_ldap 模块,要么所有客户机都使用 pam_unix_* 模块。因为存在这种限制,您可能需要专用的 LDAP 服务器。例如,某个 web 或电子邮件应用程序可能希望用户能够在 LDAP 服务器上更改自己的口令。 |
enableShadowUpdate 实现还要求管理凭证(adminDN 与 adminPassword)存储在每个客户机本地。该信息存储在 svc:/network/ldap/client 服务中。
与使用 pam_ldap 进行帐户管理不同,使用 pam_unix_* 模块进行帐户管理不要求更改 /etc/pam.conf 文件。使用缺省的 /etc/pam.conf 文件足以满足要求。