2010-02-10 67 views
5

我有一台运行IIS 6的Windows 2003服务器,并且有一些脚本可以自动设置和创建网站。他们并没有在我调试的新服务器上工作(他们已经在另外3台W2K3服务器上开心地工作)。该问题似乎归结为IIS提供程序上的WMI安全性。下面的ASP代码代表了这个问题(尽管这不是导致问题的原始代码 - 这是对问题的简单演示)。从ASP访问IIS WMI提供程序的访问被拒绝错误

Set wmiProvider = GetObject("winmgmts:\\.\root\MicrosoftIISv2") 
If wmiProvider is Nothing Then 
Response.Write "Failed to get WMI provider MicrosoftIISv2<br>" 
End If 

Response.Write "Querying for IISWebService...<br>" 
Set colItems = wmiProvider.ExecQuery("Select * From IISWebServer",,0) 
Response.Write "Error: " & Hex(Err.Number) & " (" & Err.Description & ")<br>" 

如果我在浏览器中运行此操作,我会在ExecQuery调用之后报告访问被拒绝的错误。我已经为根分支的IUSR_用户设置了WMI访问权限。事实上,我可以非常高兴地使用CIMV2提供程序查询IP地址信息。如果我把IUSR用户放在机器管理员组中,这一切都可以工作,但我真的不想那么做。

这必须是DCOM/WMI安全问题,但我无法弄清楚还有什么。任何人都可以摆脱光线吗?

+0

您将需要通过明确的凭据,这些脚本因为运行他们需要很高的权限 – Lizz 2012-10-31 08:46:50

+1

你能显示确切的错误吗?另外,Windows日志中是否有任何记录事件? – 2013-03-24 03:27:21

回答

0

如果这是你打算为自己或您的管理员(相对于未洗匿名群众)的工具运行的东西,这是我在过去(因人而异)使用方法:

  1. 建立一个新的目录在您的网站(例如:/ SiteCreate),把你的WMI脚本,有
  2. 配置有适当的权限(可能是管理员在这种情况下,但你应该使用什么是有关你的应用程序)的Windows用户
  3. 转到off匿名访问您在步骤1中创建的目录然后设置的安全性,只允许你在步骤2中创建的用户访问(在认证打开该目录)

现在,当你导航到你的浏览器的目录,你会看到一个登录提示。当您输入您在步骤2中创建的用户名/密码时,您的脚本将具有执行WMI请求的适当权限。

1

在阅读G. Stoynev的评论,询问是否有任何事件记录在Windows日志中时,我检查了我试图通过WMI远程访问IIS的服务器上的事件日志,并且看到我发现了一个事件用以下文字:

访问到root \ WebAdministration命名空间被拒绝,因为命名空间打上RequiresEncryption但脚本或应用程序试图与下面PKT_PRIVACY验证级别连接到该命名空间。将身份验证级别更改为Pkt_Privacy并再次运行脚本或应用程序。

请参阅this answer中的代码到相关的SO问题c# - "Access is denied" Exception with WMI

下面是一些例子C#代码,我补充说,似乎解决这个问题对我来说:

ConnectionOptions options = new ConnectionOptions(); 
options.Authentication = AuthenticationLevel.PacketPrivacy; 
ManagementScope managementScope = new ManagementScope(@"\\remote-server\root\WebAdministration", options); 
// ... 
0

不是DCOM的问题,更何况一个WMI安全和加密问题。尝试改变GetObject的绰号,包括模拟和pktPrivacy,如:

Set wmiProvider = GetObject("winmgmts:{impersonationLevel=impersonate;authenticationLevel=pktPrivacy}!\root\MicrosoftIISv2")

请参阅以下的MS文章的详细信息: http://msdn.microsoft.com/en-us/library/aa393618(v=vs.85).aspx