以普通用户身份运行的服务能否获取Managed Service Account密码?
Windows MSA密码读取权限问题解答
结合Windows服务的添加方式及其在svchost.exe进程中的运行机制,针对场景问题解答如下:
场景回顾
在已加入AD域的Windows主机上部署了一个以普通用户账户运行的heart-beat服务(该普通用户拥有Log on as Service权限),主机已安装一个Managed Service Account(MSA),询问该服务能否通过以下代码获取MSA的密码:
$MSA = ConvertFrom-ADManagedPasswordBlob (Get-ADServiceAccount SvcCustomerWeb -prop 'msDS-ManagedPassword' | Select -expand 'msDS-ManagedPassword') ConvertTo-NTHash $MSA.SecureCurrentPassword
已知以SYSTEM账户运行服务时可成功获取,现确认普通用户账户的情况。
结论
普通用户账户运行的heart-beat服务无法通过上述代码获取MSA的密码。
核心原因
- AD域中
msDS-ManagedPassword属性的读取权限有严格限制:默认仅允许域管理员、SYSTEM账户(对应主机的计算机账户)以及MSA关联的主机计算机账户读取该属性。 - 普通域用户账户不在上述权限范围内,执行
Get-ADServiceAccount命令读取msDS-ManagedPassword属性时会因权限不足失败,后续的密码解析步骤自然无法完成。 - Log on as Service权限仅允许账户作为服务身份登录,和读取MSA密码属性的权限无关联,无法帮助普通用户突破权限限制。
补充说明
当服务以SYSTEM账户运行时,SYSTEM对应的是主机的计算机账户,而MSA的密码属性默认允许其绑定的主机计算机账户读取,因此可以成功获取密码。
内容的提问来源于stack exchange,提问作者testuser7
相关产品推荐
相关产品推荐

