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

Я добавляю публикацию WMI к платформе .NET 3,5 основанных сервиса окон, которые работают в соответствии с учетной записью 'сетевой службы'.

Согласно документу я столкнулся на MSDN, учетная запись 'сетевой службы' должна по умолчанию иметь полномочия публикации WMI. ("По умолчанию читающим пользователям и группам разрешают опубликовать данные и события:... Сетевая служба...")

Однако, когда Инструментарий служебных вызовов. Опубликуйте (myStatusClassInstance), он бросает DirectoryNotFoundException;

System.IO.DirectoryNotFoundException was unhandled
Message: Could not find a part of the path 'C:\Windows\system32\WBEM\Framework\root\MyWMINamespace\MyService_SN__Version_1.0.3686.26280.cs'.

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

Какова лучшая фиксация/обходное решение для этого? Я могу переопределить целевой dir генерала кода в app.config или в коде? Я не хочу должным быть возиться с полномочиями файловой системы при развертывании сервиса...

Обновление: Я думаю, что это - 'функция', где более старый столкновения кода FX с более новыми настройками безопасности в Win7. Внутренне управляемые классы WMI получают каталог установки WMI из реестра и использование что как выходной путь для сгенерированного кода. К сожалению, много пользователей не разрешают (или предполагают к), материал записи под %SystemRoot %...... Я зарегистрировал ошибку подключения (#530392), чтобы видеть, может ли MSFT принести ясность и/или обеспечить фиксацию или обходное решение.

Обновление 2: я предполагаю, что для обычного пользователя считает, это не проблема, потому что виртуализация контроля учётных записей будет вталкивать и хранить файлы в другом месте. Однако, по-видимому, учетная запись 'сетевой службы' не покрыта виртуализацией контроля учётных записей.. (?)

Обновление 3: Добавленная щедрость на 550 ПБ. Простые ограничения: платформа .NET 3,5 основанных сервиса окон, работая как сетевая служба, должна смочь опубликовать данные через WMI с помощью Системы. Управление. Инструментарий на Win7 и Win2008[RTM & R2] с полномочиями/настройками безопасности по умолчанию и не обращаясь к изменению платформы внутреннее использование отражательное использование отражательных / членов парламента, не занимающих официального поста. 'Out-of-the-box', но чистые приветствующиеся решения. Откроет вторую связанную щедрость-Q, поскольку заполнитель еще для 550 ПБ раз так позволяет.

Обновление щедрости: Я намереваюсь удвоить щедрость для этого Q в течение секунды рука об руку вопрос, который будет служить заполнителем щедрости:
https://stackoverflow.com/questions/2208341/bounty-placeholder (<-По-видимому, это не было позволено, таким образом, вопрос о заполнителе щедрости был закрыт ТАК полиция этикета.)

Обновление 4: Это поправляется и лучше. Я заметил, что installutil писал недостающие файлы в c:\windows\syswow64...etc..., таким образом, я понял, что использовал 32-разрядную версию installutil для установки сервиса, но услуга работала как 64-разрядный процесс. Очевидный побочный эффект состоял в том, что код, сгенерированный, когда installutil работал, закончился под syswow64 (32-разрядный системный каталог), в то время как сервис искал его в соответствии с 64-разрядным системным каталогом (system32). (<-вне темы, но я действительно как то, как MSFT удалось передвинуть имена там... :)).

Таким образом, я пытался установить сервис с 64-разрядной версией installutil. Это потерпело полный провал с ошибками разрешения в %sysroot %\wbem\framework..., и т.д.... соединяют каналом. Затем я перекомпилировал сервис как x86 и зарегистрировал его снова использование 32-разрядной версии installutil. Это привело к совершенно новому исключению:

System.Exception: The code generated for the instrumented assembly failed to compile.
   at System.Management.Instrumentation.InstrumentedAssembly..ctor(Assembly assembly, SchemaNaming naming)
   at System.Management.Instrumentation.Instrumentation.Initialize(Assembly assembly)
   at System.Management.Instrumentation.Instrumentation.GetInstrumentedAssembly(Assembly assembly)
   at System.Management.Instrumentation.Instrumentation.GetPublishFunction(Type type)
   at System.Management.Instrumentation.Instrumentation.Publish(Object instanceData)
   at SomeService.InstanceClass.PublishApp(String name) in e:\work\clientname\SomeService\SomeService\WMIProvider.cs:line 44
   at SomeService.SomeServiceService..ctor() in e:\work\clientname\SomeService\SomeService\SomeServiceService.cs:line 26
   at SomeService.Program.Main() in e:\work\clientname\SomeService\SomeService\Program.cs:line 17

... ближе получение...

7
задан Community 23 May 2017 в 10:27
поделиться

3 ответа

Я считаю, что проблема не в публикации данных, а в том, что впервые регистрирует этот тип в WMI.

Если вы изучите код System.Management.Instrumentation в отражателе или другом дизассемблере, то увидите, что сборка, которая собирается опубликовать, еще не была зарегистрировано, то код попытается зарегистрировать сборку и сохранить информацию о сборке в специально названном подкаталоге в папке установки WBEM.

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

2
ответ дан 7 December 2019 в 12:20
поделиться

Проверяли ли вы свою сборку с помощью installutil ? Это должно дать вам журнал проблем с установкой. (Но поскольку вы не можете запустить его как учетную запись сетевой службы, он может не отображать проблему, с которой вы столкнулись.)

Вы уверены, что эта служба должна запускаться под учетной записью сетевой службы?

Из-за риска уязвимости при запуске служб Windows в привилегированных учетных записях Microsoft создала эти специальные учетные записи служб с некоторые ограничения, которые были усилены в Vista и Win7. Начиная с Vista, Microsoft ограничила количество служб, работающих под этой учетной записью, в пользу менее привилегированных (см. эту статью ). Учетная запись сетевой службы (также известная как «NT AUTHORITY \ NETWORK SERVICE») может получить доступ к сети (действуя как учетная запись локального компьютера PCNAME $), но она имеет ограниченные права на локальном компьютере (в отличие от учетной записи локальной системы).

Проверяли ли вы разрешения безопасности WMI для ветки, которую использует ваша сборка? Запустите wmimgmt.msc и покопайтесь ... Когда я быстро проверил несколько случайных веток, я увидел, что учетная запись сетевой службы не имеет прав на запись.

Наконец, я бы предложил использовать Sysinternals 'ProcMon , который позволит вам отфильтровать только этот процесс и посмотреть, есть ли какие-либо ошибки отказа в доступе в настройках файла или реестра. Этот инструмент решил для меня много проблем за эти годы.

2
ответ дан 7 December 2019 в 12:20
поделиться

Не уверен, подняли ли вы его или кто-то другой, но посмотрите: http://connect.microsoft.com/VisualStudio/feedback/details/530392/wmi-publishing-fails- on-permission-error-please-provide-a-way-to-override-codepath-in-system-management-Instrumentation-schemanaming-in-app-config-web-config

Это может помочь вам понять корень причина проблемы лучше

1
ответ дан 7 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: