Win32 API - как проверить пользовательские привилегии на удаленной машине - PullRequest
2 голосов
/ 19 октября 2010

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

я могу найти SID для учетной записи,но как я узнаю, если, например, эта учетная запись является членом группы администраторов на удаленном хосте?

я могу найти множество примеров для проверки по локальной группе администраторов (например, Какпроверить, есть ли у пользователя привилегии локального администратора в win32 ), но похоже, что CreateWellKnownSid работает только на локальном хосте.

любые подсказки / указатели / примеры кода будут очень приветствоваться.

edit: больше информации о моей проблеме в комментариях ниже.

1 Ответ

0 голосов
/ 15 апреля 2011

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

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

Проверка учетных данных только будет полезна для помощи пользователю в выборе соответствующих учетных данных. Вы также можете проверить доступ к общему ресурсу \\machine\admin$, как и любую другую более сложную проверку.

Тем не менее, вот как сделать то, что вы спросили

Если учетные данные являются учетными данными домена, вам нужно будет найти их в Active Directory. ADSI хорош для этого из скрипта. Другие API существуют. Получить список групп пользователей.

Затем вам необходимо подключиться к удаленному компьютеру с помощью NetXXX apis или поставщика ADSI WinNT. Получить список членов группы администраторов. Если любая из учетных записей домена пользователя является членом группы «Администраторы», пользователь является участником.

Все это можно сделать из скрипта с использованием ADSI LDAP и WinNT провайдеров.

Альтернатива

Кажется, что всем, кто хочет запустить удаленный код, нужно написать исполняемый файл службы, установить службу и запустить ее.

Альтернативой, которая очень проста, если у вас есть учетные данные администратора, является использование службы планировщика заданий. С помощью SCHTASKS.EXE легко создать запланированное задание, которое запускается как SYSTEM, LOCAL SERVICE, NETWORK SERVICE или любую учетную запись, учетные данные которой вы имеете. Он может быть создан без расписания, затем явно запущен или создан с «однократным» расписанием для запуска в любое время, например, в течение следующих нескольких минут.

Если вам нужно запустить код на удаленном компьютере, я настоятельно рекомендую SCHTASKS.EXE, а не метод обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...