在 Active Directory 的域控制器上,有一些以 SYSTEM 帐户运行的软件。该软件的部分功能是按预定间隔更改选定帐户的密码,并将更改报告给与该应用程序关联的另一台服务器。
该软件在客户现场运行。对于 99% 以上的客户来说,该软件开箱即用。但是,对于某些客户来说,更改密码时会失败,日志会报告访问错误。HRESULT: 0x80070005 (E_ACCESSDENIED)
我在 AWS 上创建并运行该软件的所有 Windows Server VM 均可开箱即用。
需要明确的是,在域控制器上,该服务作为系统帐户运行 -NT AUTHORITY\SYSTEM
或者对于计算机来说BoxX
,有时被视为BoxX$
。
如果我查看一个可以运行的示例服务器,该帐户是以下服务器的成员:
CN=Pre-Windows 2000 Compatible Access
CN=Builtin,DC=evotestmsp,DC=local
CN=Cert Publishers,CN=Users,DC=evotestmsp,DC=local
PrimaryGroup 是:CN=Domain Controllers,CN=Users,DC=evotestmsp,DC=local
DC SYSTEM 帐户所属的特殊组没有任何表明其能够更改密码的特殊组...它就是可以更改密码。也许Domain Controllers
组允许这样做...我不知道,但我认为任何 DC 都是该组的成员。当它失败时,技术支持人员没有向我们提供此信息。
即使我尝试使用如下命令:Get-ADGroupMember 'domain admins' -Recursive | select name
,我也看不到与 SYSTEM 帐户或有关的任何内容BoxX$
。我只看到域用户的名称。
如果帐户被禁用,是否有任何标志禁止系统帐户更改密码...或者需要在下次登录时更改密码?
这似乎就像我在大海捞针,但却找不到权限或设置。
提前致谢。
答案1
默认情况下,SYSTEM 被授予对目录中所有对象的完全控制权。
您需要查看密码重置操作失败的帐户并检查其 ACL。从那里您应该能够看到“拒绝:重置密码”权限的应用位置、设置位置以及继承位置。如果相关帐户是高权限帐户,则对象的 ACL 也有可能由 SDProp 进程管理/保护(AdminSDHolder 对象的 ACL 基本上每小时克隆一次)。在这种情况下,需要调整 AdminSDHolder 的 ACL 以包括 SYSTEM 的允许:重置密码权限。
或者,可以重写应用程序/流程以使用该ChangePassword
方法,但这需要知道当前密码。
以下是关于 SDProp 流程和 AdminSDHolder 的入门介绍:https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-c--protected-accounts-and-groups-in-active-directory#protected-groups