Размещение и безопасность поставщика

Свойство HostingModel в экземпляре __Win32Provider , представляющем поставщика, указывает модель размещения поставщика. Задание этого свойства приводит к загрузке поставщика в процесс общего узла с заданным уровнем привилегий.

Процесс узла общего поставщика

WMI находится на узле общей службы с несколькими другими службами. Чтобы избежать остановки всех служб при сбое поставщика, поставщики загружаются в отдельный хост-процесс с именем "Wmiprvse.exe". Может быть запущено несколько процессов с таким именем. Каждая из них может работать под разными учетными записями с разными разными параметрами безопасности. Имейте в виду, что, начиная с Windows Vista, используйте команду winmgmt для запуска WMI в отдельном процессе с помощью фиксированного порта. Дополнительные сведения см. в статье Удаленное подключение к WMI, начиная с Vista.

Общий узел может выполняться под одной из следующих системных учетных записей в процессе Wmiprvse.exe узла:

Поставщик также может быть локальным COM-сервером (.exe) или локальным, для которого не требуется узел поставщика WMI.

Настройка модели размещения

Так как LocalSystem является привилегированной учетной записью, рекомендуется задать для HostingModel значение NetworkServiceHost , если поставщик работает в Wmiprvse.exe процессе. Учетная запись NetworkServiceHost предназначена для служб, которым не требуются обширные привилегии, но которым требуется удаленное взаимодействие с другими системами.

Если не задать значение для свойства HostingModel , WMI установит значение по умолчанию NetworkServiceHostOrSelfHost. Если для параметра HostingModel задано значение LocalSystemHost, WMI использует трассировку для создания событий 5603 и 5604 в журнале событий Windows. Так как локальная учетная запись LocalSystem имеет высокий привилегии, этот параметр не рекомендуется. Эти события можно просмотреть в Просмотр событий. Дополнительные сведения см. в разделе Трассировка действия WMI.

Задайте для свойства HostingModel для несвязанных поставщиков значение Decoupled:Com. Поставщики, созданные путем добавления классов инструментирования из Microsoft.Management.Infrastructure в платформа .NET Framework, являются несвязанными поставщиками. (System.Management.Instrumentation больше не поддерживается.) Дополнительные сведения о создании несвязанного поставщика см. в разделе Включение поставщика в приложение.

Модель размещения указывается в свойстве HostingModel экземпляра __Win32Provider , представляющего поставщика.

Настройка модели размещения для поставщика

  1. В MOF-файле, который определяет поставщика, создайте экземпляр __Win32Provider.

  2. Назначьте имя поставщику в свойстве Name , а идентификатор класса (CLSID) COM-объекта поставщика — свойству Clsid .

    В следующем примере кода имя присваивается свойству Name , а CSLID COM-объекта поставщика — свойству Clsid .

    Instance of __Win32Provider as $NewProvider
    {
        Name = "MyProvider";
        Clsid = "{.......}";
    }
    
  3. Назначьте соответствующее значение общего узла свойству HostingModel . Общие значения узла, такие как NetworkServiceHost, определяются в свойстве HostingSpecificationкласса MSFT_Providers .

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

    HostingModel = "NetworkServiceHost";
    

В следующем примере кода показано, как зарегистрировать поставщика в NetworkServiceHost.

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost";
}

Если у вас несколько поставщиков, их можно сгруппировать в определенный узел службы, зарегистрировав поставщика, чтобы он находился в определенном экземпляре.

В следующем примере кода также регистрируется поставщик в NetworkServiceHost. Класс MSFT_Providers определяет значения для двух значений, которые объединяются для создания свойства __Win32ProviderHostingModel . В этом примере значение NetworkServiceHost происходит из свойства HostingSpecificationMSFT_Providers а LocalServiceHost — из свойства HostingGroup .

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost:MySharedHost";
}

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

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

Значения HostingModel для поставщиков In-Process

В следующем списке перечислены значения модели размещения поставщика для использования в экземпляре __Win32Provider для поставщиков, которые выполняются в процессе Wmiprvse.exe.

Значение в __Win32Provider.HostingModel Описание
SelfHost Поставщик начинает использовать реализацию локального сервера вместо внутрипроцессного. Контекст безопасности процесса, в котором выполняется поставщик, определяет контекст безопасности поставщика.
LocalSystemHost Поставщик, если он реализован как внутрипроцессный, загружается на узел общего поставщика, работающий в контексте LocalSystem . Начиная с Windows Vista LocalSystemHost больше не является моделью размещения по умолчанию, если HostingModel поставщика WMI (__Win32Provider. Свойство HostingModel ) не указано. Дополнительные сведения см. в разделе Безопасность моделей размещения.
LocalSystemHostOrSelfHost Поставщик размещается локально или загружается в процесс Wmiprvse.exe, выполняемый под учетной записью LocalSystem . Так как LocalSystem является учетной записью с высоким уровнем привилегий, в журнале событий Security NT создается запись, уведомляющая администраторов о поставщике, работающем в этом доверенном состоянии.
NetworkServiceHost Поставщик, если он реализован как внутрипроцессный, загружается в процесс Wmiprvse.exe, выполняемый под учетной записью NetworkService . Начиная с Windows Vista, это модель размещения по умолчанию, если HostingModel поставщика WMI (__Win32Provider. Свойство HostingModel ) не указано. Дополнительные сведения см. в разделе Безопасность моделей размещения.
NetworkServiceHost имеет ограниченные привилегии и, следовательно, снижает вероятность повышения привилегий атаки. Если поставщик работает только на локальном компьютере, задайте для свойства HostingModel значение LocalServiceHost.
NetworkServiceHostOrSelfHost Поставщик находится в локальном расположении или загружается в процесс WmiPrvse.exe, выполняемый под учетной записью NetworkService . NetworkServiceHostOrSelfHost — это конфигурация по умолчанию, если свойство HostingModel в __Win32Provider имеет значение NULL. Так как по умолчанию используется networkServiceHostOrSelfHost , поставщики из более ранних операционных систем могут продолжать работать в операционных системах Windows Vista, Windows Server 2008 и более поздних версий.
LocalServiceHost Поставщик, если он реализован как внутрипроцессный, загружается в процесс Wmiprvse.exe, выполняемый под учетной записью LocalService . Это рекомендуемая модель размещения для служб, так как LocalService имеет ограниченные привилегии.

Значения HostingModel для развязанных поставщиков

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

Decoupled:Com

Поставщик — это отдельный поставщик, размещенный в отдельном процессе, который является клиентом для WMI.

В следующем примере показан описатель FoldIdentity для свойства HostingModel , для которого задано значение FALSE, что позволяет поставщику олицетворить клиента.

Decoupled:Com:FoldIdentity(FALSE)

Если FoldIdentity не указан, значение FoldIdentity по умолчанию имеет значение TRUE . В целях безопасности рекомендуется не указывать FoldIdentity(FALSE), так как неправильное приложение с олицетворением делегата может повлиять на весь домен.

В следующем примере показано рекомендуемое свойство HostingModel , эквивалентное установке FoldIdentity(TRUE).

Decoupled:Com

Decoupled:Noncom

Только для внутреннего использования. Не поддерживается.

Безопасность моделей размещения

В большинстве случаев LocalSystem не требуется, и контекст NetworkServiceHost является более подходящим. Большинство поставщиков WMI должны олицетворять контекст безопасности клиента для выполнения запрошенных операций от имени клиента WMI. Начиная с Windows Vista, поставщик WMI, у которых отсутствует определение модели размещения и выполняется так, как если бы он выполнялся в LocalSystem, не будет работать должным образом. Чтобы исправить эту ситуацию, измените ожидаемую модель размещения и убедитесь, что код поставщика WMI выполняет операции в контексте безопасности клиента путем олицетворения клиента WMI. LocalSystem редко является обязательным требованием. Если у поставщика должен быть такой уровень привилегий, укажите модель размещения с помощью следующей инструкции в MOF-файле.

HostingModel=LocalSystemHost

Выбор правильной регистрации

Доступ к пространствам имен WMI

Защита пространств имен WMI

Классы конфигурации поставщика и устранения неполадок

MSFT_Providers

Обеспечение безопасности WMI