使用 Samba 排除 Kerberos 故障

使用 Samba 排除 Kerberos 故障

我在使用 Samba 3.6.23 时遇到了一个奇怪的问题。目前我有一台 Windows 2008 R2 机器,无法访问域内 Samba 盒上的共享。

  • \\example_serv\my_share:登录失败
  • \\172.16.102.19\我的共享:工作得很好。

当我将 smbd 设置为调试日志记录时,我得到了以下信息:

[2015/03/23 17:33:03.306499,  3] smbd/sesssetup.c:662(reply_spnego_negotiate)
  reply_spnego_negotiate: Got secblob of size 1840
[2015/03/23 17:33:03.306939, 10] libads/kerberos_verify.c:386(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:386: found previous password
[2015/03/23 17:33:03.315587, 10] libads/kerberos_verify.c:435(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:435: enc type [18] failed to decrypt with error Bad encryption type
[2015/03/23 17:33:03.319930, 10] libads/kerberos_verify.c:435(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:435: enc type [17] failed to decrypt with error Bad encryption type
[2015/03/23 17:33:03.320027,  3] libads/kerberos_verify.c:435(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:435: enc type [23] failed to decrypt with error Decrypt integrity check failed
[2015/03/23 17:33:03.320101, 10] libads/kerberos_verify.c:435(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:435: enc type [1] failed to decrypt with error Bad encryption type
[2015/03/23 17:33:03.320162, 10] libads/kerberos_verify.c:435(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:435: enc type [3] failed to decrypt with error Bad encryption type
[2015/03/23 17:33:03.328693, 10] libads/kerberos_verify.c:435(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:435: enc type [18] failed to decrypt with error Bad encryption type
[2015/03/23 17:33:03.332985, 10] libads/kerberos_verify.c:435(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:435: enc type [17] failed to decrypt with error Bad encryption type
[2015/03/23 17:33:03.333065,  3] libads/kerberos_verify.c:435(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:435: enc type [23] failed to decrypt with error Decrypt integrity check failed
[2015/03/23 17:33:03.333128, 10] libads/kerberos_verify.c:435(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:435: enc type [1] failed to decrypt with error Bad encryption type
[2015/03/23 17:33:03.333192, 10] libads/kerberos_verify.c:435(ads_secrets_verify_ticket)
  libads/kerberos_verify.c:435: enc type [3] failed to decrypt with error Bad encryption type
[2015/03/23 17:33:03.333234,  3] libads/kerberos_verify.c:638(ads_verify_ticket)
  libads/kerberos_verify.c:638: krb5_rd_req with auth failed (Bad encryption type)
[2015/03/23 17:33:03.333264, 10] libads/kerberos_verify.c:648(ads_verify_ticket)
  libads/kerberos_verify.c:648: returning error NT_STATUS_LOGON_FAILURE

这足以让我想到一些与 kerberos 相关的东西。因此我进行了一些 tcpdumping,并了解到针对计算机名称和仅 ip 样式协商了不同的登录方法。当通过计算机名称访问时,它会尝试 kerberos 登录并失败。当通过 IP 地址访问时,它会尝试 NTLMv2,这很有效。

有趣的是,Win 2008 R2 机器位于 Samba 服务器所在域的子域中。但是,我有很多子域中的机器正确访问 Samba 机器的示例。

令人困惑的是,我在另一个 AD 站点上有一个相同配置的 samba 系统(testparm显示相同的[global]设置),该系统在这台机器上运行良好。

我不知道下一步该去哪儿。

  • 这两个站点的 AD DC 有什么奇怪吗?
  • 我没看到的模糊的 Samba 设置?

我不知道接下来该去哪里。

答案1

我目睹了同样的行为,这是由于运行 samba 的服务器重新加入域后,AD(Active Directory)不同步所导致的。

看完之后https://en.wikipedia.org/wiki/Kerberos_(协议)我得出的结论是,该错误意味着 samba(服务)无法解密从客户端收到的“客户端到服务”Kerberos 票证,因为在我的情况下,它是由服务的旧密钥编码的。根据维基百科,服务密钥是存储在 AD 中的服务密码的哈希值。重新加入域会生成新密码。在此更改传播到其他 AD 之前,客户端会从其 TGS(在非同步 AD 上运行)接收用旧服务密钥编码的票证。

相关内容