如何排查 Windows Server 中的 Active Directory 复制错误 5:拒绝访问

本文介绍 Active Directory 复制失败并出现错误 5:拒绝访问的情况的症状、原因和解决方法。

原始 KB 数: 3073945

现象

当 Active Directory 复制失败并出现错误 5 时,可能会遇到以下一个或多个症状。

症状 1

Dcdiag.exe命令行工具报告 Active Directory 复制测试失败并显示错误状态代码 (5)。 该报表类似于以下示例:

Testing server: <Site_Name>\<Destination_DC_Name>  
Starting test: Replications  
Replications Check  
[Replications Check,<Destination_DC_Name>] A recent replication attempt failed:  
From <Source_DC> to <Destination_DC>  
Naming Context: <Directory_Partition_DN_Path>  
The replication generated an error (5):  
Access is denied.  
The failure occurred at <Date> <Time>.  
The last success occurred at <Date> <Time>.  
<Number> failures have occurred since the last success.

症状 2

Dcdiag.exe命令行工具通过运行DCDIAG /test:CHECKSECURITYERROR命令报告DsBindWithSpnEx函数失败并出现错误 5。

症状 3

REPADMIN.exe命令行工具报告上次复制尝试失败,状态为 5。

REPADMIN经常引用 5 状态的命令包括但不限于以下命令:

  • REPADMIN /KCC
  • REPADMIN /REPLICATE
  • REPADMIN /REPLSUM
  • REPADMIN /SHOWREPL
  • REPADMIN /SHOWREPS
  • REPADMIN /SYNCALL

命令 REPADMIN /SHOWREPL 的示例输出如下所示。 此输出显示传入复制失败DC_2_NameDC_1_Name,并出现“访问被拒绝”错误。

<Site_Name>\<DC_1_Name>  
DSA Options: IS_GC  
Site Options: (none)  
DSA object GUID: <GUID>  
DSA invocationID: <invocationID>

==== INBOUND NEIGHBORS======================================  
DC= <DomainName>,DC=com  
<Site_Name>\<DC_2_Name> via RPC  
DSA object GUID: <GUID> 
Last attempt @ <Date> <Time> failed, result 5(0x5):  
Access is denied.  
<#> consecutive failure(s).  
Last success @ <Date> <Time>.

症状 4

NTDS KCC、NTDS 常规或 Microsoft-Windows-ActiveDirectory_DomainService 事件(状态为 5)记录在目录服务日志事件查看器中。

下表总结了经常引用 8524 状态的 Active Directory 事件,包括但不限于:

事件 ID Source 事件字符串
1655 NTDS General Active Directory 尝试与以下全局目录通信,尝试失败。
1925 NTDS KCC 尝试为以下可写目录分区建立复制链接失败。
1926 NTDS KCC 尝试建立指向具有以下参数的只读目录分区的复制链接失败。

症状 5

右键单击 Active Directory 站点和服务中源域控制器(DC)的连接对象,然后选择“ 立即复制”时,该过程将失败,并且收到以下错误:

对话框标题文本:立即复制

对话框消息文本:

尝试将命名上下文 %directory 分区名称%<从域控制器<源 DC 同步到域控制器<目标 DC>> 期间发生以下错误:拒绝>访问。

该操作不会继续。

以下屏幕截图显示了错误的示例:

显示错误示例的“立即复制”窗口的屏幕截图。

解决方法

使用通用 DCDIAGNETDIAG 命令行工具运行多个测试。 DCDIAG /TEST:CheckSecurityError使用命令行工具执行特定测试。 (这些测试包括 SPN 注册检查。

若要解决此问题,请执行以下步骤:

  1. 在命令提示符下, DCDIAG 在目标域控制器上运行。
  2. 运行 DCDIAG /TEST:CheckSecurityErrorNETDIAG
  3. 解决已 DCDIAG标识的任何错误。
  4. 重试以前失败的复制操作。 如果复制继续失败,请参阅以下原因和解决方案。

以下原因可能会导致错误 5。 其中一些有解决方案。

原因 1:源或目标 DC 上存在无效的安全通道或密码不匹配

通过运行以下命令之一来验证安全通道:

  • nltest /sc_query:<Domain Name>

  • netdom verify <DC Name>

条件是,使用 NETDOM /RESETPWD.. 重置目标域控制器的密码。

解决方案

  1. 在目标域控制器上禁用 Kerberos 密钥分发中心 (KDC) 服务。

  2. 在目标域控制器上提升的命令提示符下,通过运行 Klist -li 0x3e7 purge获取系统的 Kerberos 票证。

  3. 运行 NETDOM RESETPWD 以重置远程域控制器的密码:

    c:\>netdom resetpwd /server:<remote_dc_name> /userd: domain_name\administrator /passwordd: administrator_password
    
  4. 确保潜在的 KDC 和源域控制器(如果它们位于同一域中),入站复制目标域控制器的新密码。

  5. 在目标域控制器上启动 KDC 服务,然后重试复制操作。

有关详细信息,请参阅 如何使用Netdom.exe重置域控制器的计算机帐户密码。

原因 2:目标 DC 注册表中的“CrashOnAuditFail”设置的值为“2”

CrashOnAuditFail 2如果审核:如果启用了组策略中无法记录安全审核策略设置并且本地安全事件日志已满,则立即关闭系统。

启用审核时,Active Directory 域控制器尤其容易出现最大容量安全日志,并且安全事件日志的大小受“不手动覆盖事件”(手动清除日志)“按需覆盖”选项的约束,事件查看器或其组策略等效项。

解决方案

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表

  1. 清除安全事件日志,并根据需要将其保存到其他位置。

  2. 重新评估安全事件日志上的任何大小约束。 这包括基于策略的设置。

  3. 删除并重新创建 CrashOnAuditFail 注册表项,如下所示:

    注册表子项: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA
    值名称:CrashOnAuditFail
    值类型: REG_DWORD
    值数据: 1

  4. 重启目标域控制器。

看到 CrashOnAuditFail 某个值 0 ,或者 1,某些 CSS 工程师通过再次清除安全事件日志、删除 CrashOnAuditFail 注册表值并重新启动目标域控制器来解决“访问被拒绝”错误。

有关详细信息,请参阅 管理审核和安全日志

原因 3:信任无效(源或目标 DC 上的安全通道无效,或信任链中的信任关系损坏或无效)

如果 Active Directory 复制在不同域中的域控制器之间失败,则应验证信任路径上的信任关系的运行状况。

可以尝试 NetDiag 信任关系测试来检查断开的信任。 Netdiag.exe实用工具通过显示以下文本标识断开的信任:

Trust relationship test. . . . . . : Failed  
Test to ensure DomainSid of domain '<domainname>' is correct.  
[FATAL] Secure channel to domain '<domainname>' is broken.  
[% <variable status code> %]

例如,如果你有一个包含根域()、子B.Contoso.COM域()、子C.B.Contoso.COM域(Contoso.COM)、同一林()中的树域()和树域(Fabrikam.COM)的多域林,并且如果孙域(C.B.Contoso.COM)和树域的域控制器之间发生复制失败(Fabrikam.COM)则应验证子域之间的信任运行状况C.B.Contoso.COM,介于和Contoso.COMB.Contoso.COMB.Contoso.COM之间,最后在树域之间Contoso.COM和之间进行Fabrikam.COM复制)。

如果目标域之间存在快捷方式信任,则无需验证信任路径链。 相反,应验证目标域和源域之间的快捷方式信任。

运行以下命令检查对信任的最新密码更改:

Repadmin /showobjmeta * <DN path for TDO in question>

验证目标域控制器是否以可传递方式复制可写域目录分区,其中信任密码更改可能会生效。

从根域 PDC 重置信任的命令如下所示:

netdom trust <Root Domain> /Domain:<Child Domain> /UserD:CHILD /PasswordD:* /UserO:ROOT /PasswordO:* /Reset /TwoWay

用于从子域 PDC 重置信任的命令如下所示:

netdom trust <Child Domain> /Domain:<Root Domain> /UserD:Root /PasswordD:* /UserO:Child /PasswordO:* /Reset /TwoWay

原因 4:时间偏斜过多

目标 DC 使用的 KDC 与源 DC 之间存在时间差异。 时间差超过了默认域策略中定义的 Kerberos 允许的最大时间偏差。

默认域策略中的 Kerberos 策略设置允许在系统时间(这是默认值)之间的系统时间(这是默认值)来防止重播攻击。 一些文档指出,客户端的系统时间和 Kerberos 目标的系统时间必须在彼此的五分钟内。 其他文档指出,在 Kerberos 身份验证的上下文中,重要的时间是调用方使用的 KDC 与 Kerberos 目标上的时间之间的增量。 此外,Kerberos 并不关心相关域控制器上的系统时间是否与当前时间匹配。 它只关心 KDC 和目标域控制器之间的相对时间差在 Kerberos 策略允许的最大时间偏差范围内。 (默认时间为五分钟或更少。

在 Active Directory 操作的上下文中,目标服务器是目标域控制器联系的源域控制器。 当前运行 KDC 服务的 Active Directory 林中的每个域控制器都是潜在的 KDC。 因此,必须考虑针对源域控制器对所有其他域控制器的时间准确性。 这包括目标域控制器本身上的时间。

可以使用以下两个命令检查时间准确性:

  • DCDIAG /TEST:CheckSecurityError
  • W32TM /MONITOR

可以在“详细信息部分找到示例输出DCDIAG /TEST:CheckSecurityError。 此示例显示域控制器上的时间偏差过多。

复制请求失败时,在目标域控制器上查找 LSASRV 40960 事件。 查找在源域控制器的 CNAME 记录中引用 GUID 且扩展错误0xc000133的事件。 查找类似于以下事件的事件:

0xc000133:主域控制器的时间不同于备份域控制器或成员服务器的时间过大

捕获连接到源域控制器上共享文件夹的目标计算机(以及其他操作)的网络跟踪可能会显示屏幕上的“已发生扩展错误”,但网络跟踪显示以下信息:

-> KerberosV5 KerberosV5:TGS 请求领域: <- 源 DC 的 TGS 请求
<- Kerberosvs Kerberosvs:KRB_ERROR - KRB_AP_ERR_TKE_NVV (33) <- TGS 响应,其中“KRB_AP_ERR_TKE_NYV
<- 映射到“票证尚无效” <- 映射到“票证尚无效”

响应 TKE_NYV 指示 TGS 票证上的日期范围比目标时间更新。 这表示时间偏斜过长。

注意

  • W32TM /MONITOR 仅在测试计算机域中的域控制器上检查时间,因此必须在每个域中运行此信息,并比较域之间的时间。
  • 如果发现系统时间不准确,请尝试找出为什么以及可以做些什么来防止将来的时间不准确。 林根 PDC 是否已配置外部时间源? 引用时间源是否联机并在网络上可用? 服务是否正在运行? 是否将 DC 角色计算机配置为使用 NT5DS 层次结构到源时间?
  • 当目标域控制器上时间差太大时,DSSITE 中的“立即复制命令。MSC 失败,出现“客户端和服务器之间存在时间和/或日期差异”屏幕错误。 此错误字符串映射到错误 1398(十进制)或0x576(十六进制),并带有ERROR_TIME_SKEW符号错误名称。

有关详细信息,请参阅 设置时钟同步容错以防止重播攻击

原因 5:注册表中的“RestrictRemoteClients”设置的值为“2”

如果启用了“未经身份验证的 RPC 客户端策略设置的限制”,并且设置为“未经身份验证且无例外”,则RestrictRemoteClients注册表值将设置为注册表子项中的HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\RPC0x2

此策略设置仅允许经过身份验证的远程过程调用 (RPC) 客户端连接到在应用策略设置的计算机上运行的 RPC 服务器。 它不允许出现异常。 如果选择此选项,则系统无法使用 RPC 接收远程匿名调用。 此设置不应应用于域控制器。

解决方案

  1. 禁用将注册表值限制RestrictRemoteClients2的未经身份验证的 RPC 客户端策略设置。

    注意

    策略设置位于以下路径中:

    针对未经身份验证的 RPC 客户端的计算机配置\管理模板\系统\远程过程调用\限制。

  2. RestrictRemoteClients删除注册表设置,然后重启。

有关详细信息,请参阅 “针对未经身份验证的 RPC 客户端的限制:启用了在人脸上打出 域并 启用 RestrictRemoteClients 注册表项的组策略。

原因 6:“从网络访问此计算机”用户权限未授予“企业域控制器”组或触发复制的用户

在 Windows 的默认安装中,默认域控制器策略链接到域控制器的组织单位(OU)。 OU 向以下安全组授予 从网络 用户权限访问此计算机的权限:

本地策略 默认域控制器策略
管理员 管理员
经过身份验证的用户 经过身份验证的用户
所有人 所有人
企业域控制器 企业域控制器
[Windows 2000 兼容访问] 预 Windows 2000 兼容访问

如果 Active Directory 操作失败并出现错误 5,则应验证以下几点:

  • 表中的安全组在默认域控制器策略中授予从网络用户访问此计算机的权限。

  • 域控制器计算机帐户位于域控制器的 OU 中。

  • 默认域控制器的策略链接到域控制器的 OU 或托管域控制器计算机帐户的备用 OU。

  • 组策略应用于当前记录错误 5 的目标域控制器。

  • 启用“拒绝从网络用户权限访问此计算机”,或者不引用触发复制的域控制器或用户帐户所使用的安全上下文的直接或可传递组。

  • 策略优先级、阻止继承、Microsoft Windows Management Instrumentation (WMI) 筛选等不会阻止策略设置应用于域控制器角色计算机。

注意

  • 可以使用 RSOP 验证 策略设置。MSC,但 GPRESULT 首选工具,因为它更准确,例如, GPRESULT /H c:\temp\GPOResult.htmlGPRESULT /Z
  • 本地策略优先于站点、域和 OU 中定义的策略。
  • 一次,管理员通常会从默认域控制器策略中的网络策略设置中删除企业域控制器每个人组。 但是,删除这两个组是致命的。 没有理由从此策略设置中删除 企业域控制器 ,因为只有域控制器是此组的成员。

原因 7:源 DC 与目标 DC 之间存在 SMB 签名不匹配

SMB 签名的最佳兼容性矩阵由四个策略设置及其基于注册表的等效项定义:

策略设置 注册表路径
Microsoft 网络客户端:对通信进行数字签名(如果服务器允许) HKEY_LOCAL_MACHINE\SYSTEM\CCS\Services\Lanmanworkstation\Parameters\Enablesecuritysignature
Microsoft 网络客户端:对通信进行数字签名(始终) HKEY_LOCAL_MACHINE\SYSTEM\CCS\Services\Lanmanworkstation\Parameters\Requiresecuritysignature
Microsoft网络服务器:数字签名通信(如果服务器同意) HKEY_LOCAL_MACHINE\SYSTEM\CCS\Services\Lanmanserver\Parameters\Enablesecuritysignature
Microsoft 网络服务器:对通信进行数字签名(始终) HKEY_LOCAL_MACHINE\SYSTEM\CCS\Services\Lanmanserver\Parameters\Requiresecuritysignature

应专注于目标域控制器和源域控制器之间的 SMB 签名不匹配。 经典案例涉及一个设置,该设置在一侧启用或必需,但在另一端处于禁用状态。

注意

内部测试显示 SMB 签名不匹配,导致复制失败,错误 1722:“RPC 服务器不可用。

原因 8:UDP 格式的 Kerberos 数据包碎片

网络路由器和交换机可能会碎片或完全删除由 Kerberos 使用的大型用户数据报协议(UDP)格式的网络数据包,以及 DNS 扩展机制(EDNS0)。

解决方案

  1. 从目标域控制器的控制台中,按源域控制器的完全限定的计算机名称对源域控制器执行 ping 操作,以标识网络路由支持的最大数据包。 为此,请运行以下命令:

    c:\>Ping <Source_DC_hostname>.<Fully_Qualified_Computer_Name> -f -l 1472
    
  2. 如果最大的非分段数据包小于 1,472 字节,请尝试以下方法之一(按首选项顺序):

    • 更改网络基础结构以适当地支持大型 UDP 帧。 这可能需要在路由器、交换机或防火墙上进行固件升级或配置更改。
    • 将 maxpacketsize(在目标域控制器上)设置为命令标识 PING -f -l 的最大数据包(小于 8 字节)以考虑 TCP 标头,然后重启已更改的域控制器。
    • 将 maxpacketsize (在目标域控制器上) 设置为值 1。 这会触发 Kerberos 身份验证以使用 TCP。 重启更改的域控制器以使更改生效。
  3. 重试失败的 Active Directory 操作。

原因 9:网络适配器已启用“大型发送卸载”功能

解决方案

  1. 在目标域控制器上,打开网络适配器属性。
  2. 选择“配置”按钮。
  3. 选择“高级”选项卡。
  4. 禁用 IPv4 大型发送卸载属性。
  5. 重新启动域控制器。

原因 10:Kerberos 领域无效

如果以下一个或多个条件为 true,则 Kerberos 领域无效:

  • KDCNames注册表项错误地包含本地 Active Directory 域名。
  • PolAcDmN注册表项和PolPrDmN注册表项不匹配。

解决方案

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表

不正确的“KDCNames”注册表项的解决方案

  1. 在目标域控制器上,运行 REGEDIT
  2. 在注册表中找到以下子项: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Domains
  3. 对于子项下的每个 <Fully_Qualified_Domain> ,请验证注册表项的值 KdcNames 是否引用有效的外部 Kerberos 领域,而不是同一 Active Directory 林中的本地域或其他域。

不匹配的“PolAcDmN”和“PolPrDmN”注册表项的解决方案

  1. 启动“注册表编辑器”。

  2. 在导航窗格中,展开 “安全性”。

  3. “安全 ”菜单上,选择“ 权限 ”以授予 管理员 本地组完全控制 SECURITY Hive 及其子容器和对象的权限。

  4. 在注册表中找到以下子项:
    HKEY_LOCAL_MACHINE\SECURITY\Policy\PolPrDmN

  5. 在注册表编辑器的右侧窗格中,选择 “无名称:REG_NONE 注册表项一次”。

  6. “视图 ”菜单上,选择“ 显示二进制数据”。

  7. 对话框的“格式 ”部分中,选择 “字节”。

    域名显示为二进制数据对话框右侧的字符串。 域名与 Kerberos 领域相同。

  8. 在注册表中找到以下子项:
    HKEY_LOCAL_MACHINE\SECURITY\Policy\PolACDmN

  9. 在注册表编辑器的右侧窗格中,双击 “无名称:”REG_NONE 项。

  10. “二进制编辑器 ”对话框中,粘贴注册表子项中的 PolPrDmN 值。 (注册表子项中的值为 PolPrDmN NetBIOS 域名)。

  11. 重新启动域控制器。 如果域控制器无法正常运行,请参阅 其他方法

原因 11:源 DC 与目标 DC 之间存在 LAN 管理器兼容性(LM 兼容性)不匹配

原因 12:由于简单复制延迟或复制失败,服务主体名称未注册或不存在

原因 13:防病毒软件在源或目标 DC 上使用微型防火墙网络适配器筛选器驱动程序

详细信息

Active Directory 错误和事件(如“症状”部分所述的错误)也可能失败,错误 8453 以及类似于以下错误字符串的错误字符串:

复制访问被拒绝。

以下情况可能导致 Active Directory 操作失败,并出现错误 8453。 但是,这些情况不会导致错误 5 失败。

  • 复制目录更改权限不允许命名上下文 (NC) 头。
  • 启动复制的安全主体不是授予复制目录更改权限的组的成员。
  • 属性中 UserAccountControl 缺少标志。 这些标志包括 SERVER_TRUST_ACCOUNTTRUSTED_FOR_DELEGATION
  • 只读域控制器(RODC)未首先运行 ADPREP /RODCPREP 命令即可加入域。

来自“DCDIAG /TEST:CheckSecurityError”的示例输出

域控制器的示例输出 DCDIAG /CHECKSECURITYERROR 如下所示。 这是因为时间偏斜过长。

Doing primary tests  
Testing server: <Site_Name>\<Destination_DC_Name>  
Starting test: CheckSecurityError  
Source DC <Source DC> has possible security error (5). Diagnosing...  
Time skew error between client and 1 DCs! ERROR_ACCESS_DENIED or down machine recieved by:
<Source DC>  
Source DC <Source DC>_has possible security error (5). Diagnosing...  
Time skew error: 7205 seconds different between:.  
<Source DC>  
<Destination_DC>  
[<Source DC>] DsBindWithSpnEx() failed with error 5,  
Access is denied..  
Ignoring DC <Source DC> in the convergence test of object CN=<Destination_DC>,OU=Domain  Controllers,DC=<DomainName>,DC=com, because we cannot connect!  
......................... <Destination_DC> failed test CheckSecurityError  

示例输出 DCDIAG /CHECKSECURITYERROR 如下所示。 它显示缺少的 SPN 名称。 (输出可能因环境而异。

Doing primary tests  
Testing server: <site name>\<dc name>  
Test omitted by user request: Advertising  
Starting test: CheckSecurityError  
* Dr Auth: Beginning security errors check'  
Found KDC <KDC DC> for domain <DNS Name of AD domain> in site <site name>  
Checking machine account for DC <DC name> on DC <DC Name>  
* Missing SPN :LDAP/<hostname>.<DNS domain name>/<DNS domain name>  
* Missing SPN :LDAP/<hostname>.<DNS domain name>  
* Missing SPN :LDAP/<hostname>  
* Missing SPN :LDAP/<hostname>.<DNS domain name>/<NetBIOS domain name>  
* Missing SPN :LDAP/bba727ef-be4e-477d-9796-63b6cee3bSf.<forest root domain DN>  
* SPN found :E3514235-4B06-I1D1-ABØ4-00c04fc2dcd2/<NTDS Settings object GUID>/<forest root domain DNS name>  
* Missing SPN :HOST/<hostname>.<DNS domain name>/<DNS domain name>  
* SPN found :HOST/<hostname>.<DNS domain name>  
* SPN found :HOST/<hostname>  
* Missing SPN :HOST/<hostname>.<DNS domain name>/<NetBIOS domain name>  
* Missing SPN :GC/<hostname>.<DNS domain name>/<DNS domain name>
Unable to verify the machine account (<DN path for Dc machine account>) for <DC Name> on <DC name>.

数据收集

如果需要Microsoft支持方面的帮助,建议按照使用 TSS 收集 Active Directory 复制问题的信息中所述的步骤收集信息。