我意识到这与这个问题几乎相同,但最大的区别在于 MSKB 文章中描述的方法不适用于已安装的 Tomcat 服务。它们适用于简单的 Windows 服务,但不适用于我们需要控制的 Tomcat 服务。
还有什么想法吗?
编辑(详细信息):如果我有 100 个 Tomcat 容器服务,我是否必须为每个服务明确授予组此权限?有没有办法让 DOMAIN 组设置为有权在 15 台机器上停止/启动 100 个不同的 Tomcat 服务?
编辑(更多信息):我们正在使用 Ant sshexec (jsch) 并在调用 net stop service_name 时获得 Access Denied 错误级别 5。
我不确定您以前尝试过什么,但这是我刚刚做的并取得了成功:
1) 下载 Tomcat 5.5.27 Windows 服务安装程序并安装。
2) 使用“sc sdshow tomcat5”转储 TomCat5 服务安全描述符,这向我展示了:
这是一个非常常见的服务安全描述符。我已经在某些 Microsoft 服务上逐字逐句地看到它。SYSTEM 和内置管理员具有“完全控制权”,“高级用户”可以停止、启动和暂停服务,“身份验证用户”可以查询服务的属性(我在这里略作掩饰)。
3)我在我的盒子上创建了一个名为“bob”的受限用户,以他的身份打开了一个“RUNAS”命令提示符,并从“WHOAMI /ALL”(一个在 Windows Server 2003 上但不在 XP 上的命令)获得了他的 SID。 . 不知道关于 Vista 和 Windows 7 的想法)。我验证 Bob 无法停止/启动 Tomcat 服务(使用“NET STOP tomcat5”)。我收到了您在帖子中报告的相同错误。
4)从我的常规管理员命令提示符中,运行以下命令:
此 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。
您可以设置一个 Windows 调度程序作业来运行该命令。可以设置调度程序作业以在其他用户的凭据下运行命令。然后,您可以设置作业的安全性,以便只有特定的一组用户可以运行它。
您需要管理员权限才能创建计划任务,但您可以授予其他人运行它的权限。即使它是计划任务,您也可以将其设置为仅按需运行。
例如,假设您创建了一个名为:StartTomcat 的作业(打开控制面板>计划任务,然后右键单击并选择新建>计划任务)
转到“任务”选项卡。
将“Run”和“Start in”值设置为启动 Tomcat 的命令行。还将“运行方式”行设置为允许启动和停止 Tomcat 的用户,然后单击“设置密码...”按钮以提供用户密码。最后,取消选中 Enabled 框,因为您只想按需运行作业。
然后转到“安全”选项卡。
添加您希望允许运行任务的人员,并仅授予他们对任务的“读取和执行”权限。
最后,创建一个批处理文件来执行任务。批处理文件将包含以下行:
schtasks /run /tn 启动Tomcat
将批处理文件放在需要运行它的用户可以访问的位置。甚至可以将批处理文件放在单独的机器上,但您需要在 schtasks 行中添加一些附加参数。您可以在 Windows 帮助中查找这些参数。
您需要找出是什么让这些 Tomcat 服务如此特别,以至于在 Windows 中控制它们的常规方法不起作用。他们怎么不工作?它只是一个拒绝访问的问题吗?如果是这样,ProcMon将非常有助于确定需要授予访问权限的具体位置。