我们遇到了一个奇怪的 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
毫无问题地访问。但是一旦他重新启动计算机,问题仍然存在。
到目前为止已完成的故障排除:
确保以下设置:
转至:控制面板 → 管理工具 → 本地安全策略选择:本地策略 → 安全选项
“网络安全:LAN Manager 身份验证级别”→发送 LM 和 NTLM 响应“NTLM SSP 的最低会话安全性”→取消选中:需要 128 位加密
建议用户重置密码并重试,但问题仍然存在
在用户的 PC 上尝试了我的帐户,没有问题。在包括我的 PC 在内的其他几台 Windows 7 PC 上尝试了用户帐户,但问题仍然存在。Windows XP 没有这个问题。
确保 Windows 7 PC 上没有存储凭据。检查控制面板中的凭据管理器并输入此命令
rundll32.exe keymgr.dll, KRShowKeyMgr
在 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
:
- http://www.linuxquestions.org/questions/linux-server-73/getent-passwd-dont-show-ad-groups-and-users-745829/
- http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/tdb.html
- http://lists.samba.org/archive/samba/2010-May/155521.html
- http://lists.samba.org/archive/samba/2011-March/161912.html
- http://lzeit.blogspot.sg/2009/10/samba-shares-inaccessible-after-power.html
有几个用户使用 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 秒,然后分钟就会翻转,连接将被拒绝。