如何允许计算机/机器帐户向 Samba AD 域成员进行身份验证?

如何允许计算机/机器帐户向 Samba AD 域成员进行身份验证?

问题

尝试以 SYSTEM 帐户身份从 Windows Server 2019 连接到 Samba 服务器上的网络共享,然后The password is invalid for \\server\share会提示输入新的网络共享。预期结果是The command completed successfully.

当我尝试连接到共享时,Samba 服务器上的机器的日志显示:

get_user_from_kerberos_info: Username DOMAIN\COMPUTER$ is invalid on this system

那么问题是:为什么?我如何允许成员服务器验证计算机帐户?

背景

我最近重新配置了 Samba 服务器 (v4.5.16),并将其加入到 2008 R2 功能级别的 Samba 驱动的 Active Directory 域。我设置了一个使用 Windows ACL 共享,向经过身份验证的用户和域计算机授予读取和执行 NTFS 权限,并向所有人授予对共享的完全控制权。net use使用 Windows 2019 机器上的常规用户帐户进行浏览和测试很顺利。一切都很好。

但是!由于此共享包含通过组策略对象 (GPO) 部署软件的安装文件,因此它还需要可供计算机帐户(例如 COMPUTER$)访问。但显然并非如此,尽管也授予了所有人读取权限。我正在测试

psexec -i -s cmd.exe
net use \\server\share /user:%computername%$

...那时我就发现了问题。

我还启用了Windows 安装程序日志记录这只是说来源(\\server\share\path\to\installer)无效。

在此之前,旧版 Windows 计算机(2003-2008)上的所有功能均正常(启动时软件部署成功),因为共享已启用来宾访问,但 Windows 10+ 和 2016+ 不再默认允许此功能。(我测试过也允许它,但这只会导致相同的密码提示。)

FWIW,托管此共享的 Samba 域成员设置为使用广告 idmap 后端使用 RFC2307 选项。因此,我尝试向域中的计算机帐户添加 uidNumber,但没有效果。

我已经束手无策了,花了两天的时间搜索、测试、咒骂等等,所以我现在谦虚地寻求 ServerFault 的集体智慧。

感谢您的时间和关注!

答案1

首先,我很抱歉没有在评论中提出这一点,但我的声誉不足以这样做。

为了澄清你的原始帖子-当你说:

因此,我尝试向域中的计算机帐户添加 uidNumber,但没有效果。

这是否意味着您尝试将 uidNumber 添加到 Samba 框的计算机帐户,或者添加到尝试验证共享的计算机帐户?

我之所以问这个问题,是因为我认为可能甚至不需要在 Samba 框上创建 COMPUTER$ 帐户。对于机器帐户,我不敢肯定,但我必须获得 SQL 使用的托管服务帐户才能针对 Samba 共享进行身份验证(运行 v4.8.5,也使用 AD 后端,使用 schema_mode rfc2307),而我所要做的就是在 AD 中为 MSA 添加 uidNumber 属性以使其正常工作。完成此操作后,我可以在日志中看到它从说

用户名 DOMAIN\MSA$ 在此系统上无效

到:

AuthZ 成功:[SMB2,krb5] 用户 [DOMAIN]\[MSA$]...

就这样,我BACKUP DATABASE从 SQL(作为 MSA 运行)到该共享的工作开始工作了。

由于 MSA 在身份验证等方面被视为与计算机帐户一样,因此我不会感到惊讶,如果同样的修复方法(只需为您希望能够访问共享的客户端计算机帐户分配一个有效的 uidNumber,确保分配的号码在您为该域定义的范围内)也适用于这种情况(事实上,如果它没有工作)。

答案2

终于搞定了!出现此错误后,只需在 Samba 框上创建一个名为 COMPUTER$ 的用户即可。由于我使用 AD 后端进行 idmap,因此我还必须在 COMPUTER$ 帐户的 AD 中手动设置 uidNumber,并在创建 UNIX 用户时指定相同的 uid,例如adduser --force-badname "COMPUTER$" --uid 999000

现在要弄清楚如何让 Samba 在新用户尝试验证 Samba 身份时自动执行此操作......

相关内容