我公司目前正在将代码中的所有别名或 IP 引用替换为 FQDN。任何具有 IP 或计算机名称的内容都将被替换为 fileserver.example.com、databaseserver.example.com 等。
此过程适用于数据库连接、Web 服务引用、API 引用。我们遇到的问题是通过 UNC 路径进行文件共享访问。通过这样的 UNC 路径访问文件\\fileserver.example.com\path\to\files
不起作用在某些情况下。
这在某些情况下是这里的重点部分。
在以下情况下可以成功访问 UNC 路径
- 当通过 Windows 资源管理器使用 FQDN 路径手动查看时。
- 当运行访问文件的进程时,不使用 FQDN,而是使用计算机名称 (
\\COMPUTER_NAME\path\to\files
)。
在以下情况下无法访问 UNC 路径
- 当运行访问使用 FQDN () 的文件的进程时
\\fileserver.example.com\path\to\files
。
我收到以下错误消息。
Logon failure: unknown user name or bad password.
该错误消息让您相信这是一个访问问题,但我不认为是这样,因为运行该过程的服务用户可以使用路径中的 COMPUTER_NAME 访问该文件,并且该文件指向与 FQDN 相同的位置。
有人有遇到过这个问题吗?
FQDN 是否甚至应该用于通过 UNC 路径访问文件共享?
答案1
在阅读 Claytons 的帖子并查看事件查看器中的安全日志后,我们意识到只有当计算机尝试访问具有 UNC 路径的文件时才会出现此问题指向自己。
这让我想到环回检查在 microsoft.com 上的以下文章中有记录。 https://blogs.technet.microsoft.com/sharepoint_foxhole/2010/06/21/disableloopbackcheck-lets-do-it-the-right-way/
我们用了方法 1:指定主机名(如果需要 NTLM 身份验证,则为首选方法)
在注册表中禁用 DisableStrictNameChecking
在注册表中输入
fileserver.example.com
BackConnectionHostNames
答案2
当您使用短名称时,它会恢复使用 NTLM 身份验证。但是使用 FQDN 时,它必须使用 Kerberos 身份验证。问题是要使 Kerberos 正常工作,您需要一个 DNS 名称和一个您缺少的 SPN(服务主体名称)。您有 2 个选择:
选项 1:保留别名并通过在服务器上创建以下注册表项来禁用 Windows 的“严格名称检查”功能。还需要重新启动。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
DWORD name: DisableStrictNameChecking
DWORD value: 1
选项 2:删除别名,并通过 Windows 创建一个“备用”名称,该名称还将创建一个 Kerberos 服务主体名称,以便备用名称对于 Kerberos 身份验证有效。
NETDOM NEWNAME /ADD
将 NEWNAME 替换为您之前创建的别名的 FQDN。这应该从将为别名提供服务的实际服务器运行。
答案3
开始研究这个问题,因为它看起来很有趣。我开始在不同的环境中使用域的 FDQN 进行浏览(我在 MSP 工作,因此可以访问相当多的域)。
简而言之,我经历了一些我以前从未真正看到/注意到的事情。使用域的 FDQN 通过 Windows 资源管理器进行浏览将显示文件共享根文件夹,但没有其他内容。使用 IP/计算机名称进行浏览将显示相同的共享,并按应有的方式显示共享内的文件夹/文件。
谷歌搜索了一下,找到了这个
当我通过 UNC 浏览我的 Windows 域名时会发生什么?。
它确实部分回答了您的问题和原因,但并不完全符合您的问题。
我个人认为,通过 DFS 实现文件共享将允许您使用命名空间(类似于 FDQN 的概念),并且当引入退役\实现新的文件服务器时,这意味着您不需要重构代码来指向新的服务器名称文件服务器。
它还应该可以绕过您遇到的问题。
希望这可以帮助。
DFS 概述 https://en.wikipedia.org/wiki/Distributed_File_System_(Microsoft)