我意识到这几乎等同于这个问题但最大的区别在于 MSKB 文章中描述的方法不适用于已安装的 Tomcat 服务。它们适用于简单的 Windows 服务,但不适用于我们需要控制的 Tomcat 服务。
还有其他想法吗?
编辑(详细信息):如果我有 100 个 Tomcat 容器服务,我是否必须为每个服务的组明确授予此权限?有没有办法设置一个 DOMAIN 组,使其有权在 15 台计算机上停止/启动 100 个不同的 Tomcat 服务?
编辑(更多信息):我们正在使用 Ant sshexec(jsch),并在调用 net stop service_name 时获得访问被拒绝错误级别 5。
答案1
我不确定您之前尝试过做什么,但这是我刚刚做并取得成功的方法:
1)下载Tomcat 5.5.27 Windows服务安装程序并安装它。
2)使用“sc sdshow tomcat5”转储 TomCat5 服务安全描述符,它向我显示了:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
这是服务的一个非常常见的安全描述符。我在一些 Microsoft 服务上看到过它。SYSTEM 和内置管理员拥有“完全控制权”,“高级用户”可以停止、启动和暂停服务,而“经过身份验证的用户”可以查询服务的属性(我在这里略过了)。
3) 我在我的机器上创建了一个名为“bob”的受限用户,以他的身份打开了“RUNAS”命令提示符,并从“WHOAMI /ALL”(Windows Server 2003 上有这个命令,但 XP 上没有这个命令……我不太清楚 Vista 和 Windows 7 是否也如此)获取了他的 SID。我确认 Bob 无法停止/启动 Tomcat 服务(使用“NET STOP tomcat5”)。我收到了您在帖子中报告的相同错误。
4)从我的常规管理员命令提示符运行以下命令:
sc sdset tomcat5 D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWPDT;;;S-1-5-21-1409082233-484763869-854245398-1009)
此 SDDL 字符串授予 Bob 的 SID(S-1-5-21-1409082233-484763869-854245398-1009)停止、启动和暂停服务(分别为 RP、WP 和 DT)的权限。
5)我返回到我的“Bob”命令提示符并验证我现在可以使用 NET STOP 和 NET START 停止和启动该服务。
我建议创建一个组来委托这个权利,将用户放入该组中,获取该组的 SID(使用 WHOAMI 或任何其他工具)并以此方式修改安全描述符。
我认为使用组策略修改安全描述符会很好。我见过一些服务不喜欢基于组策略的修改对服务施加的默认权限的情况(如果您想了解我在说什么,请查看有关 Windows Search 服务的这篇帖子:http://peeved.org/blog/2007/12/07),但根据我的经验,这种情况并不常见。
如果您想了解有关服务安全描述符的更多背景信息,请查看http://msmvps.com/blogs/alunj/archive/2006/02/13/83472.aspx和http://support.microsoft.com/kb/914392。
答案2
您可以设置 Windows 调度程序作业来运行该命令。可以设置调度程序作业以在其他用户的凭据下运行命令。然后,您可以设置作业的安全性,以便只有特定一组用户可以运行它。
您需要管理员权限才能创建计划任务,但您可以授予其他人运行该任务的权限。尽管这是一项计划任务,但您可以将其设置为仅按需运行。
例如,假设您创建了一个名为 StartTomcat 的作业(打开控制面板>计划任务,然后右键单击并选择新建>计划任务)
转到“任务”选项卡。
将“运行”和“启动于”值设置为启动 Tomcat 的命令行。同时将“运行身份”行设置为允许启动和停止 Tomcat 的用户,然后单击“设置密码...”按钮以提供用户的密码。最后,消除取消勾选“已启用”框,因为您只想按需运行该作业。
然后转到“安全”选项卡。
添加您要允许运行任务的人员,并授予他们仅有的任务的“读取和执行”权限。
最后,创建一个批处理文件来执行该任务。该批处理文件将包含以下行:
schtasks /run /tn 启动Tomcat
将批处理文件放在需要运行它的用户可以访问的位置。甚至可以将批处理文件放在单独的机器上,但您需要在 schtasks 行中添加一些其他参数。您可以在 Windows 帮助中查找这些参数。
答案3
您需要找出是什么让这些 Tomcat 服务如此特殊,以至于在 Windows 中控制它们的常规方法不起作用。它们为什么不起作用?这只是一个访问被拒绝的问题吗?如果是这样,进程监控对于确定需要授予访问权限的具体位置非常有用。