Asp classic 访问被拒绝错误从ASP访问IIS WMI提供程序
我有一台运行IIS 6的Windows 2003服务器,还有一些脚本可以自动设置和创建网站。他们没有在一台新服务器上工作,他们已经在另外3台W2K3服务器上愉快地工作了。问题似乎归结为IIS提供程序上的WMI安全性。下面的ASP代码表示问题,尽管不是原始代码导致问题-这是问题的简化演示Asp classic 访问被拒绝错误从ASP访问IIS WMI提供程序,asp-classic,iis-6,wmi,access-denied,Asp Classic,Iis 6,Wmi,Access Denied,我有一台运行IIS 6的Windows 2003服务器,还有一些脚本可以自动设置和创建网站。他们没有在一台新服务器上工作,他们已经在另外3台W2K3服务器上愉快地工作了。问题似乎归结为IIS提供程序上的WMI安全性。下面的ASP代码表示问题,尽管不是原始代码导致问题-这是问题的简化演示 Set wmiProvider = GetObject("winmgmts:\\.\root\MicrosoftIISv2") If wmiProvider is Nothing Then Response.Wr
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_uu用户从根分支设置了WMI访问权限。事实上,我可以很高兴地使用CIMV2提供程序查询IP地址信息。如果我把IUSR用户放在machineadmins组中,这一切都会起作用,但我真的不想这么做
这一定是DCOM/WMI安全问题,但我无法确定还有什么其他问题。有人能解释一下吗?如果这是你打算为自己或你的管理员运行的工具,而不是未清洗的匿名群众,那么我在过去的YMMV中使用了以下方法: 在您的网站中设置一个新目录,例如/site创建并将WMI脚本放在那里 在这种情况下,请配置具有适当权限(可能是管理员)的Windows用户,但您应该使用与应用程序相关的任何内容 关闭对您在步骤1中创建的目录的匿名访问,然后将安全设置为仅允许您在步骤2中创建的用户访问打开该目录的身份验证
现在,当您在浏览器中导航到该目录时,应该会得到一个登录提示。当您输入在步骤2中创建的用户名/密码时,您的脚本将具有执行WMI请求的相应权限。在阅读G.Stoynev询问Windows日志中是否记录了任何事件的评论后,我检查了试图通过WMI远程访问IIS的服务器上的事件日志,瞧,我发现了一个事件,内容如下: 对root\WebAdministration命名空间的访问被拒绝,因为该命名空间被标记为RequireEncryption,但脚本或应用程序试图以低于Pkt_Privacy的身份验证级别连接到此命名空间。将身份验证级别更改为Pkt_Privacy,然后再次运行脚本或应用程序 请参见相关SO问题中的代码 下面是我添加的一些示例C代码,它似乎为我解决了这个问题:
ConnectionOptions options = new ConnectionOptions();
options.Authentication = AuthenticationLevel.PacketPrivacy;
ManagementScope managementScope = new ManagementScope(@"\\remote-server\root\WebAdministration", options);
// ...
不是DCOM问题,更是WMI安全和加密问题。尝试更改GetObject名字对象以包括模拟和pktPrivacy,例如: 设置wmiProvider=GetObjectwinmgmts:{impersonationLevel=impersonate;authenticationLevel=pktPrivacy}\root\microsoftisv2 有关更多信息,请参阅以下MS文章:
您需要为这些脚本传递显式凭据才能运行,因为它们需要高权限扫描您显示的确切错误。另外,Windows日志中是否记录了任何事件?