Выполнить LoadUserProfile не имея прав администратора
От: alexkz Казахстан  
Дата: 12.06.08 04:48
Оценка:
Есть задача: выполнить имперсонацию потока с загрузкой профиля пользователя имея только права обычного пользователя (не администратора).

Вызов функции 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 не имея прав администратора
От: TarasCo  
Дата: 12.06.08 06:35
Оценка:
A>Подскажите как правильно обойти ограничение функции LoadUserProfile? Ведь команда "RunAs" в проводнике работает из под обычного пользователя! Предполагаю, что она использует сервис "Вторичный вход в систему", возможно ли его задействовать для решения моей задачи? его API?

Можете использовать ф. CreateProcessWithLogonW — именно она использует службу "вторичный вход в систему". Но тут есть маленький нюанс — вам нужно знать пароль администратора.
Да пребудет с тобою сила
Re[2]: Выполнить LoadUserProfile не имея прав администратора
От: alexkz Казахстан  
Дата: 12.06.08 08:50
Оценка:
Здравствуйте, TarasCo, Вы писали:

A>>Подскажите как правильно обойти ограничение функции LoadUserProfile? Ведь команда "RunAs" в проводнике работает из под обычного пользователя! Предполагаю, что она использует сервис "Вторичный вход в систему", возможно ли его задействовать для решения моей задачи? его API?


TC>Можете использовать ф. CreateProcessWithLogonW — именно она использует службу "вторичный вход в систему". Но тут есть маленький нюанс — вам нужно знать пароль администратора.


Не могу, т.к. мне не нужно запускать процесс (вообще нет никакого другого процесса).
Программа должна иметь возможность одновременно выполнять некоторые функции с правами разных пользователей. Представь менеджер по управлению некими сервисами которые находятся на разных машинах, для каждого сервиса назначен свой администратор.
Сейчас алогоритм такой:
  1. Cоздается новый поток
  2. Вызываю ф. LogonUser, указываю пользователя который имеет права управления моим сервисом.
  3. Вызываю ф. LoadUserProfile, загружаю профиль пользователя
  4. Вызываю ф. ImpersonateLoggedOnUser
  5. [делаю то, что мне нужно с сервисом]
Все бы замечательно, но LoadUserProfile требует права администратора на машине Вот как обойти это ограничение я и ломаю голову

И если CreateProcessWithLogonW использует службу "Вторичный вход в систему (Secondary Logon)" то она не должна требовать прав администратора, иначе зачем служба вообще..

Спасибо за ответ!
Re[3]: Выполнить LoadUserProfile не имея прав администратора
От: Аноним  
Дата: 12.06.08 09:19
Оценка:
A>И если CreateProcessWithLogonW использует службу "Вторичный вход в систему (Secondary Logon)" то она не должна требовать прав администратора, иначе зачем служба вообще..
CreateProcessWithLogonW не требует прав админа. Она просто просит сервис сделать LogonUser/LoadUserProfile/CreateProcessAsUser на нужный ехешник
Re: Выполнить LoadUserProfile не имея прав администратора
От: Alexey Frolov Беларусь  
Дата: 12.06.08 11:07
Оценка: +1
Здравствуйте, 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 не имея прав администратора
От: alexkz Казахстан  
Дата: 12.06.08 11:35
Оценка:
Здравствуйте, Alexey Frolov, Вы писали:

A>>Есть задача: выполнить имперсонацию потока с загрузкой профиля пользователя имея только права обычного пользователя (не администратора).

A>>Подскажите как правильно обойти ограничение функции LoadUserProfile? Ведь команда "RunAs" в проводнике работает из под обычного пользователя! Предполагаю, что она использует сервис "Вторичный вход в систему", возможно ли его задействовать для решения моей задачи? его API?

AF>Возможно я неправильно все понял, но то что вы хотите сделать (при осуществимости идеи) было бы большой дырой в системе безопасности виндовс. Зачем городить всю эту защиту если любой пользователь может получить права какие захочет вот так вот запросто. Может вы имеете пароль администратора?


Пароля администратора я не имею, иначе все просто.
НО есть такая функиция CreateProcessWithLogonW (см. ответы), она в том числе выполняет загрузку профиля, не имея при этом прав администратора. Делает она это используя виндовый сервис seclogon, запущеный от учетки LocalSystem. И это не является дырой в безопасности, я не получу права админа или системы, процесс будет запущен с правами того пользователя которого я указал.

Мне нужно подобное поведение для потока, без запуска exe-шника.
Re[3]: Выполнить LoadUserProfile не имея прав администратора
От: Сергей  
Дата: 14.06.08 01:20
Оценка:
Здравствуйте, alexkz, Вы писали:

A>Мне нужно подобное поведение для потока, без запуска exe-шника.


Думаю, если бы это было возможно без добавления дыр в безопасности, то специальную службу для запуска процессов от имени нужного пользователя делать бы не стали.
Re[4]: Выполнить LoadUserProfile не имея прав администратора
От: Аноним  
Дата: 14.06.08 14:32
Оценка:
С>Думаю, если бы это было возможно без добавления дыр в безопасности, то специальную службу для запуска процессов от имени нужного пользователя делать бы не стали.
одно дело — запуск процессов по токену, другое — по імені/паролю
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.