2010-10-19 2 views
2

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

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

Я могу найти множество примеров для проверки против группы локальных администраторов (например, How do I check if a user has local admin privileges in win32), но похоже, что CreateWellKnownSid работает только на локальном хосте.

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

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

+1

Это то, что должен сделать API Active Directory. –

+0

сценарий, который я имею в виду, это что-то вроде psexec - вам даны учетные данные удаленному компьютеру, вы скопируете на небольшой исполняемый файл IPC $ на удаленном хосте, настройте его как службу на удаленном хосте, запустите его и установить связь с этой службой, которую вы используете для исполнения. Как это может быть, что все это можно сделать, не касаясь AD API, но для того, чтобы запросить соответствующие разрешения для этого, мне нужен AD API? – radai

ответ

0

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

Способ решения вашей проблемы состоит в том, чтобы просто выполнить задание с использованием учетных данных, и проверить все возвращаемые значения. Если вы получите 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 не метод службы.