除非您加入一个域,否则似乎没有基于GUI的方法可以执行此操作-至少我在任何地方都找不到该域-因此,我做了一些更深入的研究,找到了一个适用于此问题的答案我们的情怀。
我不了解知识库文章中的字符串表示形式是什么意思,但是经过一些挖掘之后,我发现它是SDDL语法。进一步的挖掘使我想到了Alun Jones的这篇文章,其中解释了如何获取服务的安全描述符以及每个比特的含义。MS KB914392具有更多详细信息。
要附加到服务的现有安全描述符,请使用sc sdshow "Service Name"
获取现有描述符。如果这是一个普通的旧.NET Windows Service(与我们的情况相同),则安全描述符应如下所示:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
我们需要授予权限RP
(启动服务),WP
(停止服务),DT
(暂停/继续服务)和LO
(查询服务的当前状态)。可以通过将我们的服务帐户添加到Power Users组来完成,但是我只想授予对维护服务运行帐户的单独访问权限。
我使用runas
打开服务帐户下的命令提示符运行whoami /all
,给了我服务帐户的SID,然后在下面构造了附加的SDDL:
(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)
然后将其添加到上面的SDDL字符串的D:部分:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)
然后使用以下sc sdset
命令将其应用于服务:
sc sdset "Service Name" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)
如果一切按计划进行,则可以启动,停止,暂停该服务,并由上面的SID定义的用户查询其状态。