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