如何将服务的启动/停止/重新启动权限授予非域成员服务器上的任意用户或组?


61

我们在服务器上运行着一套Windows服务,它们相互独立执行一堆自动化任务,但一个服务负责其他服务。

如果其中一项服务无法响应或挂起,则该服务将尝试重新启动服务,如果在尝试过程中引发异常,则将电子邮件发送给支持团队,以便他们可以自己重新启动服务。

经过一些研究,我遇到了一些“解决方案”,从KB907460中提到的解决方法到提供服务运行管理员权限的帐户。

我对这两种方法都不满意-我不了解Microsoft知识库文章中概述的第一种方法的后果,但我绝对不希望授予管理员访问运行该服务的帐户的权限。

我快速浏览了“本地安全策略”,除了定义帐户是否可以作为服务登录的策略之外,我看不到其他任何类似于服务的内容。

我们正在Server 2003和Server 2008上运行此程序,因此任何想法或指针都将受到欢迎!


澄清:我不想授予给定用户或组启动/停止/重新启动所有服务的功能-我希望授予给定用户或组仅对特定服务的执行权限。


进一步说明:我需要授予这些权限的服务器不属于域-它们是两个面向Internet的服务器,它们接收文件,对其进行处理并将它们发送给第三方,以及为几个网站提供服务,因此Active Directory组策略是不可能的。抱歉,我没有说清楚。


您可能还会从ms看这篇文章,这篇文章也指向GP修改:support.microsoft.com/kb/256345

3
对不起,我想念你...我很忙。:您正在寻找这样的事情serverfault.com/questions/15147/...
埃文安德森

我知道这是一个非常老的问题,但是您是否考虑过使用Windows服务管理器中的“恢复”选项?
Tim Long

Answers:


51

除非您加入一个域,否则似乎没有基于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定义的用户查询其状态。


10
对于执行相同操作的更简单方法,应该使用SetACL.exe。这是如何使用它来设置服务权限的示例:SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
Mason G. Zhwiti 2011年

2
您可以将Process Hacker(processhacker.sourceforge.net)用于GUI来配置所有服务。它包括隐藏的服务,并允许您配置服务的更多设置,例如二进制路径-和权限。
ygoe 2013年

1
CoreTech gui为我工作。很难相信GUI在Windows中已经不存在。在这里阅读答案,怎么可能这么难?代表微软的重大失败。
MikeKulls

我喜欢添加CCLCSWSDDL权限(除了RPWPDTLO之外),因此我在运行Get-Service时也可以看到列出的服务(首先需要修改scmanager服务控制管理器服务的SDDL才能列出可访问的服务) 。我还需要SW能够重新启动某些服务。
Baodad

34

我只是有同样的问题。
您可以使用资源工具包中的SubInACL.exe。在此处下载独立实用程序:http : //www.microsoft.com/download/en/details.aspx? displaylang=en& id=23510

使用msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo提取的文件,如果你不想安装.msi

  1. 管理员身份打开命令提示符
  2. 转到放置.exe的目录
  3. subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T =开始服务
O =停止服务
P =暂停/继续服务

完整参考:如何授予用户管理Windows 2000
或键入服务的权限subinacl /help

注意:请勿尝试,subinacl /service SERVICE_NAME /perm因为它可能会给您带来麻烦(经验教训:P)。该名称可能会引起误解(perm!=权限),因为它会删除所有用户的所有权限(甚至是Admin!)。


抱歉,无法合并SO和SF帐户。
斩波器

@ Chopper3感谢您的回复。实际上,我有2个SO帐户:一个已注册并与此SF帐户关联;另一个 另一个是我在注册之前拥有的未注册 SO帐户(使用了相同的电子邮件地址)。我希望两者可以合并,这样我就可以跟踪我之前做过的帖子。如这里提到的我试图标记一个帖子,但是不能这样做(1名)。这就是为什么我标记此帖子。我还试图在两个多星期前给team@stackoverflow.com发送电子邮件,但没有得到任何回应。你能把我带到正确的地方吗?
patrx 2011年

1
在MSDN上检查此过程的详细信息:support.microsoft.com/?
kbid=288129

4

您正在寻找计算机配置-策略-Windows设置-安全设置-系统服务

在这里,您不仅可以定义服务启动类型,还可以为每个服务配置安全ACL。默认情况下,该界面仅列出运行GP Editor的计算机上安装的服务。

要添加仅在另一台计算机上存在的服务:

  • 从另一台计算机导出服务的reg密钥
  • 在gpedit机器上导入
  • 适用政策
  • 删除导入的密钥

我相信您的意思是通过进行操作gpedit.msc,因为“管理服务器”窗口未列出策略节点。如果是这样,我看不到你上面建议它引用“系统服务”安全设置节点下一个项目,无论是Server 2008或Server 2003上
abitgone

是啊。我假设您打算通过组策略进行这些更改。
Ryan Bolger

1
确实-这些不是成员服务器。有没有一种使用本地策略或其他方法来实现此目标的方法?
凌晨

2

我使用SubinAcl(如patrx的建议)能够以普通域用户(而不是admin)启动MySQL,它运行得非常完美!(不过,该命令至少需要以-local身份执行-Admin)

该命令是:

[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP

只需注意,我输入的用户没有在域前添加前缀...否则命令在解析命令时失败!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.