如何允许非管理员用户启动/停止Windows服务?

默认情况下,普通(非管理员)用户无法管理Windows服务。这意味着用户无法停止,启动,重新启动或更改Windows服务的设置/权限。在某些情况下,用户必须具有重新启动或管理某些服务的权限。在本文中,我们将介绍几种管理Windows服务权限的方法。特别是,我们将向您展示如何通过授予适当的权限来允许非管理员用户启动,停止和重新启动特定的Windows服务。

假设您需要向域帐户contoso \ tuser授予重新启动Print Spooler服务(服务名称– spooler)的权限。当非管理员尝试重新启动服务时,将出现错误:

发生系统错误5。访问被拒绝。
网络停止/启动服务-系统错误5访问被拒绝

Windows中没有简单方便的内置工具来管理服务权限。我们将考虑一些方法来授予用户管理服务的权限:

内容:
使用SC.exe(服务控制器)工具设置Windows服务权限
使用SubInACL允许用户启动/停止/重新启动服务
如何使用Process Explorer更改Windows服务权限?
使用PowerShell设置Windows服务权限
使用安全模板管理服务权限
如何授予用户使用GPO管理服务的权限?
使用SC.exe(服务控制器)工具设置Windows服务权限
假定使用sc.exe(服务控制器)工具来管理系统的标准内置Windows方法。使用此实用程序的主要问题是服务权限格式(SDDL格式-安全描述定义语言)的语法复杂。

您可以像以下这样以SDDL字符串的形式获取Windows服务的当前权限:

sc.exe sdshow Spooler

sc.exe sdshow后台处理程序-显示服务权限

D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)
(A;;CCLCSWRPWPDTLOCRRC;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

所有这些符号是什么意思?

S:—系统访问控制列表(SACL)
D:—任意ACL(DACL)
方括号后面的第一个字母表示:允许(A)或拒绝(D)。

下一组符号是可分配的权限。

CC — SERVICE_QUERY_CONFIG(请求服务设置)
LC — SERVICE_QUERY_STATUS(服务状态轮询)
SW-SERVICE_ENUMERATE_DEPENDENTS
LO-SERVICE_INTERROGATE
CR-SERVICE_USER_DEFINED_CONTROL
RC — READ_CONTROL
RP — SERVICE_START
WP — SERVICE_STOP
DT-SERVICE_PAUSE_CONTINUE
最后两个字符是被授予权限的对象(用户,组或SID)。有预定义组的列表。

所有经过身份验证的用户
AO账户运营商
RU Alias允许以前的Windows 2000
匿名登录
AU认证用户
BA内置管理员
BG内置客人
BO备份操作员
BU内置用户
CA证书服务器管理员
CG Creator组
CO创作者所有者
DA域管理员
DC域计算机
DD域控制器
DG Domain来宾
DU域用户
EA企业管理员
ED Enterprise域控制器
WD所有人
PA组策略管理员
IU交互式登录用户
洛杉矶本地管理员
LG本地嘉宾
LS本地服务帐户
SY本地系统
NU Network登录用户
否网络配置操作员
NS网络服务帐户
PO打印机操作员
PS个人自我
PU Power用户
RS RAS服务器组
RD终端服务器用户
RE复制器
RC限制码
SA模式管理员
SO服务器操作员
SU服务登录用户
可以使用SID显式指定用户或组,而不是预定义组。要获取当前用户的SID,可以使用以下命令:

whoami /user

或者,您可以使用Get-ADUser cmdlet 查找任何域用户的SID :

Get-ADUser -Identity ‘sadams’ | select SID

您可以使用Get-ADGroup cmdlet 获取 AD安全组的SID :

Get-ADGroup -Filter {Name -eq “ny-ithelpdesk”} | Select SID

为了为特定服务分配SDDL权限字符串,可以使用sc sdset命令。例如,可以使用以下命令将权限授予用户:

sc sdset Spooler “D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2133228432-2794320136-1823075350-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)”

使用SubInACL允许用户启动/停止/重新启动服务
使用Sysinternals中的命令行工具SubInACL(由Mark Russinovich设计)更容易管理服务权限。该工具的语法更加容易和方便。这是使用SubInACL授予服务重新启动权限的方法:

从此网页(https://www.microsoft.com/zh-cn/download/details.aspx?id=23510)下载subinacl.msi并将其安装在目标系统上;SubInACL工具
在提升的命令提示符下,转到包含该工具的目录: cd “C:\Program Files (x86)\Windows Resource Kits\Tools\”
运行命令: subinacl.exe /service Spooler /grant=contoso\tuser=PTO
subinacl-授予用户启动/停止服务的权限
注意。在这种情况下,我们已授予用户暂停(暂停/继续),启动和停止(重新启动)服务的权限。可用服务权限的完整列表:
F:完全控制
R:通用读
W:通用写
X:通用执行
L:阅读控制
问:查询服务配置
S:查询服务状态
E:枚举依赖服务
C:服务变更配置
T:启动服务
O:停止服务
P:暂停/继续服务
I:询问服务
U:服务用户定义的控制命令
如果需要授予在远程计算机上运行的服务的权限,请使用subinacl命令的以下语法:
subinacl /SERVICE \\lon-prnt1\spooler /grant=contoso\tuser=F
现在,您只需要使用用户帐户登录计算机,然后尝试使用以下命令重新启动服务:
net stop spooler
net start spooler

sc stop spooler && sc start spooler
SC重新启动Windows服务的一线
如果一切正确,则该服务应重新启动。

要撤销分配的服务权限,请使用/revokesubinacl.exe工具的选项。例如:
subinacl.exe /service Spooler /revoke=contoso\tuser

如何使用Process Explorer更改Windows服务权限?
您可以使用另一个Sysinternals实用程序– Process Explorer来更改Windows服务权限。以管理员身份运行Process Explorer,然后找到所需服务的过程。在我们的示例中,这是spoolsv.exe(后台处理程序可执行文件– C:\Windows\System32\spoolsv.exe)。打开流程属性,然后单击“ 服务”选项卡。

进程资源管理器服务权限

单击权限按钮,然后在打开的窗口中添加用户或组。之后,选择要分配的权限(完全控制/写入/读取)。

允许使用procexp管理Windows服务

使用PowerShell设置Windows服务权限
在TechNet库中,有一个单独的非官方PowerShell模块用于管理不同Windows对象的权限– PowerShellAccessControl模块(您可以在此处下载)。该模块还允许您管理服务权限。安装此模块并将其导入到您的PS会话中:

Import-Module PowerShellAccessControl

您可以从PowerShell获取特定Windows服务的有效权限,如下所示:

Get-Service spooler | Get-EffectiveAccess -Principal corp\tuser

要允许非管理员用户启动和停止后台打印程序服务,请运行以下命令:

Get-Service spooler | Add-AccessControlEntry -ServiceAccessRights Start,Stop -Principal corp\tuser

使用安全模板管理服务权限
使用安全模板的一种可视化(但需要更多操作)图形化方式来管理服务权限。打开mmc.exe控制台,然后添加“ 安全模板”管理单元。

安全模板管理单元

创建一个新的安全模板(New Template)。

新模板

指定新模板的名称,然后转到“ 系统服务”部分。在服务列表中,选择服务后台打印程序并打开其属性。

选择启动模式(自动),然后单击“ 编辑安全性”。

服务编辑安全

使用添加按钮,添加要授予权限的用户帐户或组。在我们的情况下,启动,停止和暂停许可就足够了。

服务安全设置

保存此模板。

注意。安全模板的内容另存为INF文件,位于C:\ Users \%username%\ Documents \ Security \ Templates文件夹中。
如果打开此文件,则可以看到有关权限的信息以前面提到的SDDL格式保存。以这种方式获得的字符串可以用作sc.exe命令的参数。

[Unicode]
Unicode=yes
[Version]
signature=”$CHICAGO$”
Revision=1
[Service General Setting]
“Spooler”,2,”D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;RPWPDTRC;;;S-1-5-21-3243688314-1354026805-3292651841-1127)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)”

service_user_rights.inf
现在,您只需要使用“ 安全性配置和分析”管理单元创建一个新数据库(开放数据库),并从文件Spooler User Rights.inf中导入安全模板。

导入安全模板

通过从上下文菜单中选择“ 立即配置计算机”选项来应用此模板。

立即配置计算机

现在,您检查用户是否可以在非管理员帐户下管理后台打印程序服务。

如何授予用户使用GPO管理服务的权限?
如果必须授予用户启动/停止多个服务器或域计算机服务的权限,则使用组策略(GPO)功能会更容易:

创建一个新的GPO或编辑现有的GPO,并将其与计算机对象链接到必要的Active Directory容器(OU)。转到策略部分的计算机配置-> Windows设置->安全设置->系统服务;系统服务GPO
找到后台打印程序服务,然后像上述方法一样向用户授予权限。保存更改;
注意。之前,我们展示了使用同一GPO可以向所有用户隐藏任何Windows服务。
等待GPO应用到客户端计算机上,并确保已分配新的服务权限。
Windows服务安全权限存储在哪里?
更改了默认权限的所有服务的安全设置都存储在它们自己的注册表项HKLM\System\CurrentControlSet\Services\<servicename>\Security中,该注册表项位于REG_BINARY类型的Security参数中。

这意味着在其他计算机上设置服务权限的一种方法是导出/导入此注册表参数(包括通过GPO)。注册表中的Windows服务权限

因此,我们研究了几种管理Windows服务权限的方法,这些方法使您可以将系统服务的任何权限授予非管理员用户。如果用户需要对服务的远程访问,而没有授予其本地登录或RDP访问权限,则必须允许用户远程连接并通过Service Control Manager枚举服务。

未经允许不得转载:98资源窝 » 如何允许非管理员用户启动/停止Windows服务?

赞 (1)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址