Windows 7 Samba 问题

Windows 7 Samba 问题

我们遇到了一个奇怪的 Samba 问题,仅影响一个用户。我们的 Samba 设置如下:

Red Hat Enterprise Linux Server 版本 5.4 (Tikanga) - Samba 服务器

Samba 版本 3.0.33-3.14.el5 - Samba 版本

域控制器 WIN2008R2 标准版 - Windows DC

Windows 7 64 位 - 客户端电脑

用户提到,他在几周前强制关闭 PC 后遇到了这个问题。按理说,对于所有用户,当我们\\sambaservername在 Windows 中访问时,它会显示 Samba 服务器中的所有共享,但对于此用户,一旦他启动 PC,他将无法访问\\sambaservername,错误消息

Windows 无法访问\\sambaservername

目前解决该问题的解决方法:

\\sambaservername例如尝试访问 中的一个共享\\sambaservername\sharedfolder1。但即使这样做,一开始也会提示错误,错误信息如下

登录失败:未知的用户名或错误的密码。

用户需要再次输入凭据,然后才能访问共享。此后,他将能够\\sambaservername毫无问题地访问。但是一旦他重新启动计算机,问题仍然存在。

到目前为止已完成的故障排除:

  1. 确保以下设置:

    转至:控制面板 → 管理工具 → 本地安全策略选择:本地策略 → 安全选项

    “网络安全:LAN Manager 身份验证级别”→发送 LM 和 NTLM 响应“NTLM SSP 的最低会话安全性”→取消选中:需要 128 位加密

  2. 建议用户重置密码并重试,但问题仍然存在

  3. 在用户的 PC 上尝试了我的帐户,没有问题。在包括我的 PC 在内的其他几台 Windows 7 PC 上尝试了用户帐户,但问题仍然存在。Windows XP 没有这个问题。

  4. 确保 Windows 7 PC 上没有存储凭据。检查控制面板中的凭据管理器并输入此命令rundll32.exe keymgr.dll, KRShowKeyMgr

  5. 在 samba 服务器上重新启动 winbindd 守护进程但无济于事。

我怀疑这是由于某些缓存问题引起的,但不确定问题出在哪里。每当用户访问时出错时\\sambaservername,samba 服务器中都会记录以下错误:

[2012/10/10 17:10:26, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)
  Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!
[2012/10/10 17:10:27, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)
  Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!
[2012/10/10 17:10:27, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)
  Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!
[2012/10/10 17:10:27, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)
  Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!
[2012/10/10 17:10:27, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)
  Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!
[2012/10/10 17:10:27, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)
  Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!
[2012/10/10 17:10:27, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)
  Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!
[2012/10/10 17:10:27, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)
  Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!
[2012/10/10 17:10:27, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)
  Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!
[2012/10/10 17:10:27, 1] smbd/sesssetup.c:reply_spnego_kerberos(316)
  Failed to verify incoming ticket with error NT_STATUS_LOGON_FAILURE!

但经过解决方法后,就不会再出现错误了。阅读下面列出的文章后,我怀疑需要对目录进行一些修改\var\samba\cache

有几个用户使用 samba 服务器,我想解决这个问题而不产生任何影响。

我看到了以下文章:

“winbind 离线登录 (G) 此参数用于控制 Winbind 是否允许使用缓存凭据通过 pam_winbind 模块登录。如果启用,winbindd 将在本地缓存中加密存储成功登录的用户凭据。

默认值:winbind offline logon = false

例如:winbind offline logon = true”

关于如何删除本地缓存中某个用户的条目,您有什么想法吗?

答案1

我不确定nbtstat -R命令(“清除并重新加载远程缓存名称表。”)或nbtstat -RR一个(“向 WIN 发送名称释放数据包,然后开始刷新。”)可以做任何事情来强制执行您正在寻找的刷新类型......

如果你想查看手册,看这里..

答案2

检查以确保 ntpd 与域控制器同步。我遇到了同样的问题,直到今天我注意到有问题的服务器和域控制器之间存在 45 分钟的时间差。一旦我运行 ntpdate,它就可以正常工作。

答案3

根据我的经验,这通常是域控制器上的时间漂移​​造成的,或者在您的情况下只有一个客户端出现问题,即连接的客户端计算机。由于 Kerberos 在身份验证服务器请求和身份验证服务器回复(AS_Req 和 AS_rep)中都包含与时间相关的参数,因此较大的差异将导致会话令牌被拒绝。

AS_Req 包含所请求令牌的生存期: AS_REQ = ( PrincipalClient , PrincipalService , IP_list , Lifetime )

AS_Rep 包括 DC 时间戳和应用的生命周期:AS_REP = { PrincipalService , Timestamp , Lifetime , SKTGS }

因此,如果时间变化超出了生存期,则连接会被拒绝。

推测:我无法通过文档确认使用寿命是以分钟为单位的,但我认为这是因为我有一台会间歇性工作的机器,我能想到的唯一原因是它正好处于使用寿命的边界上。因此,它会工作大约 30 秒,然后分钟就会翻转,连接将被拒绝。

相关内容