首页 文章

从ASP访问IIS WMI提供程序的访问被拒绝错误

提问于
浏览
5

我有一台运行IIS 6的Windows 2003服务器,并且有一些自动设置和创建网站的脚本 . 他们没有在我调试的新服务器上工作(他们已经在其他3台W2K3服务器上工作愉快) . 问题似乎归结为IIS提供程序上的WMI安全性 . 下面的ASP代码表示问题(虽然它不是导致问题的原始代码 - 这是问题的简化演示) .

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调用后报告访问被拒绝错误 . 我已经从Root分支一直为IUSR_用户设置了WMI访问权限 . 事实上,我可以非常愉快地使用CIMV2提供商查询IP地址信息 . 如果我把IUSR用户放在机器管理员组中,它一切正常,但我真的不想这样做 .

这必须是DCOM / WMI安全问题,但我无法解决其他问题 . 谁能摆脱任何光明?

3 回答

  • 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

    如果这是您打算作为自己或管理员工具运行的东西(而不是未清洗的匿名群众),这是我过去使用的一种方式(YMMV):

    • 在您的网站中设置一个新目录(例如/ SiteCreate)并将WMI脚本放在那里

    • 配置具有适当权限的Windows用户(在这种情况下可能是admin,但您应该使用与您的应用相关的任何内容)

    • off 匿名访问您在步骤1中创建的目录,然后将安全性设置为仅允许您在步骤2中创建的用户访问(打开该目录的身份验证)

    现在,当您在浏览器中导航到该目录时,您应该获得登录提示 . 当您输入在步骤2中创建的用户名/密码时,您的脚本将拥有执行WMI请求的相应权限 .

  • 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

相关问题