![当用户存储在 AD 中时,Windows 机器可以使用 Kerberos 对 Samba 进行身份验证吗?](https://linux22.com/image/599662/%E5%BD%93%E7%94%A8%E6%88%B7%E5%AD%98%E5%82%A8%E5%9C%A8%20AD%20%E4%B8%AD%E6%97%B6%EF%BC%8CWindows%20%E6%9C%BA%E5%99%A8%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20Kerberos%20%E5%AF%B9%20Samba%20%E8%BF%9B%E8%A1%8C%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E5%90%97%EF%BC%9F.png)
我知道标题可能不太清楚,但我实在想不出更好的了。
我们有两个域,我们称它们为example.com
和。前者由 Active Directory 服务器管理,并容纳一些服务器以及所有 Windows 客户端。后者容纳许多 Unix 机器(主要是 Solaris)。从领域到subnet.example.com
存在单向信任。SUBNET.EXAMPLE.COM
EXAMPLE.COM
通过此设置,常用的东西都可以正常工作,例如 ssh 登录、NFSv4 等。
现在,我想要做的是在 Unix 机器上运行 Samba 服务器subnet.example.com
。Windows 用户应该能够访问这些服务器上的文件。
我在 Samba 中设置了 Kerberos 身份验证,它可以在任何 Linux 客户端上完美运行。smbclient
当我拥有 Kerberos TGT 时,我可以通过它访问计算机,如果我将其删除,它就会停止工作。用户映射完全按预期工作。这些机器cifs/hostname
在 MIT Kerberos 服务器中有条目。
但是,Windows 客户端无法执行相同的操作。查看 Samba 日志时,我可以看到 Samba 服务器尝试与 AD 服务器通信,但由于 Samba 服务器尚未加入 AD 域,因此不允许这样做。
那么,我听到你问:“你为什么不加入 AD 域呢?”答案是我无法做到这一点,因为子网上的系统是测试系统,通常每天要安装和重新安装多次,并且我们不希望每次安装或离线测试系统时都有 AD 管理员对此进行配置(并删除它们)。
此外,对于 Linux 客户端来说一切都运行正常,这让我相信应该可以以某种方式让它运行起来。
所以,我的问题是:这可能吗?Windows 中是否存在某些限制,阻止它们成为正常 Kerberos 域中的客户端?如果是这样,解决此问题的最佳方法是什么?
答案1
我解决了这个问题。问题是 Windows 客户端不知道属于subnet.example.com
不同的域。解决方案是将此情况通知客户端。可以使用以下两个命令来完成此操作,我相信这类似于在krb5.conf
Unix 系统中添加域信息:
ksetup /addkdc SUBNET.EXAMPLE.COM hostname.of.kerberos.server
ksetup /addhosttorealmmap .subnet.example.com SUBNET.EXAMPLE.COM
完成此操作后,客户端身份验证按预期工作。