abi*_*one 63 security windows permissions windows-service group-policy
我们在我们的服务器上运行了一套 Windows 服务,它们彼此独立地执行一系列自动化任务,除了一个服务负责其他服务。
如果其中一项服务未能响应或挂起,该服务将尝试重新启动该服务,如果在尝试期间抛出异常,则改为向支持团队发送电子邮件,以便他们可以自行重新启动该服务。
做了一些研究后,我遇到了一些“解决方案”,从KB907460 中提到的解决方法到提供服务运行管理员权限的帐户。
我对这两种方法都不满意 - 我不明白 Microsoft 知识库文章中概述的第一种方法的后果,但我绝对不想授予管理员访问服务运行的帐户的权限.
我快速浏览了本地安全策略,除了定义帐户是否可以作为服务登录的策略之外,我看不到任何其他看起来像是指服务的内容。
我们在 Server 2003 和 Server 2008 上运行它,所以任何想法或指示都会被慷慨地接收!
澄清:我不想授予给定用户或组启动/停止/重新启动所有服务的能力 - 我希望能够仅向给定用户或组授予对特定服务执行此操作的权限。
进一步说明:我需要授予这些权限的服务器不属于一个域——它们是两个面向 Internet 的服务器,它们接收文件、处理它们并将它们发送给第三方,以及为几个网站提供服务,所以Active Directory 组策略是不可能的。抱歉,我没有说得更清楚。
abi*_*one 53
除非您加入域,否则似乎没有基于 GUI 的方法来执行此操作 - 至少我无法在任何地方找到 - 所以我做了更多的挖掘,我找到了一个适用的答案我们的情况。
我不明白知识库文章中的字符串表示是什么意思,但经过一番挖掘,我发现它是 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)
Run Code Online (Sandbox Code Playgroud)
我们需要授予权限RP(启动服务)、WP(停止服务)、DT(暂停/继续服务)和LO(查询服务的当前状态)。这可以通过将我们的服务帐户添加到 Power Users 组来完成,但我只想授予对运行维护服务的帐户的个人访问权限。
使用runas在服务帐户下打开命令提示符,我运行whoami /all它给了我服务帐户的SID,然后在下面构造了额外的SDDL:
(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)
Run Code Online (Sandbox Code Playgroud)
然后将其添加到上面 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)
Run Code Online (Sandbox Code Playgroud)
然后使用sc sdset命令(在S:文本之前)将其应用于服务:
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)
Run Code Online (Sandbox Code Playgroud)
如果一切按计划进行,则可以启动、停止、暂停服务,并让由上述 SID 定义的用户查询其状态。
小智 34
我只是遇到了同样的问题。
您可以使用资源工具包中的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=TOPT = 开始服务
O = 停止服务
P = 暂停/继续服务
完整参考:如何授予用户在 Windows 2000
或类型中管理服务的权限subinacl /help
注意:不要尝试,subinacl /service SERVICE_NAME /perm因为它可能会给您带来麻烦(经验教训:P)。该名称可能具有误导性(perm != 权限),因为它会删除所有用户(甚至是管理员!)的所有权限。
| 归档时间: |
|
| 查看次数: |
177449 次 |
| 最近记录: |