Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.51 MB
Время: 0.003 c
3-32130
Belov
2002-01-15 11:18
2002.02.11
Вопрос по связке DLL - БД


3-32116
BACEK
2001-12-24 17:53
2002.02.11
dbExpress не работает на машине где не установлен Delphi6 !


7-32356
Строр
2001-11-04 19:00
2002.02.11
Тоже про форматирование...


1-32244
well
2002-01-28 08:16
2002.02.11
Массивы


6-32312
Александр_1
2001-11-16 00:33
2002.02.11
Трафик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский