向Windows服务控制管理器(SCM)提供IIS/PHP特权

3

我正在调用一个PHP函数来访问Windows 7服务的状态,如下所示:

win32_query_service_status($service_name);

在本地安装的WAMP实例下运行时,该函数会返回一个预期的信息数组。
在IIS下运行时,我得到了一个错误状态码5,根据文档,这对应以下错误:
WIN32_ERROR_ACCESS_DENIED   0x00000005
The handle to the SCM database does not have the appropriate access rights.

因此,我使用 phpinfo() 来检查 PHP 环境正在运行的用户名。在 WAMP 站点上,服务正在使用我的用户 ID(该用户属于 Windows 本地管理员组)运行。
在 IIS 版本下,该用户为 F6729-44TP6S7$ (这是我的计算机名称,后跟一个 $)。因此,解决方案可能就是在 Windows 的服务控制管理器(SCM)上授予该用户必要的权限。
问题在于,我不了解 IIS(或 Windows)的内部工作原理,不知道该用户 ID 是从哪里来的(这意味着我不知道如何授予它所需的权限)。该用户不存在于我的计算机管理控制台中,我也找不到它在 IIS 管理工具中的定义位置。 因此问题是:我需要做什么才能让此 PHP 函数在 IIS 下运行?如何为 IIS 下的 PHP 管理器授予必要的权限?或者,如何更改 PHP 管理器运行的用户 ID?

我认为这不是一个有效的解决方案,但如果你没有其他选择,你可以使用服务控制器(SC.exe)来授予特定用户/组的权限。你可以使用 sc sdshow 获取当前的 SSDL,然后使用添加的权限进行 sc sdset。根据你要做什么,查询一个服务可能只需要访问 scmanager 的权限:sc sdset scmanager (SSDL)。http://technet.microsoft.com/en-us/library/cc742037%28v=ws.10%29.aspx - JoeBilly
2
这是您问题的官方文档:http://msdn.microsoft.com/en-us/library/aa954062.aspx - Dharmesh Patel
1个回答

3

显然,这只是一个知道该如何谷歌搜索的问题。一旦你知道你要搜索什么,就更有可能找到它。

https://serverfault.com/questions/232907/wcf-service-hosted-in-iis7-with-administrator-rights

答案是:
在IIS管理器中,转到:
Sites > [您的网站]
在IIS子部分下的“功能”视图中
身份验证 > 匿名身份验证 > [右键单击“编辑...”] > 选择:应用程序池标识[确定]
这允许匿名连接到网站,在操作系统级别上以管理员用户身份运行PHP(和其他IIS服务)。
如果有人想复制这个答案或向您的答案添加任何有用的信息来获取赏金,请随意。因为因果报应。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接