Запуск запросов wmi от имени пользователя без прав администратора на удаленном компьютере с использованием C#C#

Место общения программистов C#
Ответить
Anonymous
 Запуск запросов wmi от имени пользователя без прав администратора на удаленном компьютере с использованием C#

Сообщение Anonymous »

Я пытаюсь использовать WMI для запроса системной информации некоторых клиентов в нашей сети. Мы успешно использовали пользователей-администраторов для достижения этой цели в C#, но теперь мы хотим переключиться на пользователей без прав администратора (достаточно разрешений для выполнения запросов WMI по сети) из соображений безопасности.
Я могу успешно выполнять запросы wmi с помощью PowerShell в качестве пользователя без повышенных прав администратора на удаленном хосте с помощью Get-WmiObject Win32_ComputerSystem -ComputerName pcname
I есть приложение, пытающееся выполнить то же самое с использованием C#:
В следующем фрагменте должен использоваться пользователь, который запускает приложение без необходимости дополнительной аутентификации:

Код: Выделить всё

CimSession session = CimSession.Create(hostname);

// A method called GetWMI(string query, string namespace) will then execute the wmi query on the remote machine
session.QueryInstances(namespace, "WQL", query)
Я также попробовал использовать аутентификацию в коде с помощью dcomsettings (конечно, используя те же учетные данные пользователя, которые могут выполнить тот же запрос с помощью PowerShell, как показано выше):

Код: Выделить всё

DComSessionOptions dComOptions = new DComSessionOptions();
dComOptions.Impersonation = ImpersonationType.Impersonate;
var password = new SecureString();
settings.WMIPassword.ToList().ForEach(x => password.AppendChar(x));
dComOptions.AddDestinationCredentials(new CimCredential(PasswordAuthenticationMechanism.Default, settings.WMIDomain, settings.WMIUsername, password));

CimSession session = CimSession.Create(hostname, dComOptions);

// A method called GetWMI(string query, string namespace) will then execute the wmi query on the remote machine
session.QueryInstances(namespace, "WQL", query)
Оба этих способа в конечном итоге вызывают ошибку CimException: Access Denied.
Может быть, есть другой способ сделать это на C# ? В результате моих исследований не удалось найти ничего, что могло бы сработать — возможно, есть какой-то способ, о котором я еще не знаю.
Мы потратили бесчисленное количество часов на исследования и отладку, но, похоже, ничего не работает. .
Для дальнейшего использования я нашел несколько старых сообщений, касающихся некоторых подобных проблем (большинству информации в Интернете о wmi более десяти лет):
  • WMI — использование учетной записи без администратора для запроса сервера
  • На самом деле ниже представлено мое собственное сообщение о той же проблеме — она была решена, когда мы попытались использовать права администратора. на удаленном компьютере, который будет работать, но теперь нам нужно, чтобы он работал с как можно меньшими разрешениями, например. нет администратора
    Доступ запрещен при попытке собрать информацию WMI с помощью C# ASP.NET, но работает в PowerShell
  • https://serverfault.com/questions/28520/ Which-permissions-rights -does-a-user-need-to-wmi-access-on-remote-machines/1105113#1105113
  • Ошибка отказа в доступе к WMI при запросе удаленного компьютера из ASP.NET< /li>
    "get-wmiobject win32_process -computername" получает ошибку «Доступ запрещен, код 0x80070005»
  • Запрос Delphi Wmi на удаленном компьютере
Я испробовал все предложения из этих постов — некоторые из них показались многообещающими, но оказались не решением моей проблемы.
Вот краткое изложение того, что мы попробовали:
  • Мы предоставили все разрешения в «wmimgmt.msc» корневому пространству имен и применили их к «Этому пространству имен». и подпространства имен"
  • Мы добавили пользователя в локальную группу "Пользователи распределенного COM".
  • Мы добавили пользователя в группу "Пользователи монитора производительности" и группы «Пользователи удаленного управления».
  • Мы проверили наличие проблем с брандмауэром и можем заверить, что это не должно быть проблемой.
  • Мы также разрешили удаленный запуск. и разрешения на активацию
Вот наша конфигурация в «wmimgmt.mcs», которая должна применяться к корневому пространству имен и всем пространствам имен ниже (она на немецком языке, но показывает, что все разрешения должны применяться ко всем пространствам имен):
Изображение

Кроме того, я нашел старое сообщение в документации Microsoft, в котором говорится, что это на самом деле невозможно (во что трудно поверить, поскольку я уже заставил это работать с помощью PowerShell): https://learn.microsoft. com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc771551(v=ws.11)?redirectedfrom=MSDN

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


Чтобы выполнить эту задачу на удаленном компьютере, учетная запись, под которой вы вошли в систему, должна быть членом группы «Администраторы» этого компьютера.

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

Подробнее здесь: https://stackoverflow.com/questions/782 ... ng-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»