Настройка уровня безопасности процесса по умолчанию с помощью VBScript
Скрипт может использовать параметры проверки подлинности и олицетворения WMI по умолчанию. Однако скрипту может потребоваться подключение с большей безопасностью или подключение к пространству имен, которому требуется зашифрованное подключение. Дополнительные сведения см. в разделе Настройка дескрипторов безопасности пространства имен и Требования зашифрованного подключения к пространству имен.
В самом простом случае скрипт может использовать параметры проверки подлинности и олицетворения по умолчанию. WMI обычно выполняется в узле общей службы и использует ту же проверку подлинности, что и другие процессы в узле. Если вы хотите запустить процесс WMI с другим уровнем проверки подлинности, запустите WMI с помощью команды winmgmt с параметром /standalonehost и в целом задайте уровень проверки подлинности для WMI. Дополнительные сведения см. в разделе Поддержка безопасности WMI.
В следующем сценарии используются параметры по умолчанию для олицетворения и уровней проверки подлинности.
strComputer = "."
Set objServices = GetObject("winmgmts:\\" _
& strComputer & "\root\CIMV2")
set objProcessSet = objServices.ExecQuery _
("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
WScript.Echo Process.Name
Next
Вы также можете использовать моникер в вызове функции GetObjectи задать настройки безопасности по умолчанию, как показано в следующем примере.
strComputer = "."
Set objServices = GetObject( _
"winmgmts:{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!root/cimv2")
set objProcessSet = objServices.ExecQuery _
("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
WScript.Echo Process.Name
Next
Дополнительные сведения о настройке различных уровней олицетворения или проверки подлинности в скрипте или настройке значений по умолчанию для компьютера см. в следующих разделах:
- Изменение учетных данных аутентификации по умолчанию с помощью VBScript
- изменение параметров олицетворения по умолчанию с помощью VBScript
- Настройка уровня имперсонации по умолчанию с помощью реестра
- Доступ к объекту "SWbemSecurity" в VBScript
- SWbemSecurity
Изменение учетных данных проверки подлинности по умолчанию с помощью VBScript
Вы можете изменить уровень проверки подлинности в скрипте с помощью строки и объектов SWbemLocator и SWbemSecurity .
Уровень проверки подлинности должен быть задан в соответствии с требованиями целевой операционной системы, к которой вы подключаетесь. Дополнительные сведения см. в разделе Подключение между разными операционными системами.
В следующем примере кода VBScript показано, как изменить уровень проверки подлинности в скрипте, который получает данные свободного места с удаленного компьютера с именем Server1.
strComputer = "Server1"
Set objWMIService = GetObject("winmgmts:{authenticationLevel=Pkt}!\\" _
& strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")
For each objDisk in colDisks
Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID & vbNewLine & _
"FreeSpace: " & vbTab & objDisk.FreeSpace
NextstrComputer = "."
Set objServices = GetObject( "winmgmts:{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!root/cimv2")
Set objProcessSet = objServices.ExecQuery("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
WScript.Echo Process.Name
Next
Next
В подключениях скрипта к WMI используйте короткое имя, показанное в столбце "Имя/описание идентификатора" этой таблицы ниже. Например, в следующем скрипте для уровня проверки подлинности задано значение WbemAuthenticationLevelPktIntegrity.
SetobjWMIService = GetObject( _
"winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")
В следующей таблице перечислены уровни проверки подлинности, которые можно задать. Эти уровни определены в Wbemdisp.tlb в перечислении WbemAuthenticationLevelEnum.
Имя/значение | Описание |
---|---|
WbemAuthenticationLevelDefault 0 |
Моникер: по умолчанию WMI использует параметр проверки подлинности Windows по умолчанию. Это рекомендуемый параметр, позволяющий WMI согласовывать уровень, требуемый сервером для возвращаемых данных. Однако если для пространства имен требуется шифрование, используйте WbemAuthenticationLevelPktPrivacy. |
WbemAuthenticationLevelNone 1 |
Моникер: Нет Не использует проверку подлинности. |
WbemAuthenticationLevelConnect 2 |
Моникер: Подключение Проверяет подлинность учетных данных клиента, только если клиент устанавливает связь с сервером. |
WbemAuthenticationLevelCall 3 |
Вызов Выполняет проверку подлинности только в начале каждого вызова, когда сервер получает запрос. |
WbemAuthenticationLevelPkt 4 |
Моникер: Pkt Проверяет подлинность всех полученных данных от ожидаемого клиента. |
WbemAuthenticationLevelPktIntegrity 5 |
Моникер: PktIntegrity Проверяет подлинность и проверяет, что данные, передаваемые между клиентом и сервером, не были изменены. |
WbemAuthenticationLevelPktPrivacy 6 |
Моникер: PktPrivacy Выполняет проверку подлинности всех предыдущих уровней олицетворения и шифрует значение аргумента каждого удаленного вызова процедуры. Используйте этот параметр, если пространство имен, к которому вы подключаетесь, требует зашифрованного соединения. |
Чтобы убедиться, что вызов был успешным, проверьте возвращаемое значение после изменения уровня проверки подлинности.
Например, так как локальные подключения всегда имеют уровень проверки подлинности wbemAuthenticationLevelPktPrivacy, следующий пример не может задать уровень проверки подлинности, так как он подключается к локальному компьютеру.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!" _
& "\\" & strComputer & "\root\cimv2")
Поставщик может задать безопасность в пространстве имен, чтобы данные не возвращались, если в подключении к пространству имен не используется конфиденциальность пакетов (PktPrivacy). Это гарантирует, что данные шифруются по мере пересечения сети. При попытке установить более низкий уровень проверки подлинности вы получите сообщение об отказе в доступе. Для получения дополнительной информации см. как обеспечить безопасность пространств имен WMI.
Изменение уровней олицетворения по умолчанию с помощью VBScript
При вызове API сценариев для WMI рекомендуется использовать значения по умолчанию, которые WMI предоставляет для уровня олицетворения. Удаленные вызовы и некоторые поставщики с несколькими сетевыми переходами требуют более высокого уровня олицетворения, чем это предусмотрено в WMI. Если уровень олицетворения недостаточно, поставщик может отказаться от запроса или предоставить неполные сведения.
Если уровень олицетворения не задан в монике или путем установки SWbemSecurity.ImpersonationLevel на защищаемом объекте, тогда задайте уровень олицетворения DCOM по умолчанию для операционной системы. Уровень олицетворения должен быть задан в соответствии с требованиями целевой операционной системы, к которой вы подключаетесь. Дополнительные сведения см. в разделе Подключение между разными операционными системами.
В следующем примере кода VBScript показано изменение уровня олицетворения в том же скрипте, показанном выше.
strComputer = "Server1"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")
For each objDisk in colDisks
Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID & vbNewLine & _
"FreeSpace: " & vbTab & objDisk.FreeSpace
Next
В следующей таблице перечислены уровни проверки подлинности в WbemImpersonationLevelEnum, которые используются.
Имя/значение | Описание |
---|---|
wbemImpersonationLevelAnonymous 1 |
Моникер: Анонимный Скрывает учетные данные вызывающей стороны. Вызовы WMI могут завершиться ошибкой с этим уровнем олицетворения. |
wbemImpersonationLevelIdentify 2 |
Моникер: определение Позволяет объектам запрашивать учетные данные вызывающего объекта. Вызовы WMI могут завершиться ошибкой на этом уровне маскировки. |
wbemImpersonationLevelImpersonate 3 |
Моникер: олицетворения Позволяет объектам использовать учетные данные вызывающего объекта. Это рекомендуемый уровень олицетворения для API сценариев для вызовов WMI. |
wbemImpersonationLevelDelegate 4 |
Моникер: Делегат Позволяет объектам разрешать другим объектам использовать учетные данные вызывающего объекта. Это олицетворение будет работать со скриптовым API для вызовов WMI, но может представлять собой излишний риск для безопасности. |
В следующем примере показано, как задать имперсонацию в строке имени моникера при получении определенного экземпляра Win32_Process.
Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")
Дополнительные сведения см. в статье Создание приложения или скрипта WMI.
Настройка уровня олицетворения по умолчанию с помощью реестра
Если у вас есть доступ к реестру, вы можете также задать ключ реестра уровня олицетворения по умолчанию. Этот ключ указывает, какой уровень олицетворения использует скриптовый API для WMI, если не указано иное. Следующий путь определяет путь к реестру.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Сценарии\Уровень маскировки по умолчанию
По умолчанию для раздела реестра задано значение 3, указывающее уровень имитации. Для некоторых поставщиков может потребоваться более высокий уровень олицетворения.
Доступ к объекту SWbemSecurity в VBScript
Другим способом задать уровень олицетворения можно из объекта безопасности SWbemSecurity, который отображается как свойство Security_ для объектов SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPathи SwbemLocator.
WMI передает параметр безопасности родительского объекта потомкам исходного объекта. Поэтому можно задать уровень олицетворения объекта SWbemServices после входа в WMI и вызовы API, используя этот объект или объекты, созданные из него, например объекты типа SWbemObject.