我们有一套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
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编辑器的计算机上安装的服务。
要添加仅存在于另一台计算机上的服务:
我使用SubinAcl(patrxbuild议)能够以普通域用户(而不是pipe理员)身份启动MySQL,并且完美地工作! (然而命令需要至less作为-local执行 – pipe理员)
该命令是:
[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP
只要注意,我进入用户没有前缀与域…否则命令parsing命令失败!