Есть задача: выполнить имперсонацию потока с загрузкой профиля пользователя имея только права обычного пользователя (не администратора).
Вызов функции LoadUserProfile из под обычного пользователя завершается ошибкой: code=1314, "Клиент не обладает требуемыми правами", оно и понятно:
[msdn]The calling process must have the SE_RESTORE_NAME and SE_BACKUP_NAME privileges.
Starting with Windows XP SP2 and Windows Server 2003, the caller must be an administrator or the LocalSystem account.
[/msdn]
Подскажите как правильно обойти ограничение функции LoadUserProfile? Ведь команда "RunAs" в проводнике работает из под обычного пользователя! Предполагаю, что она использует сервис "Вторичный вход в систему", возможно ли его задействовать для решения моей задачи? его API?
Re: Выполнить LoadUserProfile не имея прав администратора
A>Подскажите как правильно обойти ограничение функции LoadUserProfile? Ведь команда "RunAs" в проводнике работает из под обычного пользователя! Предполагаю, что она использует сервис "Вторичный вход в систему", возможно ли его задействовать для решения моей задачи? его API?
Можете использовать ф. CreateProcessWithLogonW — именно она использует службу "вторичный вход в систему". Но тут есть маленький нюанс — вам нужно знать пароль администратора.
Да пребудет с тобою сила
Re[2]: Выполнить LoadUserProfile не имея прав администратора
Здравствуйте, TarasCo, Вы писали:
A>>Подскажите как правильно обойти ограничение функции LoadUserProfile? Ведь команда "RunAs" в проводнике работает из под обычного пользователя! Предполагаю, что она использует сервис "Вторичный вход в систему", возможно ли его задействовать для решения моей задачи? его API?
TC>Можете использовать ф. CreateProcessWithLogonW — именно она использует службу "вторичный вход в систему". Но тут есть маленький нюанс — вам нужно знать пароль администратора.
Не могу, т.к. мне не нужно запускать процесс (вообще нет никакого другого процесса).
Программа должна иметь возможность одновременно выполнять некоторые функции с правами разных пользователей. Представь менеджер по управлению некими сервисами которые находятся на разных машинах, для каждого сервиса назначен свой администратор.
Сейчас алогоритм такой: Cоздается новый поток
Вызываю ф. LogonUser, указываю пользователя который имеет права управления моим сервисом.
Вызываю ф. LoadUserProfile, загружаю профиль пользователя
Вызываю ф. ImpersonateLoggedOnUser
[делаю то, что мне нужно с сервисом]
Все бы замечательно, но LoadUserProfile требует права администратора на машине Вот как обойти это ограничение я и ломаю голову
И если CreateProcessWithLogonW использует службу "Вторичный вход в систему (Secondary Logon)" то она не должна требовать прав администратора, иначе зачем служба вообще..
Спасибо за ответ!
Re[3]: Выполнить LoadUserProfile не имея прав администратора
От:
Аноним
Дата:
12.06.08 09:19
Оценка:
A>И если CreateProcessWithLogonW использует службу "Вторичный вход в систему (Secondary Logon)" то она не должна требовать прав администратора, иначе зачем служба вообще..
CreateProcessWithLogonW не требует прав админа. Она просто просит сервис сделать LogonUser/LoadUserProfile/CreateProcessAsUser на нужный ехешник
Re: Выполнить LoadUserProfile не имея прав администратора
Здравствуйте, alexkz, Вы писали:
A>Есть задача: выполнить имперсонацию потока с загрузкой профиля пользователя имея только права обычного пользователя (не администратора).
A>Вызов функции LoadUserProfile из под обычного пользователя завершается ошибкой: code=1314, "Клиент не обладает требуемыми правами", оно и понятно: A>[msdn]The calling process must have the SE_RESTORE_NAME and SE_BACKUP_NAME privileges. A>Starting with Windows XP SP2 and Windows Server 2003, the caller must be an administrator or the LocalSystem account. A>[/msdn]
A>Подскажите как правильно обойти ограничение функции LoadUserProfile? Ведь команда "RunAs" в проводнике работает из под обычного пользователя! Предполагаю, что она использует сервис "Вторичный вход в систему", возможно ли его задействовать для решения моей задачи? его API?
Возможно я неправильно все понял, но то что вы хотите сделать (при осуществимости идеи) было бы большой дырой в системе безопасности виндовс. Зачем городить всю эту защиту если любой пользователь может получить права какие захочет вот так вот запросто. Может вы имеете пароль администратора?
Re[2]: Выполнить LoadUserProfile не имея прав администратора
Здравствуйте, Alexey Frolov, Вы писали:
A>>Есть задача: выполнить имперсонацию потока с загрузкой профиля пользователя имея только права обычного пользователя (не администратора). A>>Подскажите как правильно обойти ограничение функции LoadUserProfile? Ведь команда "RunAs" в проводнике работает из под обычного пользователя! Предполагаю, что она использует сервис "Вторичный вход в систему", возможно ли его задействовать для решения моей задачи? его API?
AF>Возможно я неправильно все понял, но то что вы хотите сделать (при осуществимости идеи) было бы большой дырой в системе безопасности виндовс. Зачем городить всю эту защиту если любой пользователь может получить права какие захочет вот так вот запросто. Может вы имеете пароль администратора?
Пароля администратора я не имею, иначе все просто.
НО есть такая функиция CreateProcessWithLogonW (см. ответы), она в том числе выполняет загрузку профиля, не имея при этом прав администратора. Делает она это используя виндовый сервис seclogon, запущеный от учетки LocalSystem. И это не является дырой в безопасности, я не получу права админа или системы, процесс будет запущен с правами того пользователя которого я указал.
Мне нужно подобное поведение для потока, без запуска exe-шника.
Re[3]: Выполнить LoadUserProfile не имея прав администратора
Здравствуйте, alexkz, Вы писали:
A>Мне нужно подобное поведение для потока, без запуска exe-шника.
Думаю, если бы это было возможно без добавления дыр в безопасности, то специальную службу для запуска процессов от имени нужного пользователя делать бы не стали.
Re[4]: Выполнить LoadUserProfile не имея прав администратора
От:
Аноним
Дата:
14.06.08 14:32
Оценка:
С>Думаю, если бы это было возможно без добавления дыр в безопасности, то специальную службу для запуска процессов от имени нужного пользователя делать бы не стали.
одно дело — запуск процессов по токену, другое — по імені/паролю