Windows 共享文件夹为什么时好时坏——排查 Kerberos、NTLM 与凭据问题

· 更新日期: · · Windows, SMB, Kerberos, NTLM, 共享文件夹, 故障排查

“昨天还能打开。”“文件资源管理器能打开,应用却失败。”“重启后又好了。”当每次尝试看上去都相同时,共享文件夹问题反而更难排查。

即使以为每次打开的都是同一个共享文件夹,只要目标名称、执行账户或已有连接不同,Windows 执行的处理就可能不同。找出这些差异,是调查的起点。

本文汇总了检查命令、结果的解读方式和下一步调查方向,而不是仅凭症状断定原因。Kerberos 和 NTLM 协议本身的机制见 NTLM 与 Kerberos 详解,应用设计方面见网络驱动器与 UNC 路径的常见问题

1. 先看结论与症状索引

排查顺序是:能否到达 → 以谁的身份连接 → 采用什么身份验证与保护条件 → 该身份是否有权执行目标操作。对成功和失败的尝试,按相同格式记录这些条件。症状只是入口,不是已经确认的原因。

症状 首先检查 对应章节
名称与 IP 的结果不同 实际目标 IP,以及依赖名称的身份验证条件 通信Kerberos
只有文件资源管理器成功 应用的执行身份、会话与操作 执行条件
看起来不需要密码 共享服务器实际接受的账户 凭据
换用户连接失败或出现 1219 到同一服务器的已有连接 连接冲突
重启或注销后恢复 变更前后的状态差异 重启
更新后、部分 PC 或 NAS 才失败 签名、来宾与 NTLM 的实际生效设置 保护条件
能打开但不能保存 目标操作的权限与原始错误 权限与应用
从症状转向证据的诊断流程根据症状选择候选原因,比较成功与失败时的证据,再决定处理方法。选择症状比较成功与失败通过日志缩小范围逐项处理并复测

图1:用症状确定调查入口,检查证据后再决定处理方法。

本文适用于 Windows 11 与 Windows Server 的 SMB 2/3 共享,以及普通的 TCP 445 连接。PowerShell 示例以 Windows PowerShell 5.1 为前提。这是一篇面向管理员和开发者的中级文章,但没有共享服务器管理权限的读者,也可以先收集客户端信息。

请区分 AD 域、工作组内的 Windows 共享以及 NAS 自有账户。本文讨论常见的 AD Kerberos 和传统本地账户配置,不涵盖 SMB over QUIC、Azure Files 特有的身份验证,也不讨论 IAKerb、LocalKDC 的具体配置。使用 DFS 时,还应记录最终目标服务器。设置与默认值依据截至 2026 年 9 月 8 日已核实的官方资料;实际配置优先于根据操作系统名称作出的推测。

首先确认共享服务器被配置为接受哪类账户。 AD 用于集中管理组织账户,本地账户则由各台 PC 分别持有。NAS 既可以使用自有账户,也可以加入 AD。不要仅凭产品名称或所在位置,认定“公司局域网就用 Kerberos”或“NAS 就用 NTLM”;应向管理员确认身份验证配置。123

登录共享所用的账户 优先调查方向
AD 域账户 检查通信后,确认名称、SPN 和票据,以及身份验证日志
Windows 共享服务器的本地账户 先看使用的凭据与空密码已有连接保护条件
NAS 自有账户 检查 NAS 的账户设置、身份验证日志,以及来宾、签名和 NTLM 限制
不清楚是哪种 保存客户端记录,并确认服务器实际接受的账户

“PC 是否加入域”和“本次使用了哪些凭据”也是两回事。下文中,CORP\alice 是域账户的示例,FILESRV01\alice 是共享服务器本地账户的示例。即使自己的 PC 上存在同名用户,也不代表该用户在共享服务器上具有相同权限。45

图中实线表示始终成立的关系,虚线表示带条件的关系(成立条件写在详情页各关系的说明中)。关系的完整列表(共 19 条,附依据与确信度)以及主要概念的定义,汇总在知识地图详情页(日文)。数据:JSON-LD / Turtle

2. 把“无法连接”拆成不同阶段

打开文件之前,需要建立通信、协商 SMB 条件、验证会话身份、连接共享,再执行文件操作。身份验证成功并不代表拥有共享或文件的访问权限。此外,“找不到网络路径”也可能与来宾连接被拒绝有关。不要仅凭显示的错误文字就断定是 DNS 故障。67

打开共享文件之前的各个阶段通信、SMB 条件协商、身份验证、共享连接和文件操作都可能分别失败。名称解析与 TCP 连接协商 SMB 条件SESSION_SETUP:身份验证TREE_CONNECT:连接共享CREATE 等文件操作

图2:前一个阶段成功,不能证明下一个阶段也会成功。

这里的“成功”是指能够对目标文件执行目标操作。在文件资源管理器的“网络”中看到 PC 名称、看到共享列表、读取某个文件,并不等价。排查时应记录实际失败的 UNC 路径和操作,而不是只看列表是否显示。

3. 重启或修改设置前,先保留记录

一开始就删除连接或票据,会丢失原本需要比较的状态。首先在客户端记录时间、UNC 路径、用户、操作系统及已有连接。下面的命令用于查看状态。排查服务故障时,不能把这个交互式终端的结果当成服务自身的结果。489

Get-Date -Format o
whoami /user
whoami /groups
Get-CimInstance Win32_OperatingSystem |
    Select-Object Caption, Version, BuildNumber
net use
cmdkey /list
klist

如果终端有查询 SMB 连接的权限,再收集以下信息。若被拒绝访问,应记录为“无法查询”,而不是“没有连接”。使用管理员身份重新收集的结果,需要明确标记执行条件。未经说明就把整个调查切换为提升权限的环境,会改变正在比较的登录会话。410

Get-SmbConnection | Format-List *
记录 能说明什么 单凭它不能说明什么
whoami 该命令在本地的执行身份 共享服务器接受的账户
net use 当前上下文可见的共享连接与映射 其他会话的连接状态
cmdkey /list 哪些目标保存了凭据 本次是否使用了这些凭据
Get-SmbConnection 已建立的连接、凭据等属性 连接失败的完整过程或最终使用的身份验证协议
klist 目标登录会话持有的票据 本次 SMB 连接实际使用的身份验证协议

查看 Get-SmbConnection 时,除了 UserName,也要检查 Credential。本地登录身份与连接共享所用的凭据可能不同。并排比较成功与失败时的 ServerNameShareNameUserNameCredential,有助于确认比较的是否为同一连接。4

已保存的信息与正在使用的状态分别观察已保存的凭据、SMB 连接和 Kerberos 票据。在同一时间记录已保存的凭据已建立的 SMB 连接票据缓存结合日志确认实际使用情况

图3:区分已保存的内容与问题连接实际使用的内容。

这些输出包含用户名、内部服务器名、IP 地址等信息。应限制记录的访问范围,对外提供时进行匿名化,同时保留比较所需的对应关系。无需公开密码、哈希或票据本身。

4. 先检查名称解析与 TCP 445

下面是在客户端执行的主动通信测试。请把服务器名替换为实际使用的连接名称,分别记录名称解析与 TCP 连接结果。11

$Server = 'filesrv01.corp.example.com'
Resolve-DnsName -Name $Server
Test-NetConnection -ComputerName $Server -Port 445 -InformationLevel Detailed

如果 TcpTestSucceededFalse,此时应优先调查身份验证之前的可达性。检查目标 IP、VPN 与路由、客户端和服务器的防火墙,以及服务器是否监听。ping 的成败不等于 TCP 445 的成败。反过来,TCP 成功也不能证明共享名、身份验证、签名和权限均无问题。11

如何解读 TCP 连接测试TCP 445 失败时调查可达性,成功后继续检查 SMB 及后续阶段。测试 TCP 445是否成功检查目标、路由与阻断检查 SMB、身份验证与权限

图4:TCP 成功不是身份验证成功,只能说明可以继续检查下一阶段。

如果名称与 IP 的行为不同,比较 RemoteAddress 和名称解析结果。短名称、FQDN、别名不一定到达同一个 IP。即使 IP 相同,下一节的身份验证条件仍需单独检查。通过换名称“修好”时,也要记录具体改变了什么。

5. 名称与 IP 结果不同时,检查 Kerberos 前提

5.1. 同一个 IP 不代表同一种身份验证

默认情况下,Windows 不会在目标名称为 IP 地址时尝试 Kerberos。虽然可以通过 TryIPSPN 和基于 IP 的 SPN 配置例外,但本文的常规处理方向是建立正确的 DNS 名称与服务身份对应关系。IP 访问成功可以帮助比较名称解析、身份验证和已有连接,却不能证明这就是长期解决方案。12

连接名称会改变身份验证条件使用主机名时检查对应的 Kerberos 服务名称条件,使用 IP 时考虑默认不尝试 Kerberos 的行为。UNC 中的目标写法主机名或 FQDNIP 地址检查名称对应的 SPN默认不尝试 Kerberos

图5:即使指向同一设备,连接名称改变后,身份验证条件也会改变。

Kerberos 使用称为 SPN 的服务标识请求票据。DNS 别名能够解析,与能否正确验证该别名对应的服务,是两回事。另外,并不是所有 Kerberos 失败都会回退到 NTLM。应根据实际日志区分能否回退、身份验证错误,以及 NTLM 是否受到限制。131

5.2. 区分取得票据与服务器接受票据

在 AD 环境中,管理员需要调查连接所用名称的 SPN 注册对象。以下是可查询 AD 的管理终端上的只读查询示例。执行前确认具备查询权限与所需管理工具。14

setspn -Q cifs/filesrv01.corp.example.com
setspn -Q HOST/filesrv01.corp.example.com

不能仅因没有显式注册 cifs/... 就断定缺少 SPN。对于计算机账户,HOST SPN 可以替代 cifs 等服务类。反过来,即使存在注册,也可能注册到了并非实际服务身份的账户,或者存在重复注册。应由 AD 管理员确认归属后修改,不能因为没查到就机械地添加。14

SPN 与票据检查的证明范围SPN 解析、取得票据以及共享服务器接受票据是三个不同的检查。SPN 归属与 HOST 替代能否取得票据实际 SMB 身份验证是否接受关联服务器端日志

图6:能够取得票据,不代表共享服务器一定会接受它。

必要时,保存原始状态后再尝试 klist get cifs/filesrv01.corp.example.com。这会请求新票据并改变缓存,属于主动测试。若失败,调查 DC 可达性、时间同步、名称与 SPN;即使成功,也不保证 SMB 访问成功。不要把交互式用户的票据结果套用到服务中发生的问题上。81

对于没有域的 NAS 或本地账户身份验证,应先确认共享支持的协议和账户设置,而不是先修复 AD SPN。即使环境启用了更新的身份验证功能,也应以连接记录为准,不根据产品名推测协议。

6. 文件资源管理器能打开,应用却打不开

6.1. 不能只凭用户名相同就认为条件一致

需要比较执行账户、登录会话、是否提升权限、UNC 路径及操作。服务即使配置为同一用户账户,也会在不同于交互式登录的会话中运行。驱动器号映射同样属于各自的登录会话,因此先区分 Z:\data\\server\share\data。改用 UNC 是解决驱动器号问题的方法,并不会同时赋予身份验证能力或访问权限。10

文件资源管理器与服务的区别即使在同一台 PC 上,也应分别比较交互式登录和服务的会话与凭据。同一台 PC交互式登录服务登录该会话的连接与权限另一会话的连接与权限

图7:同一台 PC、同一个用户名,不代表共享相同的连接状态。

让失败的应用记录进程 ID、执行身份、权限提升状态、实际路径、操作名、原始异常与错误码。使用模拟身份时,还应记录执行该操作的线程的有效身份。不能因为管理员 PowerShell 可以打开共享,就结束对服务的调查。

6.2. 服务账户与任务的登录方式

服务使用默认凭据时,LocalSystem 会向网络目标提供计算机凭据,LocalService 则提供匿名凭据。域环境中要允许 LocalSystem 访问共享,应关注计算机账户等实际使用身份的权限,而不是交互式用户的权限。若实现使用显式凭据或模拟身份,则需另外确认这些条件。1516

本地权限与远程身份使用默认网络凭据时,LocalSystem 与 LocalService 提供的身份不同。服务的默认凭据LocalSystemLocalService计算机凭据匿名凭据

图8:本地权限很高,不代表共享服务器会把服务当成交互式用户。

在任务计划程序中,除账户名外还要检查登录方式。TASK_LOGON_S4U 不保存密码,也不提供对网络或加密文件的访问能力。不要把选择“不存储密码”的任务视为与普通交互式登录条件相同。业务处理应使用合适的服务账户、登录方式和最小权限,不应依赖每次先在文件资源管理器中打开共享。17

7. 把“无需密码即可访问”分成四种情况

没有输入提示不等于未经身份验证。连接可能使用当前登录凭据、已保存的凭据或已经建立的 SMB 会话。仅在 cmdkey /list 中看到条目,也不能证明实际使用了它。49

表面现象 需要确认的实际情况
没有输入密码 是否通过登录凭据或已保存的凭据完成了身份验证
以前验证过,这次没有再询问 是否复用了已有 SMB 会话
共享服务器的本地账户没有密码 是否适用空密码限制
共享服务器以来宾身份接受连接 来宾访问是否满足签名与加密条件
没有密码提示意味着什么不根据输入提示判断是否未经验证,而是区分凭据、已有会话、空密码账户和来宾。没有显示密码输入界面确认实际接受的身份凭据或已有会话空密码账户来宾

图9:界面看上去相同,背后的身份验证机制却可能完全不同。

共享服务器运行 Windows,且在该服务器上启用了“使用空密码的本地账户只允许进行控制台登录”策略时,会限制空密码本地账户的普通网络登录。这与允许来宾的设置是两回事。遇到“用户没有密码,但以前能连接”的说法,应先在服务器上核实:之前是否真的用该账户完成了身份验证。不要首先禁用限制,应考虑使用具有密码且权限合适的共享访问账户。23

如果有 Windows 共享服务器的管理权限,应在访问仍然成功时,在该服务器的管理员 PowerShell 中执行以下查询。不要混淆在客户端运行的 Get-SmbConnection 和在接受连接的服务器端运行的 Get-SmbSession18

Get-SmbSession |
    Select-Object SessionId, ClientComputerName, ClientUserName, NumOpens

根据 ClientComputerName 和尝试时间寻找目标会话,再检查 ClientUserName。这显示的是当前已建立的 SMB 会话,不能说明过去连接失败的原因,也不能判断使用的是 Kerberos 还是 NTLM。同一客户端存在多个会话时,还要关联应用操作时间和 SMB 专用记录。如果连接已经断开,转到第12节的日志检查18

8. 1219 与更换用户后无法重新连接

错误 1219 表示到同一服务器的多个连接使用不同用户名而产生冲突。即使共享名不同,到该服务器的已有连接仍可能相关。先用 net useGet-SmbConnection 检查目标服务器的连接,在更换凭据前确认打开的文件及正在使用连接的应用。1920

不同共享之间也会发生凭据冲突在同一连接上下文中,以另一用户新增到同一服务器的连接,即使共享名不同也可能冲突。已以用户 A 连接服务器以用户 B 连接另一共享凭据冲突:1219按服务器检查已有连接

图10:不仅要看共享名,还要看目标服务器与使用凭据的组合。

以下操作会改变连接状态。只有在停止使用目标并获得影响范围的批准后,才针对已经确认的具体连接执行断开与重连。请替换示例中的服务器名、共享名和账户名。* 表示通过交互提示输入密码,不要把密码写在命令行中。5

net use "\\filesrv01.corp.example.com\data" /delete
net use "\\filesrv01.corp.example.com\data" /user:CORP\alice * /persistent:no

断开一个共享后,同一服务器上仍可能有其他共享或其他用途的连接。再次查看列表,仅清理目标服务器上必要范围内的连接。不应默认执行 net use * /delete,也不应长期依靠别名或 IP 绕开冲突。处理后,要确认原应用能够使用预期凭据连接。

9. 重启后恢复时,追查究竟改变了什么

重启会改变多个状态,因此仅凭恢复正常的结果,无法反推出唯一原因。下表是调查时的比较维度,并不保证某项操作一定只重置表中所列范围。489

操作或信息 比较时应注意
重启应用 应用状态改变,但操作系统的共享连接可能仍然存在
断开并重连目标共享 检查是否重新建立连接并验证身份,以及其他连接是否仍在
注销或重启操作系统 会话、应用、网络等多个条件同时变化
已保存的凭据 与已建立的连接不同,通常不会仅因操作系统重启就被删除
如何理解重启后的恢复重启会同时改变多个条件,因此恢复正常本身无法确定唯一原因。重启后恢复应用状态连接与登录状态网络等状态需要变更前后的证据

图11:重启可以是恢复手段,但不自动构成原因的证明。

例如,假设成功时已经存在以另一账户建立的 SMB 连接,而失败时需要重新验证身份。这个假设案例中,要调查的是非预期凭据与新身份验证失败的原因,而不是重启本身。对成功和失败两种情况统一记录时间、连接名、执行条件及接受的账户,下一步检查就会更明确。

即使急需通过重启恢复服务,也应尽可能先保存第3节的输出和原始错误。重启后,先在原应用中执行相同操作,不要先用文件资源管理器打开共享。中间插入其他操作,会让人难以区分究竟是重启恢复了访问,还是该操作改变了连接条件。这不是禁止重启,而是兼顾恢复与原因调查的记录步骤。

klist purge 会删除票据,是改变状态的操作。对于没有使用 Kerberos 的连接,它并不针对问题,也可能影响同一登录会话中的其他服务。不要在保存证据前“先清空再说”。8

10. 更新后或只有部分 PC 失败

10.1. 不要混淆签名、来宾与 NTLM 阻止策略

SMB 签名用于检测通信内容是否被篡改,与采用 Kerberos 还是 NTLM 的身份验证协议属于不同设置。Microsoft 的 SMB 签名专用指南说明,Windows 11 24H2 的 Pro、Enterprise、Education 默认要求入站和出站签名,Windows Server 2025 默认要求出站签名。不仅要看操作系统名称,还要确认版本和实际生效配置。7

对于 Home,该指南说明不要求签名,但 Windows 11 24H2 的变更列表又将 Home 列入默认要求签名的版本,资料之间存在差异。本文不会因为系统是 Home 就排除签名问题,而是通过下面的命令检查调查对象的实际设置。721

分别检查 SMB 的保护条件身份验证协议、SMB 签名与来宾访问不是同一设置,需要分别确认。检查实际生效的策略Kerberos 与 NTLM 是否允许是否要求 SMB 签名是否允许来宾连接

图12:检查了一个设置,不代表其余条件也已经满足。

来宾连接不支持普通的 SMB 签名与加密。因此,只修改来宾许可,而签名要求仍然存在时,问题可能不会解决。应优先让 NAS 使用经过身份验证的账户并支持签名,不要轻率地以禁用签名或安装 SMB1 作为绕过方法。3

10.2. 看实际配置,而不是只看默认值

在客户端的管理员 PowerShell 中收集以下信息。这是在读取配置,应与交互式用户的连接状态记录分开。722

$config = Get-SmbClientConfiguration
$config | Format-List RequireSecuritySignature, EnableInsecureGuestLogons
if ($config.PSObject.Properties['BlockNTLM']) {
    $config | Format-List BlockNTLM
} else {
    'BlockNTLM property is not exposed on this system.'
}

RequireSecuritySignature: False 表示“不强制要求”,不能证明所有连接都不使用签名。较旧系统没有显示 BlockNTLM,也不能证明没有其他 NTLM 限制策略。SMB 客户端的 NTLM 阻止功能从 Windows 11 24H2/Windows Server 2025 起提供,也可以为单个共享连接指定。因此,除了全局设置,还要检查应用的连接选项与组织策略。722

连接条件不只由全局设置决定除了操作系统默认值,还要检查组织策略、连接选项及服务器端条件。操作系统与版本的默认值实际连接条件组织策略与连接选项共享服务器的支持条件从日志确认拒绝原因

图13:时间上与更新重合只是线索,应根据实际设置和拒绝日志作出判断。

“NTLM 弃用”“移除 NTLMv1”“通过策略拒绝 NTLM”并不是同一件事。协议迁移与组织级审计请参阅 NTLM 退役的审计与迁移步骤,本文集中确认本次连接被哪个条件拒绝。

11. 身份验证成功,却无法打开或保存

Windows 共享需要同时检查共享权限,以及实际文件夹和文件的权限。对于同一身份执行的同一操作,两处都必须允许。还要确认组成员身份、拒绝条目和继承关系,不能认为“添加了 Everyone 就一定全部能访问”。检查有效访问权限时,应使用服务器上的实际存储路径,以及服务器真正接受的身份。23

身份验证与访问授权的区别即使身份验证成功,共享权限和文件权限也都必须允许目标操作。已验证的身份共享访问权限实际文件的访问权限执行目标操作

图14:确认是谁,与判断允许做什么,是两道不同的检查。

列出文件夹、读取文件、新建、覆盖、重命名和删除是不同操作。有些应用保存时先创建临时文件再替换原文件,仅证明“能够读取”是不够的。除了身份验证与权限,还应根据原始错误调查共享冲突、容量、路径或文件被删除等问题。24

.NET 的 File.Exists 在权限不足等情况下也会返回 false。检查应用显示的“文件不存在”是否仅依据该返回值生成。诊断代码同样应记录实际目标操作抛出的异常。25

$Path = '\\filesrv01.corp.example.com\data\sample.txt'
try {
    Get-Item -LiteralPath $Path -ErrorAction Stop |
        Select-Object FullName, Length, LastWriteTime
} catch {
    $_.Exception.GetType().FullName
    'HRESULT=0x{0:X8}' -f $_.Exception.HResult
    $_.Exception.Message
}

这只验证能否读取元数据,并不能证明能够读取或写入文件内容。测试实际读写时,应在确认授权和影响范围后,使用测试文件复现目标操作。不要把所有错误都转换成“文件不存在”,这样也有利于下次排查。

12. 关联日志,缩小原因范围

12.1. 区分客户端、共享服务器与 DC

在客户端,检查事件查看器中的 Microsoft-Windows-SMBClient/ConnectivityMicrosoft-Windows-SMBClient/Security。在 Windows 共享服务器上,如果已启用审计,Security 日志的 4624(登录成功)和 4625(登录失败)可提供线索。对于 SMB 网络登录,检查登录类型 3。NAS 则使用产品自己的身份验证与共享日志。262728

事件 4624 的登录类型 3 并非 SMB 专用。即使时间、来源和账户一致,该事件本身也不能标识共享名或 SMB 会话。应结合 Get-SmbConnection、SMB 专用日志,以及必要时的跟踪记录进行关联。27426

关联三个位置的日志按时间与连接信息关联客户端、共享服务器,以及必要时的 DC 日志。客户端:SMBClient 日志关联时间、来源与账户共享服务器:身份验证日志DC:票据与凭据验证作为同一次尝试的证据读取

图15:不对齐位置与时间,容易把另一条连接的日志误认为故障原因。

以下示例应在 Windows 共享服务器上,以有权读取 Security 日志的身份执行。在目标尝试前记录时间,并请管理员确认所需的成功与失败审计已经启用。示例提取最近十分钟的记录,通过 XML 字段名取值,而不是依赖已翻译的消息文本或字段位置。2728

$Start = (Get-Date).AddMinutes(-10)
Get-WinEvent -FilterHashtable @{
    LogName = 'Security'; Id = 4624, 4625; StartTime = $Start
} -ErrorAction Stop | ForEach-Object {
    $event = $_
    $xml = [xml]$event.ToXml()
    $fields = @{}
    foreach ($item in $xml.Event.EventData.Data) {
        $fields[$item.Name] = [string]$item.'#text'
    }
    if ($fields['LogonType'] -eq '3') {
        [pscustomobject]@{
            Time = $event.TimeCreated
            EventId = $event.Id
            User = $fields['TargetUserName']
            Domain = $fields['TargetDomainName']
            SourceIp = $fields['IpAddress']
            Authentication = $fields['AuthenticationPackageName']
            Status = $fields['Status']
            SubStatus = $fields['SubStatus']
            LogonId = $fields['TargetLogonId']
        }
    }
} | Format-List

对于 4624,应读取新登录的目标账户,不要与报告该事件的 Subject 混淆。4625 中的目标用户名是尝试使用的名称,不是已经接受的身份。结合 StatusSubStatus 判断失败原因。如果 AuthenticationPackageName 只显示 Negotiate,不能仅凭这一项确定使用了 Kerberos 还是 NTLM。2728

12.2. 没有日志,或只有票据时怎么办

找不到事件并不能证明没有发生身份验证。应检查是否启用审计、是否有读取权限、时钟是否一致、是否查看了正确服务器、是否复用已有会话,以及是否在身份验证前就失败。复用已有 SMB 连接时,并不会每打开一次文件就生成一条新的 4624。274

没有日志时如何判断事件缺失时应检查收集条件和已有会话,不要立即判断为没有身份验证。没有匹配的事件审计、权限、时间与目标复用已有会话在身份验证前失败

图16:没有记录,与该操作从未发生,不是同一回事。

在 AD 环境中,DC 的 4769 可用于确认 Kerberos 服务票据请求,4776 可用于确认 NTLM 凭据验证。但签发票据不能证明共享服务器使用或接受了它,仅有 4776 也不能确定目标服务就是 SMB。需要关联时间、来源、目标账户与共享服务器记录;若仍有不明确之处,再由管理员进行范围受控的跟踪采集。2930

13. 处理后,确认能够稳定运行

每次只做一项处理,并记录变更理由及前后证据。名称错误就修正名称与目标;凭据不同就统一为预期账户;不支持签名就完善共享服务器的支持。没有查明原因便批量禁用保护功能,并不能建立可靠的运行方式。

从单次成功到验证是否复发完成一项处理后,按原来的失败条件以及重新连接条件验证结果。能说明原因的记录一项针对性处理验证原应用与原操作重连与重启后再次验证保留前后差异与结果

图17:应验证原来的失败条件已经成功,而不是只确认文件资源管理器曾打开过一次。

调查记录 应保留的内容
环境 客户端与共享服务器的操作系统、版本、内部版本号,以及 AD 或 NAS 自有身份验证
复现条件 时间与时区、UNC、目标 IP、应用、身份、权限提升状态、操作
证据 原始错误、已有连接、使用的凭据、相关事件
处理 一项变更、理由、影响范围、回退方法
验证 相同操作的结果,以及必要时注销、重启、VPN 重连后的结果

本文无法唯一确定所有实现或网络配置的故障原因。不过,只要知道在哪个阶段失败、哪些条件与成功时不同,以及哪些信息仍未核实,下一步调查就能具体起来。不要停留在“重启就好了”,而要确认预期身份确实能通过预期路径连接。

参考链接

  1. Microsoft Learn, Kerberos authentication troubleshooting guidance. 检查名称、时间、DC 和错误。  2 3

  2. Microsoft Learn, Accounts: Limit local account use of blank passwords to console logon only. 限制空密码本地账户的策略。  2

  3. Microsoft Learn, Insecure guest logons in SMB2 and SMB3. 来宾连接及签名、加密的限制。  2 3

  4. Microsoft Learn, Get-SmbConnection. 查询已建立的 SMB 连接与凭据。  2 3 4 5 6 7 8

  5. Microsoft Learn, Net use. 删除指定连接与交互式密码输入。  2

  6. Microsoft Learn, SMB troubleshooting guidance. SMB 通信与故障调查的入口。 

  7. Microsoft Learn, Control SMB signing behavior. 各操作系统及版本的默认值与签名要求。  2 3 4 5

  8. Microsoft Learn, klist. 显示、获取与删除票据是不同操作。  2 3 4

  9. Microsoft Learn, cmdkey. 管理已保存的凭据。  2 3

  10. Microsoft Learn, Services and Redirected Drives / Mapped drives are not available from an elevated prompt. 服务及提升权限时的登录会话与驱动器映射。  2

  11. Microsoft Learn, Test-NetConnection. 诊断 TCP 端口与连接目标。  2

  12. Microsoft Learn, Configuring Kerberos over IP. IP 目标的默认行为与例外配置。 

  13. Microsoft Learn, Service principal names. 用于标识服务的 SPN。 

  14. Microsoft Learn, setspn. SPN 查询与 HOST 对服务类的替代。  2

  15. Microsoft Learn, LocalSystem Account. 向远程服务器提供计算机凭据。 

  16. Microsoft Learn, LocalService Account. 网络上的匿名凭据。 

  17. Microsoft Learn, TASK_LOGON_TYPE enumeration. S4U 登录的网络访问限制。 

  18. Microsoft Learn, Get-SmbSession. 在共享服务器上查询已建立的 SMB 会话与客户端账户。  2

  19. Microsoft Learn, System Error Codes (1000–1299). ERROR_SESSION_CREDENTIAL_CONFLICT 的定义。 

  20. Microsoft Learn, Cannot use different credentials for a network share. 使用不同凭据连接同一服务器的问题。 

  21. Microsoft Learn, What’s new in Windows 11, version 24H2 for IT pros. SMB 签名默认要求的变更列表。注意其中关于 Home 的说明与 SMB 签名专用指南存在差异。 

  22. Microsoft Learn, Block NTLM connections on SMB. 全局与单个连接的 NTLM 阻止设置。  2

  23. Microsoft Learn, Access control overview. 身份、访问权限、继承与有效访问权限。 Microsoft Learn, SMB share and NTFS permissions

  24. Microsoft Learn, File Security and Access Rights. 不同文件操作所需的访问权限。 

  25. Microsoft Learn, File.Exists. 访问失败时也可能返回 false 的行为。 

  26. Microsoft Learn, SMB troubleshooting guidance. SMB 事件日志与进一步调查。  2

  27. Microsoft Learn, 4624: An account was successfully logged on. 新登录与身份验证包的记录。  2 3 4 5

  28. Microsoft Learn, 4625: An account failed to log on. 尝试使用的账户、Status 与 SubStatus。  2 3

  29. Microsoft Learn, 4769: A Kerberos service ticket was requested. DC 上的服务票据请求记录。 

  30. Microsoft Learn, 4776: The computer attempted to validate the credentials for an account. NTLM 凭据验证记录。 

共享相同标签的最新文章。可以围绕相近的主题进一步加深理解。

与本文相近的主题页面。以本文为起点,可以进一步了解相关服务和其他文章。

本文与以下服务页面相关联,欢迎从最接近的入口查看。

常见问题

汇总了咨询这一主题时常见的问题。

重启后能访问共享文件夹了,是否说明原因就是缓存?
仅凭这一点无法确定。重启会同时改变应用、登录会话、SMB 连接和网络状态等条件。重启前应记录目标、执行身份、已有连接、票据和错误,再与成功时比较。已保存的凭据和已建立的 SMB 连接不是同一回事。
为什么用 IP 地址能打开共享,用服务器名却不行?
先确认两种写法是否到达同一个目标 IP。即使 IP 相同,身份验证条件也不同:默认情况下,Windows 不会对 IP 地址目标尝试 Kerberos。应分别排查名称解析、SPN 和身份验证问题,不能把通过 IP 访问成功直接当作长期解决方案。
为什么文件资源管理器能打开共享,应用却打不开?
执行账户、登录会话、权限提升状态、使用的凭据或执行的操作可能不同。服务与交互式登录运行在不同会话中。用户名相同并不代表条件相同,应检查失败进程本身的信息以及服务器端的身份验证记录。
访问共享时没有输入密码,是否就是来宾连接?
仅凭没有密码提示无法判断。连接可能使用当前登录凭据、已保存的凭据或已有 SMB 连接。空密码本地账户与来宾连接也不是同一回事,需要确认共享服务器实际接受了哪个账户。
klist 中存在 cifs 票据,就能说明 SMB 使用了 Kerberos 吗?
持有票据与在当前 SMB 连接中使用该票据是两回事。需要按连接时间、来源和账户关联服务器日志。klist get 会发起新的票据请求,并不是只观察原有状态的命令。

作者简介

本文作者的个人简介页面。

Go Komura

小村软件有限公司 代表

以 Windows 软件开发、技术咨询与故障排查为中心,擅长难以复现的故障调查,以及既有资产仍在运行的项目。

返回博客列表