Разрешения WMI: Выберите CommandLine, ProcessId FROM Win32_Process не возвращает данных для CommandLine
Я собираю данные о производительности через WMI и хотел бы избежать использования учетной записи в группе администраторов для этой цели. Целевой компьютер работает под управлением Windows Server 2003 с последними обновлениями и обновлениями.
Я сделал то, что, по моему мнению, является подходящей конфигурацией, чтобы позволить нашему пользователю доступ к WMI (аналогично тому, что описано здесь: http://msdn.microsoft.com/en-us/library/aa393266.aspx).
Вот конкретные шаги, которые были выполнены:
- Откройте Администрирование -> Управление компьютером: в разделе "Управление компьютером (локальное)" разверните "Службы и приложения", щелкните правой кнопкой мыши элемент управления WMI и выберите свойства. На вкладке Security разверните Root, выделите CIMV2, нажмите Security (в нижней части окна); добавьте пользователей системного монитора и включите параметры: Включить учетную запись и Удаленное включение.
- Откройте Администрирование -> Службы компонентов: в разделе Корень консоли перейдите в Службы компонентов-> Компьютеры -> Щелкните правой кнопкой мыши Мой компьютер и выберите свойства, перейдите на вкладку безопасности COM, в разделе "Права доступа" нажмите "Изменить по умолчанию", выберите (или добавьте, затем выберите) "Пользователи системного монитора" и разрешите локальный и удаленный доступ и нажмите "ОК". В разделе "Разрешения на запуск и активацию" нажмите "Изменить по умолчанию", выберите (или добавьте, затем выберите) группу "Пользователи системного монитора" и разрешите локальные и удаленные разрешения на запуск и активацию.
- Откройте Администрирование -> Службы компонентов: в разделе Корень консоли перейдите в Службы компонентов-> Компьютеры -> Мой компьютер -> Конфигурация DCOM -> выделите правой кнопкой мыши "Управление и инструментарий Windows" и выберите свойства, выберите вкладку "Безопасность" в разделе "Запуск и запуск". Разрешения на активацию "выберите" Настроить ", затем нажмите" Изменить ", добавьте" Performance Users Group "и разрешите локальные и удаленные привилегии удаленного запуска и удаленной активации.
Я могу подключиться удаленно через WMI Explorer, но когда я выполняю этот запрос:
Select CommandLine, ProcessId FROM Win32_Process
Я получаю правильный результат, но в каждой строке есть пустая CommandLine. Если я добавлю пользователя в группу "Администраторы" и повторно выполню запрос, столбец CommandLine содержит ожидаемые данные.
Кажется, есть разрешение, которое я где-то упускаю, но мне не повезло, что я его выследил.
Спасибо заранее.
4 ответа
Предоставление пользователю права на "отладку программ" в локальной политике безопасности позволяет получить доступ к информации CommandLine/ExecutablePath. И хотя это все же лучше, чем использование (локальной) учетной записи администратора, это все равно представляет угрозу безопасности. Вот почему я разместил дополнительный вопрос, чтобы посмотреть, можно ли это сделать с более низкими привилегиями здесь:
Каковы минимальные разрешения для доступа WMI к процессам CommandLine?
Немного стыдно настолько полностью перевернуть мое мнение об этом, но ваш дополнительный комментарий к моей первой попытке делает теорию разрешений внезапно звучащей гораздо убедительнее.
В наши дни Windows имеет с собой разрешения, которые назначаются по-разному в зависимости от того, является ли запрашивающий процесс удаленным или локальным, и это воняет от такого поведения, которое я видел, когда объект имеет ACL, так что INTERACTIVE разрешен, но REMOTE - не. Когда вы входите через RDP, ваш токен доступа будет включать ИНТЕРАКТИВНЫЙ SID; когда вы выполняете удаленный запрос (который использует RPC, который обычно приходит через именованные каналы или прямой TCP / IP), ваш токен доступа не включает в себя INTERACTIVE, а вместо этого REMOTE. Кроме того, я видел случаи, когда две разные попытки доступа или сеансы входа в систему каким-то образом "объединяли" их объединенные права доступа, поэтому ваш случай "когда я вошел в систему, удаленный запрос WMI также завершается успешно" действительно имеет некоторый смысл. Я должен был бы перечитать Windows Internals, чтобы понять, являются ли сеансы, WinStations или маркеры доступа на самом деле общими, но, конечно, то, что вы сообщаете, согласуется с некоторым опытом, который у меня был.
Нет веской причины, по которой атрибут CommandLine должен иметь ACL иначе, чем атрибут ProcessID, но, похоже, именно так все и происходит. Хотел бы я знать, было ли это что-то, что вы могли бы изменить через глубоко встроенные параметры конфигурации, или это просто жестко запрограммировано в ОС Windows.
Я вернулся к этапам изменения разрешений, которые вы описали в первоначальном вопросе, и было два места, где локальная / удаленная разница, казалось, проявлялась:
- (2) Службы компонентов> Безопасность COM> Разрешения на запуск и активацию - INTERACTIVE предоставляется полные разрешения
- (3) Службы компонентов> Конфигурация DCOM> Управление и инструментарий Windows> Безопасность> Разрешения на запуск и активацию - и "Запуск", и "Активация" предоставляют разрешения, которые отличаются как локальными, так и удаленными.
Я бы сфокусировал ваши исследования на этих областях, и везде, где вы случайно заметили такие локальные / удаленные (ИНТЕРАКТИВНЫЕ / УДАЛЕННЫЕ) дифференциальные разрешения. Хотя ни один из этих определенно не указывает на атрибут CommandLine, который вам нужен, я почти уверен (да, даже более уверен, чем мой предыдущий ответ), что подобные различия будут учитывать поведение, которое вы видите, и закрытие Разрыв между "удаленным" и "локальным" позволит получить результаты, которые вы ищете. [Будем только надеяться, что у Microsoft нет жестко закодированных вещей, так что - независимо от того, что вы настраиваете - вы не можете выставить атрибут CommandLine для удаленных запросов. Это был бы не первый случай, когда близорукий жестко запрограммированный дизайн расстроил наше использование их ОС...]
Я не верю, что это проблема с разрешениями, но, возможно, это тонкость вашей структуры запросов, и я объясню с помощью кода, который я создал, чтобы выполнить только эту операцию (чтобы позже можно было кэшировать командные строки).
В коде моего приложения CacheMyWork (которое вы можете просмотреть здесь) конкретный запрос, который я задаю - и который определенно возвращает результаты CommandLine -
ВЫБЕРИТЕ CommandLine ОТ Win32_Process WHERE ProcessId =
Некоторое время я не использовал WMI Explorer, но, возможно, он возвращает CommandLine для одного процесса, но не для всего массива сразу? Не знаю.
У меня было это приложение доступным в течение трех лет, и, хотя я не помню, когда в последний раз я тестировал его, работая как пользователь без прав администратора, я на 99% уверен, что оно должно работать в этом сценарии, потому что тысячи загрузили его, и никто еще не сообщил, что он не перезапускал кэшированные приложения после перезагрузки. [Да, я знаю, что происходит с людьми, которые ПРИНИМАЮТ, но это не помешало мне стать безрассудным потребителем здесь.]
Ой , извините, это старый вопрос, но я думаю, что это сработало бы, если бы у кого-то была похожая проблема:
Пожалуйста, попробуйте следующее:
Вместо "Пользователи системного журнала" попробуйте выполнить шаг 1 с "Пользователи системного журнала" и разрешить только "Выполнить методы" и "Удаленное включение" для группы "Пользователи системного журнала". И применять права на "это и подчиненные пространства имен". И не забудьте добавить пользователя в новую группу...
У меня была похожая проблема (но другой класс WMI), и она работала с группой "Пользователи системного журнала", но не с "Пользователи системного монитора"...
Надеюсь, что это работает для вас тоже...
PS на win08 или выше, если вы думаете, что можете оставить свои шаги 2 или 3. Но я не знаю, нужны ли они для win03.