Ошибка «Отказано в доступе» при доступе к провайдеру IIS WMI из ASP - PullRequest
5 голосов
/ 10 февраля 2010

У меня есть сервер Windows 2003 под управлением IIS 6 и несколько сценариев, которые выполняют автоматическую настройку и создание веб-сайтов. Они не работают на новом сервере, который я могу ввести в эксплуатацию (они уже успешно работают на 3 других серверах W2K3). Кажется, проблема сводится к безопасности WMI на провайдере IIS. Приведенный ниже код 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. Я установил WMI-доступ для пользователя IUSR_ из корневой ветки до конца. На самом деле, я вполне могу запросить информацию об IP-адресе с помощью поставщика CIMV2. Если я помещаю пользователя IUSR в группу администраторов компьютера, все это работает, но я не хочу этого делать.

Это должно быть проблема безопасности DCOM / WMI, но я не могу понять, что еще есть. Кто-нибудь может пролить свет?

Ответы [ 3 ]

1 голос
/ 14 января 2014

После прочтения комментария Г. Стойнева, спрашивающего, регистрировались ли какие-либо события в журналах Windows, я проверил журналы событий на сервере, к которому я пытаюсь получить доступ к IIS через WMI, и вот, я обнаружил событие с следующий текст:

Доступ к пространству имен root \ WebAdministration был запрещен, поскольку пространство имен помечено с помощью RequEncryption, но сценарий или приложение попытались подключиться к этому пространству имен с уровнем аутентификации ниже Pkt_Privacy. Измените уровень аутентификации на Pkt_Privacy и снова запустите скрипт или приложение.

См. Код в этом ответе на соответствующий вопрос SO c # - Исключение «Доступ запрещен» с WMI .

Вот пример кода C #, который я добавил, который, кажется, решил эту проблему для меня:

ConnectionOptions options = new ConnectionOptions();
options.Authentication = AuthenticationLevel.PacketPrivacy;
ManagementScope managementScope = new ManagementScope(@"\\remote-server\root\WebAdministration", options);
// ...
0 голосов
/ 25 апреля 2014

Не проблема 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

0 голосов
/ 19 июля 2013

Если это то, что вы намереваетесь использовать как инструмент для себя или своего администратора (в отличие от немытых анонимных масс), вот способ, который я использовал в прошлом (YMMV):

  1. Настройте новый каталог на своем веб-сайте (например, / SiteCreate) и разместите там свои скрипты WMI
  2. Настройка пользователя Windows с соответствующими правами (в данном случае, возможно, с правами администратора, но вы должны использовать все, что уместно для вашего приложения)
  3. Выключите , отключите анонимный доступ к каталогу, созданному на шаге 1, а затем настройте защиту, чтобы разрешить доступ только пользователю, созданному на шаге 2 (включите аутентификацию для этого каталога)

Теперь, когда вы перейдете к этому каталогу в вашем браузере, вы должны получить приглашение для входа в систему. При вводе имени пользователя / пароля, созданного на шаге 2, ваш сценарий будет иметь соответствующие права для выполнения ваших запросов WMI.

...