|
|
|
Олицетворение (impersonating) системных учетн.записей (NETWORK SERVICE, LOCAL SERVICE и пр
|
|||
|---|---|---|---|
|
#18+
Возникла необходимость олицетворения потоком произвольной учетной записи, в т.ч. и системной. Пользуюсь LogonUser. С учетками, созданными вручную, проблем нет, зато со встроенным учетными записями (в частности, NT AUTHORITY\NETWORK SERVICE и NT AUTHORITY\LOCAL SERVICE) ничего не получается. ОС: WinXP SP2, в домене. Пользователь, под которым запускается приложение имеет права локального администратора. Пробовал разные комбинации Username / Domain (напр., Username = "NT AUTHORITY\NETWORK SERVICE", Domain = Null или Username = "NETWORK SERVICE", Domain = "NT AUTHORITY" или "."), разные типа логона (LOGON32_LOGON_NETWORK, LOGON32_LOGON_SERVICE). При одних комбинациях сообщает "Ошибка операционной системы. Код: 5. Отказано в доступе", при других - "Ошибка операционной системы. Код: 1326. Вход в систему не произведен: имя пользователя или пароль не опознаны". То ли я всё-таки что-то путаю с параметрами, то ли привилегий не хватает, то ли изначально что-то не так, может кто-то сможет подсказать? P.S. Насчёт привилегий: учитывая примечание в статье MSDN про LogonUser , попробовал сначала проверить наличие у процесса привилегий SE_TCB_NAME и SE_CHANGE_NOTIFY_NAME (хотя для моей ОС, согласно той же статьи, они не нужны). Первой привилегии у token'а процесса нет вообще (и, соотв., включить её нет возможности), вторая есть и уже enabled. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2009, 20:09:15 |
|
||
|
Олицетворение (impersonating) системных учетн.записей (NETWORK SERVICE, LOCAL SERVICE и пр
|
|||
|---|---|---|---|
|
#18+
Хм. Начнем с простого вопроса: А откуда вы взяли пароль для этих двух учетных записей? Помнится мне, что их основная идея в том и состояла, что создать процессы с этими учетками может только система. Ну и в целом - а зачем вам запуск потока от системных учетных записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2009, 16:44:18 |
|
||
|
Олицетворение (impersonating) системных учетн.записей (NETWORK SERVICE, LOCAL SERVICE и пр
|
|||
|---|---|---|---|
|
#18+
МихаилР, пароль передаю пустой Возможно я не прав в корне, и действительно под этими учетками залогиниться невозможно. Если можно, ткните носом в ту самую "идею" насчёт этих учеток, потому что я кроме сугубо технических статей про LogonUser и QueryServiceConfig ничего в мсдн'е по этому поводу не нашёл. А зачем мне запуск потока? Ну, мне даже не столько имперсонация потока, сколько маркер безопасности (access token) этой учетки нужен, я его потом передаю в SHGetFolderLocation для получения ряда спец. путей к папкам внутри профилей указанных учеток. Понятно, что, в принципе, эти пути можно получить и анальокольными путями (или тупо захардкодить), но хочется всё сделать красиво ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2009, 16:55:20 |
|
||
|
Олицетворение (impersonating) системных учетн.записей (NETWORK SERVICE, LOCAL SERVICE и пр
|
|||
|---|---|---|---|
|
#18+
Денис Авилов, "Ткнуть", Вас я с ходу не смогу - не помню что где-нибудь читал о специальных учетных записях что-то специальное. Здесь простой здравый смысл: если будет такой простой доступ к весьма привилегированным записям, то любой мало-мальский вирус убьет систему вне зависимости от ее защиты. Что касается Вашей задачи, то там еще интереснее. Вы сами проверяли, что после имперсонации потока становятся доступны рабочие пути имперсонированного пользователя? Вообще-то сама по себе имперсонация не меняет окружения (только токен безопасности), а пути к папкам - это и есть часть окружения. По идее, чтобы стало доступно окружение, необходимо загрузить профиль учетной записи, которая вам нужна (возможно, можно обойтись и без загрузки профиля, но как - не знаю). Попробуйт порыть начиная с функции LoadUserProfile . Эта функция, в том числе загружает нужные кусты реестра (только обратите внимание, она требует нехилых привилегий). После того, как профиль загружен, вы можете найти нужные вам папки в ветке реестра: HKEY_USERS\<нужный SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders В случае системных учеток это будут LocalSystem: HKEY_USERS\S-1-5-19\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders NetworkSystem: HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders Единственное - эти строки содержат подстановки вида %USERPROFILE%, но с этим, я думаю, вы справитесь. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 06:26:03 |
|
||
|
Олицетворение (impersonating) системных учетн.записей (NETWORK SERVICE, LOCAL SERVICE и пр
|
|||
|---|---|---|---|
|
#18+
Понимаю, что описал не самый красивый путь... Увы, вы хотите решить задачу, которая, по всей видимости, не решается стандартными API - он просто не рассчитывался на такое. А раз так, других путей вы врятли найдете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 06:29:33 |
|
||
|
Олицетворение (impersonating) системных учетн.записей (NETWORK SERVICE, LOCAL SERVICE и пр
|
|||
|---|---|---|---|
|
#18+
МихаилР, спасибо за информацию, она оказалась для меня полезной. P.S. А для получения рабочих путей (тем способом, что я хотел) имперсонация и не нужна, нужен только access token - передаёшь его в SHGetFolderPath и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 13:29:03 |
|
||
|
Олицетворение (impersonating) системных учетн.записей (NETWORK SERVICE, LOCAL SERVICE и пр
|
|||
|---|---|---|---|
|
#18+
И да, получить access token системных учёток типа SYSTEM, NETWORK SERVICE или LOCAL SERVICE, судя по всему, действительно не получится (как мне ответили на другом форуме и как я уже и сам понял )). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 13:32:12 |
|
||
|
Олицетворение (impersonating) системных учетн.записей (NETWORK SERVICE, LOCAL SERVICE и пр
|
|||
|---|---|---|---|
|
#18+
Денис Авилов, С функцией SHGetFolderPath, тоже не все так просто. Обратите внимание на замечание MSDNIt must have appropriate security privileges for the particular user, including TOKEN_QUERY and TOKEN_IMPERSONATE, and the user's registry hive must be currently mounted. Т.е., как я и говорил - реестр пользователя должен быть загружен. Это возможно в 2-х случаях: пользователь вошел в систему любым из способов, загружающих профиль, или профиль был загружен явно. Ну и ко всему имейте в виду, что функция объявлена Deprecated . Правда новая функция ведет себя аналогично, там только параметр, указывающий на то, какая папка нужна поменялся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 14:03:01 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=111&tid=1344004]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
60ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 329ms |

| 0 / 0 |
