Размещение и безопасность поставщика
Свойство 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 , представляющего поставщика.
Настройка модели размещения для поставщика
В MOF-файле, который определяет поставщика, создайте экземпляр __Win32Provider.
Назначьте имя поставщику в свойстве Name , а идентификатор класса (CLSID) COM-объекта поставщика — свойству Clsid .
В следующем примере кода имя присваивается свойству Name , а CSLID COM-объекта поставщика — свойству Clsid .
Instance of __Win32Provider as $NewProvider { Name = "MyProvider"; Clsid = "{.......}"; }
Назначьте соответствующее значение общего узла свойству 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
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по