设置

设置

设置

我们有:

  • 一台在 Debian Buster 上运行 Samba 4 作为 AD DC 的机器。
  • 另一台运行 Samba 4 作为文件服务器的 Debian Buster 机器,加入域net join并使用 winbind 进行身份验证(我们称之为文件)。
  • 第三台 Debian Buster 机器运行 Samba 4,仅用于测试,同样加入了域(我们称之为测试)。
  • 第四台 Debian Buster 机器不是正在运行 Samba 并且未加入net join,但有一个带有随机密码的对应机器帐户,从中导出了几个 keytab 文件(我们称之为 PROD)。此帐户已为 GSSAPI 身份验证配置了 PostgreSQL。
  • 几台 Windows 10 Pro 机器加入了该域。
  • 一堆 Windows 10 家庭版笔记本电脑。在我测试的那台电脑上,我有一个本地帐户,其用户名和密码与我的域帐户相同。
  • Linux 客户端。

假设主域是 example.net(这仅是内部域)。kerberos 领域是 SAMBA.EXAMPLE.NET,旧式 Windows 域是 EXAMPLE。

example.net 区域位于 DNS 服务器上,因为我不想通过 Samba 管理所有 DNS 数据。它将 samba.example.net 委托给 DC。有一个 _kerberos.example.net TXT 记录包含“SAMBA.EXAMPLE.NET”。

所有 Debian 服务器都在 sshd_config 中启用了 GSSAPI 身份验证。

什么有效

  • 登录 Windows 10 Pro 机器上的域帐户,浏览 Samba 共享,使用 PuTTY 连接到所有 Debian 服务器,并连接到 PROD 上的 PostgreSQL(使用 psql 和 PgAdmin4),一切运行正常,无需再次输入密码,正如预期的那样。

  • 同样,我可以从我的 Linux 客户端获取所有相关服务的票证并进行连接,而无需输入密码。

什么不起作用

  • 在我的 Windows Home 笔记本电脑上,浏览 \TEST 和 \DC 我必须输入密码,但至少这是成功的。

  • 针对 TEST 和 PROD 的 GSSAPI 身份验证不起作用。

尽管如此有效

您可能会说,Windows 10 家庭版(或甚至 Windows 10 专业版,如果计算机未加入域)的 SSO 不起作用并不奇怪。令人惊讶的是,它确实适用于 FILE(浏览共享和使用 PuTTY 连接)!

进一步的调查

我可以运行klist get host/fileklist get host/file.example.net获取票证,但是当我运行时klist get host/test我收到错误 0x56(Kerberos 预认证失败),当我运行时klist get host/prod我收到 0x520;Windows 只是抱怨它没有凭据,甚至没有尝试联系 DC。

有一次,最后两个结果之间的区别似乎是 samba.example.net 区域中是否存在 A 记录,但在删除这两条记录并重新启动 Windows 10 家庭版计算机后,区别仍然存在。甚至似乎没有进行任何 DNS 查询(我反复刷新缓存,但也许 Workstation 服务或 LSA 中有一个单独的缓存?)

实际上,我似乎通过添加缺失的 IPv6 rDNS 记录成功让 \TEST 正常工作。但是,连接到 \DC 上的共享(netlogon 和 sysvol)需要很长时间的延迟,在此期间 Windows 会尝试解析搜索列表中所有域中的 _ldap._tcp.dc._msdcs.dc,但这可能是由于 DC 比较特殊,然后必须输入密码(Windows 显然会回退到不同的身份验证机制),klist get host/dc尽管所有 DNS 记录都已到位,但仍会导致错误 0x520。

我还修改了 PROD 的 IPv6 PTR 记录,使其指向 prod.example.net(它指向公共域名),但这没有帮助。此外,DNS 服务器已加入 AD 域并正确设置了 DNS 记录,但klist get它也出现了错误 0x520,两台 Windows 10 Pro 计算机也是如此。我应该提到 PROD 位于不同的 LAN 上;我想知道 Windows Home 是否可能只想识别通过 NetBIOS 和/或共享看到的计算机,但在当今时代肯定不可能出现这种情况?

我尝试启用 Kerberos 日志记录(https://support.microsoft.com/en-us/help/262177/how-to-enable-kerberos-event-logging),但我在事件日志中没有看到任何内容。

问题

为什么 Windows 10 Home 有时会使用现有凭据来检索 Kerberos 票证,有时会断然拒绝?

相关内容