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

我们有一套Windows服务运行在我们的服务器上,它们执行一系列彼此独立的自动化任务,除了一个服务看起来在其他服务之外。

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

在做了一些研究之后,我遇到了一些解决scheme,从KB907460提到的解决方法到给服务运行pipe理员权限的帐户。

我对这两种方法中的任何一种都不太了解 – 我不明白微软知识库文章中提到的第一种方法的后果,但我绝对不希望pipe理员能够访问运行该服务的帐户。

我已经通过本地安全策略和定义一个帐户是否可以作为服务login的策略之外的其他内容进行了快速浏览,但是看不到其他任何与服务相关的内容。

我们在Server 2003和Server 2008上运行这个,所以任何想法或指针都会受到欢迎!


说明:我不想授予给所有用户或组启用/停止/重新启动所有服务的能力 – 我希望能够授予对特定用户或组的特定服务的权限。


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

    除非你join了一个域 – 至less不是我可以在任何地方find的,所以似乎没有一个基于GUI的方式来做到这一点,所以我做了更多的挖掘,我find了一个适用于我们的事情

    我不明白string表示在知识库文章中是什么意思,但是做了一些挖掘工作后,我发现它是SDDL语法。 进一步的挖掘让我看到了Alun Jones的这篇文章,它解释了如何获取服务的安全描述符以及每个位的含义。 MS KB914392有更多的细节。

    要附加到服务的现有安全描述符,请使用sc sdshow "Service Name"来获取现有的描述符。 如果这是一个普通的.NET Windows服务 – 就像我们的情况一样 – 安全描述符应该是这样的:

     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,然后构build下面的附加SDDL:

     (A;;RPWPDTLO;;;Sxx-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx) 

    然后将其添加到上面的SDDLstring的D:部分:

     D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP DTLO;;;Sxx-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;;;Sxx-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW RPWPDTLOCRSDRCWDWO;;;WD) 

    如果一切按计划进行,则服务可以被启动,停止,暂停,并由上述SID定义的用户进行状态查询。

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

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

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

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

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

    注意:不要尝试subinacl /service SERVICE_NAME /perm因为它可能会让你陷入麻烦(经验教训:P)。 名字可能会误导(perm!=权限),因为它会删除所有用户(甚至是pipe理员!)的所有权限。

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

    您不仅可以定义服务启动types,还可以为每个服务configuration安全ACL。 默认情况下,该界面将只列出您正在运行GP编辑器的计算机上安装的服务。

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

    • 从另一台机器导出服务的注册码
    • 在gpedit机器上导入
    • 应用这个策略
    • 删除导入的密钥

    我使用SubinAcl(patrxbuild议)能够以普通域用户(而不是pipe理员)身份启动MySQL,并且完美地工作! (然而命令需要至less作为-local执行 – pipe理员)

    该命令是:

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

    只要注意,我进入用户没有前缀与域…否则命令parsing命令失败!