我有一个在 RedHat Enterprise 服务器 6.7 版上运行的 Samba 服务器(3.6.23-30 版)。它加入 Active Directory,并向 AD 验证用户。Winbind 未运行(“未使用 Winbind;用户和组是本地的”情况,根据 Samba howto)。很长一段时间以来,这一直运行良好,直到从 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 资源管理器的Security选项卡中显示为UNIX group\testgrp)。
有什么方法可以像这里一样在启用 winbind 的情况下使用本地组(并且不需要创建相应的 AD 对象)?我尝试将其添加到 smbd.conf:
idmap config * : backend = tdb
idmap config * : range = 1000000-1999999
但它并没有改善任何东西,也是因为我猜这只是将 AD 用户/组映射到 Linux 用户/组,而不是相反。
或者,在没有运行 Samba 时,“访问被拒绝”问题可能是什么winbindd
?这是更新引入的错误(因此应该作为错误报告发送给 RedHat),还是由于安全模型的某些更改而导致的功能?
我遇到了同样的问题:没有 winbind 的 AD 身份验证对我来说被破坏了。
我之所以停止winbind,最初是因为它找不到本地组(虽然它似乎找到了正确的用户映射)。这是激活 winbind 的日志摘录:
如您所见,用户 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 用户名相同时,它应该可以工作。结果如下:
所以总结一下:
激活 winbind 以允许 AD 身份验证;
username map script = /bin/echo
在conf文件中添加。我认为这个解决方案并不理想,但这可能是在等待更好的解决方案时解决的问题。
是的,这是一个上游 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 作为解决方法;否则,像您所做的那样降级到以前的版本是唯一的其他选择。
因此,这可能不是放置此内容的正确位置,但我没有声誉点可以发表评论。我在 Scientific Linux 6.7 上也遇到了这个问题,并于上周三在我们的系统中进行了升级。我发现问题出在 netbios 名称解析 (nmb) 上。如果用户指定了活动目录的完全限定域名,则他们被授予访问权限,否则如果他们使用域的 netbios 名称,我将看到“NT_STATUS_ACCESS_DENIED”消息。
我还发现加入域的 Windows 框能够访问 samba 共享,但我相信这是因为它们具有当前的 kerberos 令牌。
更新:我发现指定完全限定域名实际上是在搞kerberos票并授予访问权限,我在ubuntu机器上发现安装krb5-user允许nautilus获取kerberos票,然后允许访问(它不起作用没有它),所以我想这是苹果/mac客户端和Windows客户端正在做的事情,我还没有注意到..
虽然这不是答案,但我希望它有所帮助。尊敬的,-格伦
正如一些答案和评论中所述,在包含 Badlock 修复后,这确实是 Samba 包中的一个错误。作为临时解决方法,Tabs 提供的解决方案(在配置文件中使用
winbindd
和设置username map script = /bin/echo
指令)运行良好。现在,最近更新的包 (samba-3.6.23-35) 修复了这个错误,使解决方法变得不必要。