Поделиться через


Настройка безопасности для IWbemServices и других прокси-серверов

Хотя в C++ можно настроить безопасность во всем процессе, вызвав CoInitializeSecurity перед подключением к WMI через IWbemLocator::ConnectServer. Вы также можете изменить уровень аутентификации, уровень олицетворения или службу аутентификации в вызове, который получает указатель на прокси-сервер WMI, например IWbemServices или IWbemCallResult. Вызов CoSetProxyBlanket также позволяет изменить сервис аутентификации (Kerberos, NTLM или использовать метод согласования).

Скрипты и приложения Visual Basic устанавливают безопасность только для прокси-серверов косвенно с помощью вызовов SWbemServices и других объектов автоматизации. Дополнительные сведения о настройке и изменении проверки подлинности и олицетворения в скрипте см. в разделе Настройка уровня безопасности процесса по умолчанию с помощьюVBScript.

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

Клиентское приложение подключается к прокси-серверу WMI с помощью удостоверения. Удостоверение — это объект данных, состоящий из имени пользователя, пароля и настроек полномочий. Для клиентского приложения WMI вызов интерфейса IWbemLocator::ConnectServer создает исходную учетную запись. Метод ConnectServer принимает удостоверение в наборе трех параметров, которые можно установить как NULL, чтобы указать на текущего пользователя. Можно также указать параметр, отличный отNULL, чтобы указать определенного пользователя и домена. Если вызов выполнен успешно, ConnectServer возвращает указатель, с помощью которого можно получить доступ к различным удаленным процессам, таким как служба WMI или операционная система Windows напрямую.

Как и многие интерфейсы COM, ConnectServer возвращает указатель на прокси-сервер. Прокси-сервер — это объект данных, представляющий удаленный процесс, например WMI или удаленный поставщик. COM использует прокси-сервер для предоставления разработчикам доступа к удаленным данным, как если бы данные были локальными.

Следующие интерфейсы WMI используют прокси-серверы:

После получения указателя на удаленный процесс можно выполнить одно из двух действий. Если вы знаете, что делает процесс, вы можете установить настройки безопасности для указателя и получить доступ к процессу обычным образом. Это относится к большинству указателей на службу WMI. Дополнительные сведения см. в разделе Установление уровней безопасности для подключения WMI. Кроме того, необходимо получить доступ к другому COM-интерфейсу на прокси-сервере, например IUnknown::Release, через вызов интерфейса IUnknown на прокси-сервере.

Значения по умолчанию и рекомендации

Распределенная версия объектной модели компонента (DCOM) согласовывает службу проверки подлинности по умолчанию (Kerberos, NTLM или Negotiate), и вы не можете указать службу проверки подлинности по умолчанию с помощью CoInitializeSecurity. Указание RPC_C_AUTHN_DEFAULT в параметре службы проверки подлинности CoSetProxyBlanket позволяет DCOM выбрать соответствующую службу. Для удаленных подключений служба по умолчанию — "Согласование", которая является рекомендуемой службой для приложений, функционируют как в доменах Kerberos, так и в доменах, отличных от Kerberos. Для локальных подключений служба проверки подлинности по умолчанию — NT LAN Manager (NTLM).

В следующем примере кода показана используемая по умолчанию служба проверки подлинности.

// The pWbemServices variable is of type IWbemServices*

HRESULT hr = CoSetProxyBlanket(
     pWbemServices,                //Proxy
     RPC_C_AUTHN_DEFAULT,          //Authentication service 
     RPC_C_AUTHZ_DEFAULT,          //Authorization service 
     COLE_DEFAULT_PRINCIPAL,       //Server principal name used 
                                       // by authentication service
     RPC_C_AUTHN_LEVEL_DEFAULT,    //Authentication level
     RPC_C_IMP_LEVEL_IMPERSONATE,  //Impersonation level
     COLE_DEFAULT_AUTHINFO,       //Client identity
     EOAC_DEFAULT                  //Capability flags
     );

В примере кода в этом разделе требуются следующие директивы #include и ссылки.

#define _WIN32_DCOM
#include <wbemidl.h>
#include <comdef.h>

#pragma comment(lib, "wbemuuid.lib")

Для сценариев рекомендуется использовать значения по умолчанию, которые DCOM выбирает для удаленных вызовов. На локальном компьютере невозможно указать службу проверки подлинности для вызовов WMI. Дополнительные сведения см. в разделах Настройка службы проверки подлинности с помощью VBScript и Создание строки Moniker.