RedHat 服务器 6.7 上更新至 samba 3.6.23-30 会中断来自 AD 林中客户端的连接

RedHat 服务器 6.7 上更新至 samba 3.6.23-30 会中断来自 AD 林中客户端的连接

我有一个 Samba 服务器(版本 3.6.23-30),运行在 RedHat Enterprise 服务器版本 6.7 上。它已加入 Active Directory,并向 AD 验证用户身份。Winbind 未运行(“不使用 Winbind;用户和组是本地的“情况,根据 Samba 操作指南)。 长期以来,它一直运行良好,直到最近一次从 samba 3.6.23-25 更新到 3.6.23-30(实际上,10 天前在 3.6.23-26 中引入了几个针对安全问题的修复程序,包括 Badlock,但该版本从未在此处部署)。

我尝试将 Samba 降级到 3.6.23-25,结果解决了问题(当然是不是一个解决方案,考虑到 3.6.23-26 中包含的安全修复):

yum downgrade samba-3.6.23-25.el6_7.x86_64 samba-common-3.6.23-25.el6_7 samba-winbind-clients-3.6.23-25.el6_7 samba-client-3.6.23-25.el6_7 samba-winbind-3.6.23-25.el6_7

安装更新后,用户无法再连接到服务器上的共享,直接收到“拒绝访问”消息:

C:\Users\admin>net use \\servername /user:INTRANET\username
The password or user name is invalid for \\servername.

Enter the password for 'INTRANET\username' to connect to 'servername':
System error 5 has occurred.

Access is denied.

这是不是由于密码错误或类似原因,因为在这种情况下,它会显示错误 1326(用户名或密码不正确)。已尝试从 Windows 7、Windows Server 2012 R2 甚至 Windows XP SP3 进行连接,结果相同。

net ads testjoin说该服务器已正确加入 Active Directory。我也尝试过退出 AD 并重新加入,但情况并没有改善。

smbd 日志中客户端的错误消息(使用调试日志级别)是:

[2016/04/18 14:09:19.133618,  2] ../libcli/auth/credentials.c:289(netlogon_creds_client_check)   credentials check failed
[2016/04/18 14:09:19.133674,  0] rpc_client/cli_netlogon.c:623(rpccli_netlogon_sam_network_logon)   rpccli_netlogon_sam_network_logon: credentials chain check failed 
[2016/04/18 14:09:19.134036,  0] auth/auth_domain.c:331(domain_client_validate)   domain_client_validate: unable to validate password for user username in domain INTRANET to Domain controller AD6. Error was NT_STATUS_ACCESS_DENIED. 
[2016/04/18 14:09:19.135842,  5] auth/auth.c:281(check_ntlm_password)   check_ntlm_password: winbind authentication for user [username] FAILED with error NT_STATUS_ACCESS_DENIED 
[2016/04/18 14:09:19.135917,  2] auth/auth.c:330(check_ntlm_password)   check_ntlm_password:  Authentication for user [username] -> [username] FAILED with error NT_STATUS_ACCESS_DENIED

现在,如果我启动 winbind 守护程序,身份验证问题就会消失,用户可以成功连接到 Samba 服务器。但是,在这种情况下会出现第二个烦人的问题。以用户仅因组成员身份而拥有权限的目录为例(即用户是 Samba 服务器上 UNIX 组的成员):

username$ ls -l /export/projects/testproject
drwxrws---.  2 root testgrp     4096 Apr 18 11:24 testproject

这里,username是该组的成员testgrp,可以成功访问该目录:

username$ ls -l /export/projects/testproject/
-rw-r--r--. 1 root testgrp         0 Apr 18 11:24 test.txt

连接到 Samba 服务器的同一用户可以不是访问目录(拒绝访问)。在更新之前(使用winbindd 已禁用winbindd),访问工作正常。我猜这与正在运行的事实有关,因为该testgrp组没有映射到任何 AD 对象(它显示在安全Windows 资源管理器选项卡UNIX 组\testgrp)。

有没有办法能够像这里一样在启用 winbind 的情况下使用本地组(而无需创建相应的 AD 对象)?我尝试将其添加到 smbd.conf:

idmap config * : backend = tdb
idmap config * : range = 1000000-1999999

但它并没有改善任何东西,因为我猜测这实际上是将 AD 用户/组映射到 Linux,而不是相反。

或者换句话说,在没有的情况下运行 Samba 时,“访问被拒绝”问题可能是什么winbindd漏洞更新引入的(因此应作为错误报告发送给 RedHat),或者更确切地说特征由于安全模型的某些变化?

答案1

我遇到了同样的问题:没有 winbind 的 AD 身份验证对我来说不起作用。

我最初停止 winbind 的原因是它找不到本地组(尽管它似乎找到了正确的用户映射)。以下是 winbind 激活后的日志摘录:

[2016/04/22 16:15:20.654780,5] Auth/token_util.c:527(debug_unix_user_token)
用户 1154 的 UNIX 令牌
主要组为 496,包含 0 个补充组

如您所见,用户 ID 是正确的(1154),但除了主组(也是正确的)之外,没有找到其他组。

我似乎找到了解决这个问题的方法:你应该添加选项

username map script = /bin/echo

在 /etc/smb.conf 中。此解决方案在此处提出: http://samba.2283325.n4.nabble.com/samba-winbind-ignores-local-unix-groups-td3410748.html,但未经测试。

据我从手册页中了解,此选项在 AD 身份验证后强制进行不同的映射。使用 echo 命令只需将名称映射到其自身,因此只要本地用户名与 AD 用户名相同,它就会起作用。结果如下:

[2016/04/22 16:21:20.996130, 5] auth/token_util.c:527(debug_unix_user_token)
用户 1154 的 UNIX 令牌
主要组为 496,包含 4 个补充组
[...] 组列表 ...]

总结一下:

  • 激活 winbind 以允许 AD 身份验证;

  • username map script = /bin/echo在conf文件中添加。

我认为这个解决方案并不理想,但它可以作为一种解决方案,等待更好的解决方案。

答案2

是的,这是上游 Samba 的一个错误,在最新的 Samba 软件包更新中引入了 RHEL 用户。Red Hat 已意识到这个问题,并有一个候选补丁来修复它,但截至今天(4 月 27 日)尚未发布带有该补丁的更新。请参阅https://bugzilla.redhat.com/show_bug.cgi?id=1326918https://bugzilla.redhat.com/show_bug.cgi?id=1327697关注此事的更新。

与此同时,如果配置允许的话,一些用户可能能够运行 winbindd 作为解决方法;否则,像您所做的那样降级到以前的版本是唯一的其他选择。

答案3

因此,这可能不是放置此内容的正确位置,但我没有声誉点来发表评论。我在 Scientific Linux 6.7 中也遇到了这个问题,并于上周三在我们的系统中进行了升级。我发现问题在于 netbios 名称解析 (nmb)。如果用户指定了活动目录的完全限定域名,则他们被授予访问权限,否则,如果他们使用域的 netbios 名称,我将看到“NT_STATUS_ACCESS_DENIED”消息。

我还发现加入域的 Windows 机器能够访问 samba 共享,但我相信这是因为它们具有当前的 kerberos 令牌。

更新:我发现指定完全限定域名实际上是在参与 kerberos 票证并授予访问权限,我发现在 ubuntu 机器上安装 krb5-user 允许 nautilus 获取 kerberos 票证,然后允许访问(没有它就无法工作),所以我想这是苹果/mac 客户端和 Windows 客户端正在做的事情,我还没有注意到。

虽然这不是答案,但我希望它能有所帮助。敬上,-Glen

答案4

正如一些答案和评论所述,这确实是 Samba 软件包中的一个错误在修复了 Badlock 之后。作为临时解决方法,Tabs 提供的解决方案(在配置文件中使用winbindd和设置username map script = /bin/echo指令)运行良好。现在,最近更新的软件包(samba-3.6.23-35)修复了这个错误,因此不再需要此解决方法。

相关内容