为什么以编程方式加入 Windows 域会失败?

为什么以编程方式加入 Windows 域会失败?

我们正面临一个问题,即特定客户无法通过编程将计算机加入域。该计算机是从父 VM 克隆的,并尝试使用 Windows NetJoinDomain API 加入域。

https://docs.microsoft.com/en-us/windows/win32/api/lmjoin/nf-lmjoin-netjoindomain

我们正在使用机器密码进行不安全的加入。与域控制器的连接正常,如果我们尝试手动加入域,它就可以正常工作。此外,程序 tic 域加入正在为其他客户工作。所以我怀疑他们的 DC 中有一些设置拒绝使用机器密码进行不安全的加入。如何确认这一点和/或进一步调试。任何关于这方面的指示都将不胜感激。

我收到的错误消息是——(0x5):访问被拒绝。

PS:同样奇怪的是,如果父虚拟机未加入域,则不会发生这种情况

答案1

您正在使用 NetJoinDomain 函数 从运行在 本地系统帐户, 被形容为:

LocalService 帐户是服务控制管理器使用的预定义本地帐户。它在本地计算机上具有最低权限,并且在网络上提供匿名凭证

结果,您收到代码 ERROR_ACCESS_DENIED,定义为:“访问被拒绝。如果调用者不是目标计算机上的管理员本地组的成员,则会返回此错误”。

也许你的意思是在 网络服务帐户, 被形容为:

在 NetworkService 帐户上下文中运行的服务向远程服务器提供计算机的凭据默认情况下,远程令牌包含 Everyone 和 Authenticated Users 组的 SID。

虽然此帐户也没有管理员凭据,因此将无法加入域。

您最好将此服务创建为在本地管理员帐户下运行。

虽然这应该可行,但我个人不喜欢系统服务执行域加入的想法。此类操作应公开进行并在用户监督下进行。

相关内容