Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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 ?




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.11;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.77 MB
Время: 0.028 c
3-32152           Sergei                2002-01-16 13:03  2002.02.11  
Номер записи в SQL-сервере


1-32233           Вовчик                2002-01-25 21:07  2002.02.11  
Delphi


1-32239           ctapik-net            2002-01-27 14:07  2002.02.11  
TSpeedBar в RXLib


1-32204           Priz_Datiy            2002-01-26 14:04  2002.02.11  
Мастера !!! ПОМОЩЬ!!!!!!


3-32129           IlyaLu                2001-12-24 15:36  2002.02.11  
dbExpress