Установка уровня безопасности процесса по умолчанию с помощью 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

Вы можете изменить уровень проверки подлинности в скрипте с помощью строки моникера , а также объектов 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
Моникер: Connect
Проверяет подлинность учетных данных клиента только в том случае, если клиент устанавливает связь с сервером.
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\ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ\Microsoft\WBEM\Сценариев\Уровень олицетворения по умолчанию

По умолчанию для раздела реестра задано значение 3, указывающее уровень олицетворения олицетворение. Для некоторых поставщиков может потребоваться более высокий уровень олицетворения.

Доступ к объекту SWbemSecurity в VBScript

Уровень олицетворения также можно задать из объекта безопасности SWbemSecurity , который отображается как свойство Security_ объектов SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath и SwbemLocator .

WMI передает параметр безопасности родительского объекта потомкам исходного объекта. Таким образом, можно задать уровень олицетворения объекта SWbemServices после входа в WMI и вызовы API с помощью этого объекта или объектов, созданных из него, таких как объекты типа SWbemObject.

Подключение к WMI на удаленном компьютере

Защита клиентов сценариев