Форум: "WinAPI";
Текущий архив: 2002.02.11;
Скачать: [xml.tar.bz2];
Внизавторизация в w2k Найти похожие ветки
← →
iyalosovetsky (2001-12-05 19:08) [0]как проверить подлинность пользователя в системе, имея его login и password
← →
Tosov (2001-12-06 03:56) [1]Попробуй CreateProcessWithLogonW - описание на msdn.microsoft.com - создает процесс под логином другого пользователя - если создал - логин +password правильный
Можно еще поменять пароль на тот-же самый (поиши в хелпе netuser..)- но не везде это будет работать
← →
VladD2 (2001-12-08 05:08) [2]bOK = LogonUser(_T("UserName"), _T("Domain"), _T("pwd"), LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &Token);
Функция возвращает TRUE если логин прошол успешно. LOGON32_LOGON_NETWORK самы быстрый и наиболее гибкий тип, но имеет некоторые ограничения при имперсонации. Так на нем нельзя создать процесс "эс узер". Подробнее см. MSDN.
Исползуя Token можно имперсонировать данный лоджин на текущий поток и поработать от имени пользователя.
PS
На Паскаль преведи сам.
← →
Tosov_ (2001-12-08 05:30) [3]VlasD2
Если это будет работать в обычной проге - дам тебе медаль за отвагу и находчивость
← →
VladD2 (2001-12-08 05:51) [4]Ну, если шоколадную, то давай! :)
PS
А что ты называешь обычной прогой?
← →
Tosov (2001-12-08 21:53) [5]Ок. Дам шоколадную ( при встрече)
Обычная прога - прога запущенная среднестатистическим юзером ( в общем не сервис)
← →
VladD2 (2001-12-10 00:17) [6]Ок. Дам шоколадную ( при встрече)
Ловлю на слове. ;)
Обычная прога - прога запущенная среднестатистическим юзером ( в общем не сервис)
Должна работать. Скорее всего не будет работать под Win9x. А под W2k и NT4 обязательно должна. Кстати, CreateProcessWithLogonW вроде именно ее и использует, для получения токена нащиты.
← →
Tosov_ (2001-12-10 08:16) [7]А ты запусти то, что ты написал и проверь работоспособность .Потом поделись впечатлениями..
Насчет CreateProcessWithLogon - не спорю -может ты и прав.. но он(CreateProcess..) работает через RunAs сервис (те только в Win2k)..
← →
Tosov (2001-12-10 23:06) [8]Кстати,некто VladD2 на RSDN (в мае 2001) обсуждал эту проблему на форуме...
← →
VladD2 (2001-12-11 05:15) [9]А ты запусти то, что ты написал и проверь работоспособность .Потом поделись впечатлениями..
Ну, вроде, запустил... вроде, работает... и под w2k и под NT4 SP6a... а что?
Может тебе самому попробовать? ;о)
Насчет CreateProcessWithLogon - не спорю -может ты и прав.. но он(CreateProcess..) работает через RunAs сервис (те только в Win2k)..
Бррр. Ничего не понял! Во-первых, в сабже именно w2k и указано, а во-вторых, запуск процессов с идентити отличной от интерактивного юзера возможен только под NT т.е. W2k. В 9x (по-моему) такое невозможно в принципе.
Короче, CreateProcessWithLogonW действительно работает начиная с w2k, а CreateProcessAsUser и LogonUser работают начиная с NT 3.51 (по крайней мере так написано в MSDN). Под 9x ни одна из этих функций не работала и работать не будет (по-моему).
Кстати, некто VladD2 на RSDN (в мае 2001) обсуждал эту проблему на форуме...
Чё-то я не помню такого. Кинь ссылку, плиз. Но сама проблема, вроде, обсуждалась.
← →
Tosov (2001-12-11 21:06) [10]> Ну, вроде, запустил... вроде, работает... и под w2k и под NT4 SP6a... а что?
А то, что у меня не работает :( а я хочу чтобы работало !!! Может кодом поделишься??
> Бррр. Ничего ... работать не будет (по-моему).
В сабже указано - Win2k поэтому и предлагаю CreateProcessWithLogonW (ну не работает у меня LogonUser и еще на десятке компов не работает).
CreateProcess.. = CreateProcessWithLogonW (времени небыло писать полностью). А про Win9x можешь не упоминать - естественно не на ней проверяю :)
> Кинь ссылку, плиз
C:\delphi\rsdn\forum\userlogon.html (т.е. нет у меня ссылки)
PS. Я тут немного не то ответил в ветке http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1008086912&n=5 - если у тебя LogonUser работает может поможешь?
← →
VladD2 (2001-12-12 18:17) [11]Блин! Я же запостил вчера ответ! Кто глючит я или эта конфа?
← →
McSimm (2001-12-12 19:27) [12]Люди, у меня появилась надежда.
Хочу, чтобы из программы - не сервиса - можно было бы запустить процесс с правами другого пользователя под w2k.
Это моя ветка умерла вчера.
Ситуация такая. Работающий код под NT4 отказывается работать под w2k, именно на процедуре LogonUser, ссылаясь на недостаток у текущего процесса привилегий. Судя по документации, процессу нужно наличие привилегии SE_TCB_NAME. Причем она не обязательно должна быть enabled. Но здесь у меня полный тупик. Что такое привилегии и как с ними бороться не имею ни малейшего понятия, кроме того, нет (у меня) по этому поводу документации.
Возможность лазить по MSDN у меня крайне ограничена.
Если можете помочь, пожалуйста помогите. Создавать сервис или запускать программу как сервис (говорят есть такая утилита) мне не подходит.
← →
Tosov (2001-12-12 22:14) [13]McSimm
CreateProcessWithLogonW - поищи описание на http://msdn.microsoft.com
>Работающий код под NT4 отказывается работать под w2k
Можешь поделиться работающим под NT кодом? Очень надо.
← →
Tosov (2001-12-12 22:31) [14]VladD2
Прочитал, что ты написал (на мыло в рассылке пришло).
"Act as part.." у нас в универе стоит у 2 админов. Я к сожалению не админ..
В NT RUS "act as part.." = "вход в качестве службы"?
← →
VladD2 (2001-12-13 00:42) [15]Повторяю еще раз (в это раз я все записал в файл ;o) )
Второй раз я такой подвиг не повторю. :(
Ладно буду краток.
После подколов я глянут на твою страничку и ... все понял.
Код никакой не нужен. Того что я привел достаточно. Дело в привилегии "Act as part of the operating system". Твоя ошибка заключается в том, что ты считаешь что ее нельзя задать, и что процесс обязательно должен быть запущен под учетной записью SYSTEM, а это не так. Ее можно задать любому пользователю. Но (!) привилегия эта слишком крута чтобы ее раздавать на право и на лево. Если процесс серверный (т.е. сервис или COM-объект), то для экаунта под которым он запущен можно просто задать эту привилегию и он смело сможет проверять идентити юзера по паролю и логину. Чтобы задать эту привилегию в W2k нужно открыть "Local Security Policy" (находится в папке "Administrative Tools" контро-панели) выбрать ветке "Local Policies-> User rights assignments" и изменить пункт "Act as part of the operating system", добавив в него учетные записи которым необходимо дать данную привилегию.
Теперь о том как все это дело можно обойти:
1. Можно создать COM-сервер (EXE) повесить его под экаунтом которому дана выше упомянутая привилегия и как следует его защитить. Экаунт и защиту можно дать через dcomcnfg. Экаунт – закладка Identity, выбираем This user и указываем юзера с привелегией. Защиту – закладка General -> Authentication Level -> Packet Privacy (режим шифрования при передаче данных) и на закладке Security указываем тех кому можно запускать и вызывать метод, а так же (в обязательном порядке) указываем кому в последствии можно будет настраивать данные права.
2. Воспользоваться SSPI или ADSI для проверки. Об этом подробно написано здесь:
http://support.microsoft.com/directory/article.asp?ID=KB;EN-US;Q180548 (SSPI)
http://support.microsoft.com/directory/article.asp?ID=KB;EN-US;Q218497 (ADSI)
← →
VladD2 (2001-12-13 00:44) [16]SE_TCB_NAME - это и есть эта привелегия.
← →
VladD2 (2001-12-13 00:45) [17]Можешь поделиться работающим под NT кодом? Очень надо.
Да код то же. Все дело в привелегии!
← →
McSimm (2001-12-13 10:26) [18]2VladD2 ©
Большое спасибо за информацию.
2Tosov
Поделиться могу. Если что, свяжись со мной по почте.
Это есть в библиотеке JCL. Там и демка есть.
Когда я запускаю ее на NT4 (сервер) - она прекрасно работает. Может проблема в том что это сервер, а W2k - у меня рабочая станция?
Раскопал доку по CreateProcessWithLogonW, еще не попробовал.
← →
McSimm (2001-12-13 13:47) [19]Есть, заработало!
CreateProcessWithLogonW работает и не требует себе привелегий
(После некоторых мучений. Оказалось обязательным использование WideString)
Всем спасибо.
← →
Tosov_ (2001-12-14 04:42) [20]VladD2
Насчет привилегии - не знал, что ее можно включить.. но ведь и вопрос был общим - не обязательно надо быть админом.Как быть простым юзерам?
mcSimm
Запусти usmgr.exe правапользователей\показать доп права (что-то вроде этого)
Если у тебя не включено право, о котором сказал VladD2, то напиши об этом здесь - может на NT Server это право и не нужно (сомневаюсь)
и если не трудно - вышли библиотеку (JCL) на мыло delphi@xonix.ru
← →
McSimm (2001-12-14 11:43) [21]>Tosov_ (14.12.01 04:42)
>Если у тебя не включено право, о котором сказал VladD2
Действительно, эти права под NT4 были разрешены. Поэтому все и работало.
← →
Hair_Fly (2001-12-14 16:09) [22]Народ!!!
Извиняюсь за тупой вопрос, но где можно взять библиотеку в которой описана CreateProcessWithLogonW ?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.02.11;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.004 c