我有一个在 RedHat Enterprise 服务器版本 6.7 上运行的 Samba 服务器(版本 3.6.23-30)。它加入到 Active Directory,并向 AD 验证用户。Winbind 未运行(根据 Samba howto,“未使用 Winbind;用户和组是本地的”情况)。很长一段时间以来,这一直运行良好,直到从 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
Run Code Online (Sandbox Code Playgroud)
安装更新后,用户无法再连接到服务器上的共享,直接收到“拒绝访问”消息:
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.
Run Code Online (Sandbox Code Playgroud)
这不是由于密码错误或类似原因,因为在这种情况下,它会显示错误 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
Run Code Online (Sandbox Code Playgroud)
现在,如果我启动 winbind 守护程序,身份验证问题就会消失,用户可以成功连接到 Samba 服务器。然而,在这种情况下,出现了第二个恼人的问题。获取一个用户由于组成员身份而只有权限的目录(即用户是 Samba 服务器上 UNIX 组的成员):
username$ ls -l /export/projects/testproject
drwxrws---. 2 root testgrp 4096 Apr 18 11:24 testproject
Run Code Online (Sandbox Code Playgroud)
在这里,username
是testgrp
组的成员并且可以成功访问目录:
username$ ls -l /export/projects/testproject/
-rw-r--r--. 1 root testgrp 0 Apr 18 11:24 test.txt
Run Code Online (Sandbox Code Playgroud)
连接到 Samba 服务器的同一用户无法访问该目录(访问被拒绝)。在更新(winbindd
禁用)之前,访问工作正常。我想这与winbindd
正在运行的事实有关,因为该testgrp
组没有映射到任何 AD 对象(它在 Windows 资源管理器的安全选项卡中显示为UNIX group\testgrp)。
有什么方法可以像这里一样使用本地组并启用 winbind(并且不需要创建相应的 AD 对象)?我尝试将其添加到 smbd.conf:
idmap config * : backend = tdb
idmap config * : range = 1000000-1999999
Run Code Online (Sandbox Code Playgroud)
但它并没有改善任何东西,也是因为我猜这更像是将 AD 用户/组映射到 Linux 用户/组,而不是相反。
或者,在没有winbindd
. 这是更新引入的错误(因此应该作为错误报告发送给 RedHat),还是由于安全模型中的某些更改而导致的功能?
我遇到了同样的问题:没有 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文件中。
我认为这个解决方案并不理想,但这可能是等待更好的解决方案的一个解决方案。
归档时间: |
|
查看次数: |
4314 次 |
最近记录: |