如何才能知道某项特定服务需要哪些权限?

如何才能知道某项特定服务需要哪些权限?

使用 CarbonDLLs 和 sc config,我可以授予用户Logon As Service权限,也可以将用户添加为服务的“以帐户登录”。

之前我遇到了这个Logon Failure问题,但是在使用 carbon 和 powershell 脚本之后,我能够通过Logon as Service向帐户授予权限来消除该错误。

但是现在当我启动服务时出现以下错误:

A privilege that the service requires to start does not exist in the Service Account....

对于服务帐户,我正在使用来自 AD 的用户帐户,该帐户也被添加为服务器上的本地管理员,我正在该服务器上更改服务的登录帐户。

为了测试,我更改了服务的登录帐户,Themes默认情况下该服务在本地系统帐户下运行。我不想在本地系统下运行它,而是在我分配的帐户下运行它

答案1

本地组成员Administrators拥有许多权限,但绝对不是全部。这些额外权限之一就是您已经设置的权限:Logon as a service。您可以在本地安全设置 MMC 管理单元 (secpol.msc) 中找到和管理所有权限,位置如下安全设置 > 本地策略 > 用户权限分配

在此处输入图片描述

如您所见,并非所有(允许)权限都包含该Administrators组。如果一切顺利,您将已经在 下看到您的域用户。如果没有,请立即添加。这是用户帐户将可执行文件1作为服务Logon as a service运行的最低要求。

运行Themes服务当然也需要Logon as a service权限。但正如您所观察到的 - 对于这项服务 - 这还不够。这项特定服务也需要权限Replace a process level token。顺便说一句,要了解有关特定权限的更多信息,只需打开它并导航到解释标签:

在此处输入图片描述

因此,总而言之,要Themes在您的域用户下运行该服务,请将此帐户添加到Logon as a serviceReplace a process level token策略中。

建议:请不要为了“使事情正常运转”而将用户添加到每个允许策略中。这可能会造成严重的安全漏洞。

如何才能知道某项特定服务需要哪些权限?

由于 Windows 服务必须实现Windows 服务 API,它们将包含一个SERVICE_REQUIRED_PRIVILEGES_INFOA结构。它包含所有所需权限的列表。您可以使用此 C++ 代码查询此信息。或者,您可以下载SystemExtensions 模块对于 PowerShell 并使用Get-ServiceConfigcmdlet:

Get-ServiceConfig Themes | Select-Object -ExpandProperty Privileges

输出:

SeAssignPrimaryTokenPrivilege
SeDebugPrivilege
SeImpersonatePrivilege

然后您可以使用本文档将这些权限转换为策略名称(顺序与上面相同):

  • 替换进程级令牌
  • 调试程序
  • 身份验证后模拟客户端

1请记住,并非所有可执行文件都可以作为服务运行,因为它们必须实现Windows 服务 API至少。

相关内容