排除 LDAP 错误

ENTERPRISE

排除 LDAP 目录的常见身份认证和配置问题

轻量目录访问协议 (LDAP) 为访问目录服务提供一个轻量客户端-服务器协议。协议提供基于标准的方法,用于为基于 X.500 的目录服务定义对象及其属性。LDAP 通过 TCP/IP 或其他以连接为导向的传输服务运行。

使用 Microsoft Active Directory 时的常见问题

Microsoft Windows Server Active Directory 是 Windows 森林和域的基于 LDAP 的身份存储。Active Directory 在与 LDAP 兼容的对象和属性中存储有关用户、组、计算机、角色和组织的详细信息,并以与其他 LDAP 服务(如 OpenLDAP)相同的格式返回您使用 LDAP 查询搜索的信息。

由于将 Active Directory 身份认证集成到多平台环境中可能会带来使用 ApacheDS、OpenLDAP 或其他 LDAP 服务时不太可能遇到的挑战,LDAP 身份认证和配置中最常见的问题会涉及与 Active Directory 域控制器的通信或跨 Active Directory 域的复制。

无法连接到目录后端

如果尝试从 Active Directory 检索信息,但连接失败,您可能会看到以下错误消息:

无法连接到目录

图 1. 连接错误消息:超时

如果看到错误消息,指出与后端目录的连接失败,那么这通常是由以下问题引起的:

  • 所需的端口拒绝所有流量或受防火墙规则保护。

    具体端口要求取决于您使用的 Active Directory 版本和通信流量类型。例如,大多数 LDAP 流量需要 TCP 或 UDP 连接的端口 389,以处理目录和复制服务、用户和计算机身份认证以及组策略分发。

    要通过安全通信通道处理相同类型的流量,LDAP 需要 TCP 连接的端口 636,才能通过安全套接字层 (SSL) 传递加密消息。

  • DNS 无法解析 Active Directory 域控制器的名称或 IP 地址。

如果遇到此错误,请检查错误所在的计算机是否具有用于网络接口和域控制器的正确 IP地址。您可以使用 DHCP 服务器角色或在网络适配器设置中手动检查域连接的当前 IP 地址和网络设置。例如,您可以使用 ipconfig 或类似的操作系统命令来检索当前的网络设置,以显示网络配置详细信息。

如果端口号、主机名或主机 IP 地址存在问题,请编辑 LDAP 目录设置中的值,以指定正确的端口、主机名或主机 IP 地址。

要编辑 LDAP 目录设置:

  1. 登录到 DC/OS 基于 Web 的控制台。

  2. 单击 设置,然后单击 LDAP 目录

  3. 单击 编辑目录

  4. 修改主机名、主机 IP 地址或 LDAP 端口。

  5. 单击 保存配置

传输层安全 (SSL/TLS) 连接错误

如果您尝试连接到 Active Directory,并且使用传输层安全 (SSL/TLS) 与服务器通信时出现问题而导致连接失败,您可能会看到以下错误消息:

SSL 连接错误

图 2. 连接错误:套接字 SSL 封装错误

例如,如果未将 LDAP 服务器配置为接受 SSL/TLS 连接,或者用于保护通道的证书无效,则可能会看到此错误。

如果在使用安全套接字层 (SSL) 连接来连接到 Active Directory 时出现问题,您应该:

  • 检查是否为 Active Directory LDAP 服务器角色启用了 SSL 上的 LDAP (LDAPS),并且您已导入有效的 CA 证书以允许 SSL/TLS 连接。
  • 检查您如何为 DC/OS 群集中的目录配置适当的相应 LDAP SSL/TLS 设置。

如果 Active Directory LDAP 服务器角色未配置为允许 SSL/TLS 连接,则应验证 DC/OS 群集是否已配置为允许未加密通信。

要更改 DC/OS 处理 SSL/TLS 连接错误的方式:

  1. 登录到 DC/OS 基于 Web 的控制台。

  2. 单击 设置,然后单击 LDAP 目录

  3. 单击 编辑目录

  4. 选择 SSL/TLS 设置下,选择另一个选项。

    SSL/TLS 设置选项

    图 3. SSL/TLS 设置选项

    例如,如果已将“选择 SSL/TLS 设置”配置为 对所有连接都使用 SSL/TLS,则可能需要将设置更改为“尝试 StartTLS,如果失败,则不进行加密”。

  5. 单击 保存配置

强制执行 SSL/TLS,但连接失败

如果已将与 LDAP 服务器的连接配置为“在无法使用传输层安全 (SSL/TLS) 时中止连接”,则可能会看到以下错误消息:

已中止 SSL/TLS 连接

图 4. 连接错误消息:TLS 错误

要更改 DC/OS 处理 SSL/TLS 连接错误的方式:

  1. 登录到 DC/OS 基于 Web 的控制台。

  2. 单击 设置,然后单击 LDAP 目录

  3. 单击 编辑目录

  4. 选择 SSL/TLS 设置下,选择另一个选项。

    SSL/TLS 设置选项

    图 5. SSL/TLS 设置选项

    例如,如果您想在安全通信不可用时继续连接到 LDAP 服务器,则可以将“选择 SSL/TLS 设置”设置为 尝试 StartTLS,如果失败,则不进行加密

  5. 单击 保存配置

服务账户凭据问题

如果 LDAP 服务器连接成功,但服务账户的身份认证凭据不正确,则可能会看到以下错误消息:

LDAP 身份认证错误

图 6. LDAP 身份认证错误

要解决此问题:

  1. 登录到 DC/OS 基于 Web 的控制台。

  2. 单击 设置,然后单击 LDAP 目录

  3. 单击 编辑目录

  4. 单击 身份认证

  5. 更正 查找 DN查找密码

    修改身份认证信息

    图 7. 修改身份认证信息

  6. 单击 保存配置

无法找到用户

如果 LDAP 服务器连接成功且服务账户凭据正确,但无法找到用户,则可能会看到以下错误消息:

未找到 LDAP 用户

图 8. 未找到 LDAP 用户

大多数情况下,如果指定的用户或服务账户不在您定义的用户搜索库范围之内,或者用于绑定到 LDAP 服务器的用户可分辨名称 (DN) 或用户可分辨名称 (DN) 模板存在问题,您会看到此错误。如果您看到此错误,您应该验证以下设置:

  • 用于连接到 LDAP 服务器的绑定操作和身份认证方法的类型。
  • 为用户搜索库定义的范围。
  • 您正在使用的用户可分辨名称 (DN) 模板。
  • 您正在使用的用户搜索筛选模板。

指定用户可分辨名称 (DN) 模板

如果您要使用 简单 身份认证来绑定到 LDAP 服务器,则确保您已指定一个有效的用户 DN 模板。大多数情况下,可分辨名称模板包括运行时变量占位符 cn=%(username)s,该占位符在查找请求中被替换为实际的账户名值。

指定用户搜索库和筛选模板

如果您要使用 搜索 身份认证来绑定到 LDAP 服务器,则确保您已指定一个有效的用户搜索库和用户搜索筛选模板。

用户搜索库应足够宽泛,以包括要从中返回结果的相应容器、组织单位和域。

定义搜索筛选模板时,应记住以下内容:

  • %(username)s 运行时变量是一个占位符,该占位符在查找请求中被替换为实际的账户名值。
  • 对于 OpenLDAP 部署,账户查找请求通常使用 UID 属性,因此通常使用 (uid=%(username)s)) 来定义搜索模板占位符。
  • 对于 Active Directory 部署,账户查找请求通常使用 sAMAccountName 属性,因此通常使用 (sAMAccountName=%(username)s)) 来定义搜索模板占位符。大多数情况下,sAMAccountName 属性是用户为登录 Windows 域中的计算机而输入的账户名。

验证 Active Directory 用户账户名

如果您要使用 LDAP 服务器来访问 Windows 用户的 Active Directory 账户,则可以使用 Active Directory 用户和计算机或 Windows PowerShell 来找到 SamAccountName 属性和其他账户信息。

要使用 Active Directory 用户和计算机查找账户信息:

  1. 使用具有管理权限的账户登录 Windows 计算机。

  2. 打开 管理工具 的控制面板。

  3. 打开 Active Directory 用户和计算机

  4. 选择用户账户。

    在 Active Directory 用户和计算机中选择一个用户

    图 9. Active Directory 选项

  5. 右键单击,然后选择 属性

  6. 单击 账户 选项卡并勾选 用户登录名称

    用户登录账户属性

    图 10. 用户登录账户

检查替代账户名称格式

某些情况下,您可能希望使用 sAMAccountName 的替代项来查找账户信息。例如,您可能想通过 userPrincipalName 查找账户信息,它在 user@domain.com 格式的域中定义了唯一账户。

如果您想使用任何其他有效的账户名称格式,例如 user@domain.com,则可以使用 Active Directory 用户和计算机或使用 Windows Powershell 运行命令来找到有效的替代项来替代 sAMAccountName

要使用 Window PowerShell 查找 Active Directory 用户信息,请执行以下操作:

  1. 打开 Windows Powershell 管理员控制台。

  2. 使用导入菜单选项或 Import-Module cmdlet 来导入 Active Directory 模块。例如,在 PowerShell 控制台中,您可以按以下方式运行 import-module cmdlet:PS C:\Users\Administrator> import-module activedirectory

  3. 运行 Get-ADUser cmdlet,以检索指定用户的 Active Directory 属性。例如:PS C:\Users\Administrator> Get-ADUser rmcdonald -properties *

此 cmdlet 将通过 SAMAccountName rmcdonald 为用户返回所有属性。

AccountExpirationDate : 
accountExpires : 9223372036854775807
AccountLockoutTime : 
AccountNotDelegated : False
AllowReversiblePasswordEncryption : False
BadLogonCount : 1
badPasswordTime : 131896358930929294
badPwdCount : 1 
CannotChangePassword : False
CanonicalName : example.com/Users/Ronald McDonald
Certificates : {} 
City : 
CN : Ronald McDonald 
codePage : 0 
Company : 
Country : 
countryCode : 0 
Created : 12/17/2018 2:27:43 PM 
createTimeStamp : 12/17/2018 2:27:43 PM 
Deleted : 
Department : 
Description : 
DisplayName : Ronald McDonald 
DistinguishedName : CN=Ronald McDonald,CN=Users,DC=example,DC=com
Division : 
DoesNotRequirePreAuth : False 
dSCorePropagationData : {12/31/1600 4:00:00 PM}
EmailAddress : 
EmployeeID : 
EmployeeNumber : 
Enabled : True 
Fax : 
GivenName : Ronald
HomeDirectory : 
HomedirRequired : False 
HomeDrive : 
HomePage : 
HomePhone : 
Initials : 
instanceType : 4
isDeleted : 
LastBadPasswordAttempt : 12/18/2018 11:44:53 AM
LastKnownParent : 
lastLogoff : 0 
lastLogon : 0 
LastLogonDate : 12/17/2018 2:36:30 PM
lastLogonTimestamp : 131895597903404620
LockedOut : False
logonCount : 0 
LogonWorkstations : 
Manager : 
MemberOf : {} 
MNSLogonAccount : False
MobilePhone : 
Modified : 12/17/2018 2:36:30 PM 
modifyTimeStamp : 12/17/2018 2:36:30 PM
msDS-User-Account-Control-Computed : 0 
Name : Ronald McDonald 
nTSecurityDescriptor : System.DirectoryServices.ActiveDirectorySecurity
ObjectCategory : CN=Person,CN=Schema,CN=Configuration,DC=example,DC=com 
ObjectClass : user 
ObjectGUID : 8a372fe3-b879-4a58-aabd-6001327b2548
objectSid : S-1-5-21-1469461492-1576009741-989685995-1104
Office : 
OfficePhone : 
Organization : 
OtherName : 
PasswordExpired : False 
PasswordLastSet : 12/17/2018 2:27:43 PM
PasswordNeverExpires : True
PasswordNotRequired : False 
POBox : 
PostalCode : 
PrimaryGroup : CN=Domain Users,CN=Users,DC=example,DC=com
primaryGroupID : 513 
ProfilePath : 
ProtectedFromAccidentalDeletion : False
pwdLastSet : 131895592635431368 
SamAccountName : rmcdonald 
sAMAccountType : 805306368 
ScriptPath : 
sDRightsEffective : 15 
ServicePrincipalNames : {} 
SID : S-1-5-21-1469461492-1576009741-989685995-1104
SIDHistory : {} 
SmartcardLogonRequired : False 
sn : McDonald 
State : 
StreetAddress : 
Surname : McDonald 
Title : 
TrustedForDelegation : False
TrustedToAuthForDelegation : False
UseDESKeyOnly : False
userAccountControl : 66048 
userCertificate : {} 
UserPrincipalName : rmcdonald@example.com
uSNChanged : 16787 
uSNCreated : 16781 
whenChanged : 12/17/2018 2:36:30 PM 
whenCreated : 12/17/2018 2:27:43 PM

带错误凭据的用户

如果与 LDAP 服务器的连接成功,且可以在用户搜索库范围内找到指定用户,但凭据是错误的,则可能会看到以下错误消息:

无效用户凭据

图 11. 无效用户凭据

如果您看到此错误,则检查是否存在以下可能导致用户凭据无效的潜在问题:

  • 验证账户未被锁定或禁用。
  • 验证账户密码未过期。
  • 检查是否存在阻止用户身份认证的登录时间或其他访问控制限制。