我有一个 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=1326918和https://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)修复了这个错误,因此不再需要此解决方法。