使用 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 service
和Replace a process level token
策略中。
建议:请不要为了“使事情正常运转”而将用户添加到每个允许策略中。这可能会造成严重的安全漏洞。
如何才能知道某项特定服务需要哪些权限?
由于 Windows 服务必须实现Windows 服务 API,它们将包含一个SERVICE_REQUIRED_PRIVILEGES_INFOA结构。它包含所有所需权限的列表。您可以使用此 C++ 代码查询此信息。或者,您可以下载SystemExtensions 模块对于 PowerShell 并使用Get-ServiceConfig
cmdlet:
Get-ServiceConfig Themes | Select-Object -ExpandProperty Privileges
输出:
SeAssignPrimaryTokenPrivilege
SeDebugPrivilege
SeImpersonatePrivilege
然后您可以使用本文档将这些权限转换为策略名称(顺序与上面相同):
- 替换进程级令牌
- 调试程序
- 身份验证后模拟客户端
1请记住,并非所有可执行文件都可以作为服务运行,因为它们必须实现Windows 服务 API至少。