Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

Аутентификация NT   Найти похожие ветки 

 
needle   (2003-09-18 15:38) [0]

пишу приложение, которое разделено на серверную и клиентскую часть, общаются по tcp/ip. Необходимо проверять полномочия пользователя, запустившего клиента средствами windows NT. То есть если пользователь зарегистрировался(вошел в сеть) в том же домене, что и машина на котором запущен сервер, то давать ему доступ. Для этого необходимо получить с контроллера домена список пользователей вошедших в сеть и с каких машин. Как это сделать? наковырял API функции получения списка учетных записей домена, домена компьютера, проверки LogonUser для домена(требует явного указания пароля, а нужно чтоб без указания оного). Подскажите плиз.


 
Петров Денис   (2003-09-18 15:46) [1]

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

А зачем? Разве недостаточно для твоего способа авторизации, если клиент при коннекте на сервер пошлет ему имя своего домена, а сервер сравнит его со своим именем?


 
needle   (2003-09-18 15:58) [2]

Я хочу удостовериться что пользователь вошел в домен, и именно с этой машины, и сделать средствами виндоус, а не клиентской части, в целях безопасности.


 
Reindeer Moss Eater   (2003-09-18 16:05) [3]

LookupAccountName в клиентской программе и передача полученной информации на сервер


 
Петров Денис   (2003-09-18 16:18) [4]

Пожалуйста.
Если у тебя домен с Active Directory (Win2k и выше), что скорее всего, то тебе, вероятно, подойдет это:

procedure TMainForm.FormCreate(Sender: TObject);
var FIADsADSystemInfo: Variant;
begin
Caption := Application.Title;
FIADsADSystemInfo := CreateOleObject("ADSystemInfo");
try
try
// полное имя компьютера, с принадлежностью к домену
ComputerName.Text := FIADsADSystemInfo.ComputerName;
// короткое имя домена
DomainShortName.Text := FIADsADSystemInfo.DomainShortName;
// полное DNS-имя домена
DomainDNSName.Text := FIADsADSystemInfo.DomainDNSName;
// полное имя пользователя, с принадлежностью к домену
// и другими сведениями из службы каталогов
UserName.Text := FIADsADSystemInfo.UserName;
finally
FIADsADSystemInfo := Unassigned;
end;
except
UserName.Text := "Вход в домен не произведен";
end;
end;

Если пользователь - локальный, а не доменный (т. е. был логон на локальный компьютер, а не в домен), то при попытке получить имя пользователя генерируется исключение типа EOleException с текстом "Именам пользователей не сопоставлены коды защиты данных".


 
needle   (2003-09-19 08:26) [5]

-> Петров Денис
Спасибо за совет, но это не совсем то что нужно.
Это для проверке на клиенте, т.е. в предлагаемой схеме клиент проверяет принадлежность к домену и говорит серверу - "давай мне доступ, ибо я вошел в домен" - некорректно, проверку должен делать именно сервер.


 
Reindeer Moss Eater   (2003-09-19 08:33) [6]

Клиент не говорит "дай мне доступ потому что я вошел в такой -то домен".
Клиент говорит "дай мне доступ какой захочешь, но знай, что я вошел в такой-то домен под таким-то аккаунтом"


 
needle   (2003-09-19 09:05) [7]

такая схема небезопасна, потому как хакер может подделать такой запрос клиента, указав любой домен. А как это делается в проводнике виндоус? когда он открывает сетевой ресурс? хорошо бы сделать также. Дай-те какую-нить ссылку на статейки по этой теме, я что-то ничего толкового не нашел.


 
Reindeer Moss Eater   (2003-09-19 09:25) [8]

Ты думаешь сервер сквозь один из проводов витой пары "видит" что за юзер к нему стучится? Рассматривает его имя и домен нарисованное на логон скрине? Так что ли?

Клиент должен передать информацию о себе серверу в том или ином виде.

такая схема небезопасна
И что из этого? Хочешь изобрести абсолютно безопастный велосипед?


 
Reindeer Moss Eater   (2003-09-19 09:57) [9]

Дай-те какую-нить ссылку на статейки по этой теме

www.Google.com + "Challenge Response authentication"


 
needle   (2003-09-19 11:01) [10]

-> Reindeer Moss Eater
Контроллер домена видит все, на то он и контроллер что все компы и пользователи у него как на ладони. В идеале клиенту ничего не надо передавать, достаточно его ip, и контроллер может выдать полный расклад - кто залогинился, когда, и каковы его полномочия, вот это мне и надо вытащить.


 
Reindeer Moss Eater   (2003-09-19 11:06) [11]

В идеале клиенту ничего не надо передавать, достаточно его ip,

Да что ты говоришь?!
А если у клиента нет никакого IP?
Тогда по твоему какой информации достаточно?


 
needle   (2003-09-19 11:17) [12]

как это нету никакого ip? сбрендили? для active directory протокол tcp/ip просто необходим, по всяким netbeui или ipx он не работает :)


 
needle   (2003-09-19 11:19) [13]

вообще-то при подключении к сокету сервера ай-пи клиента уже есть, безо всякой передачи от клиента.


 
Reindeer Moss Eater   (2003-09-19 11:20) [14]

Подбирай слова, юноша.

Ты что, не видел компьютеров без IP адреса?
Не видел компьютеров без ActiveDirectory?

По поводу IP адреса:

Залогонился на машине ты (как администратор), через 5 минут залогонилась твоя младшая двоюродная племянница как USER.
Адрес не менялся, как контроллер домена вас различает?


 
Reindeer Moss Eater   (2003-09-19 11:22) [15]

вообще-то при подключении к сокету сервера ай-пи клиента уже есть, безо всякой передачи от клиента.

Да ты просто гений покруче Теслы. Тот мог передавать энергию без проводов, а ты перемещать информацию без передачи её.


 
needle   (2003-09-19 11:35) [16]

-> Reindeer Moss Eater
Просто фантастическая безграмотность!

компьютеров с установленным протоколом tcp/ip и без ай-пи адреса не бывает! он статический или динамический (полученный от dhcp).

без актив директори бывает конешно, но мы их и не рассматриваем.

пусть последовательно логинится хоть 100 челов, мне важно кто из них активен в данный момент! и эта инфа есть на контроллере домена. Клиент запускается в сенсе пользователя, подключается к серверу, тот аутенфицирует его и передает какие-то данные, новый пользователь будет аутентифицироваться заново!

данные в сокете о ай-пи адресе клиента(и порте) появляются в момент когда клиент устанавливает соединение на уровне tcp/ip, и нет необходимости передавать его дополнительно на уровне протокола приложений.


 
Reindeer Moss Eater   (2003-09-19 11:39) [17]

-> Reindeer Moss Eater
Просто фантастическая безграмотность!

компьютеров с установленным протоколом tcp/ip и без ай-пи адреса не бывает! он статический или динамический (полученный от dhcp).


А компьютеров без TCP/IP тоже не бывает?

пусть последовательно логинится хоть 100 челов, мне важно кто из них активен в данный момент! и эта инфа есть на контроллере домена. Клиент запускается в сенсе пользователя, подключается к серверу, тот аутенфицирует его и передает какие-то данные, новый пользователь будет аутентифицироваться заново!


Чтобы "и эта инфа есть на контроллере домена" эту инфу НАДО ПЕРЕДАТЬ туда, где она должна быть.

данные в сокете о ай-пи адресе клиента(и порте) появляются в момент когда клиент устанавливает соединение на уровне tcp/ip, и нет необходимости передавать его дополнительно на уровне протокола приложений.

Информация об адресе и всем остальном ПЕРЕДАЕТСЯ на серверную сторону.


 
Reindeer Moss Eater   (2003-09-19 11:44) [18]

данные в сокете о ай-пи адресе клиента(и порте) появляются в момент когда клиент устанавливает соединение на уровне tcp/ip, и нет необходимости передавать его дополнительно на уровне протокола приложений.

В идеале клиенту ничего не надо передавать, достаточно его ip,

Так у тебя (по твоему же утверждению) стало быть есть всё, что бы авторизовать подключившегося клиента. Чего тогда еще хочешь?


 
needle   (2003-09-19 11:57) [19]

компы без tcp/ip не рассматриваются по определению.
данные об адресе клиента ПЕРЕДАЮТСЯ конешно, но делает это winsock, а никак не клиент своим протоколом поверх tcp/ip.
У меня есть: ip-адрес клиента, адрес контроллера домена, учетные записи пользователей, которые я могу вытащить с контроллера, но НЕТ активного пользователя сеанса на клиентской машине. От клиента я не могу принять эти данные, только от контроллера домена, это не обсуждается. Вопрос в том как получить данные о подключенном пользователе на машине <ай-пи адрес> с контроллера домена?


 
Reindeer Moss Eater   (2003-09-19 12:01) [20]

От клиента я не могу принять эти данные, только от контроллера домена, это не обсуждается. Вопрос в том как получить данные о подключенном пользователе на машине <ай-пи адрес> с контроллера домена?

Данные ты получишь от КЛИЕНТА. А клиент получает свой токен безопастности у контроллера домена.


 
Reindeer Moss Eater   (2003-09-19 12:08) [21]

Вопрос в том как получить данные о подключенном пользователе на машине <ай-пи адрес> с контроллера домена?

Задумайся над случаем когда на одной машине (один адрес IP) работают несколько пользователей одновременно и поймешь, что одного адреса хоста недостаточно для идентификации прав юзера.

Примеры
- несколько сервисов, работающих под разными доменными аккаунтами на одном сервере.

- несколько терминальных сессий интерактивных пользователей на одном сервере.

IP - один, а объектов для раздачи серег - много!


 
needle   (2003-09-19 12:36) [22]

--- Задумайся над случаем когда на одной машине (один адрес IP) работают несколько пользователей одновременно и поймешь, что одного адреса хоста недостаточно для идентификации прав юзера.
---
Я думал об этом. наверно ведь контроллер домена может запросить клиентскую машину, мол что за х$$ у тебя там открыл сокет на таком-то порту? давай-ка владельца процесса...:) Я собственно и хотел узнать как это сделать, и как это вообще делается в других программах, типа SQL server с аутентификацией NT.


 
Reindeer Moss Eater   (2003-09-19 12:44) [23]

и как это вообще делается в других программах, типа SQL server с аутентификацией NT.

Тебе уже второй день говорят как это сделано там. Уже надоедать начинает знаешь ли.


 
needle   (2003-09-19 13:05) [24]

-> Reindeer Moss Eater
ну-ка ну-ка с этого места поподробней? и как по-твоему ТАМ происходит аутентификация NT?
млях, ничего толком не прояснилось, а время на споры потрачены. как в том анекдоте - ты чукча не умничай, ты пальцем покажи :)


 
Reindeer Moss Eater   (2003-09-19 13:17) [25]

Специально для чукчи про AD и Kerberos:

User логонится с рабочей станции в домене и говорит: - Эй, контроллер моего домена, я - такой-то хрен с горы и вот такой-то у меня пароль! Что скажешь на это?
КД:
- Слушай, я проверил базу учетных записей, и понял, что ты действительно тот хрен с именно той горы и пароль у тебя верный.
На тебе бирку, держи и не теряй.

Дальше user идет на другой хост, который тоже включен в домен и просит показать ему файл с жестким порно.

- Эй, файл-сервер с жестким порно! Дай мне файл с жестким порно, у меня вот и бирка нужная есть. Мне ее дал КД!

Файл-сервер с жестким порно просматривает свои списки ACL и видит, что для бирки не разрешен доступ к файлу жесткого порно, а разрешен только к файлу мягкого порно.

- Хрен тебе хрен_с_горы, а не этот файл с жестким порно!

Ну а так надеюсь понятно?


 
Е-Моё имя   (2003-09-19 14:02) [26]


> [25] Reindeer Moss Eater © (19.09.03 13:17)

хм... хорошо написано...понятно ))
надо всегда так объяснять =)


 
needle   (2003-09-19 14:07) [27]

Замечательно, кто ж спорит-то? то что надо. А теперь в функциях все это, особенно про "бирку" :)


 
Reindeer Moss Eater   (2003-09-19 14:11) [28]

[3]


 
needle   (2003-09-19 14:24) [29]

Не для того мелкософт корячился чтоб клиент сам проверял свои полномочия. Этак каждый клиент будет говорить "дай мне доступ какой захочешь, но знай, что я вошел в такой-то домен под аккаунтом Администратора" :-)) Наверняка он должен послать какой-то зашифрованный месседж или хеш с паролем для проверки подлинности на контроллере домена.


 
Reindeer Moss Eater   (2003-09-19 14:33) [30]

Не для того мелкософт корячился чтоб клиент сам проверял свои полномочия. Этак каждый клиент будет говорить "дай мне доступ какой захочешь, но знай, что я вошел в такой-то домен под аккаунтом Администратора" :-)) Наверняка он должен послать какой-то зашифрованный месседж или хеш с паролем для проверки подлинности на контроллере домена.

А где я тебе говорил и писал, что все это в керберос идет открытым текстом??????
Где я говорил, что любой "подсмотренный" у соседа идентификатор безопастности и "засунутый" в свой сеанс пройдет у сервера на "ура"???


 
Петров Денис   (2003-09-19 14:45) [31]

to Reindeer Moss Eater:
По-моему, стоит забить. Случай очень тяжелый. :)


 
needle   (2003-09-19 14:45) [32]

вот к примеру - идентификатор пользователя 500 - встроенный Администратор на всех машинах win2000. Если ориентироваться на него - х$$ня получится. Речь и идет о том как получить и проверить этот мифический "идентификатор безопасности", конкретно какие функции API для этого используются. Общие фразы ничего практического не дают. Лучше дай работающий пример и не будем учить папу любить маму :)


 
needle   (2003-09-19 14:50) [33]

-> Reindeer Moss Eater и Петров Денис
А забивайте, все равно от вас никого толку, только и можете что говорить "ты чукча, ни хера не шаришь, а винды они все делают вот так бля, с биркой бля, без ансамбля, все круто бля". так я тоже могу, это вам не функции расписать или ссылочку умную дать.


 
Петров Денис   (2003-09-19 14:51) [34]

Ну и где же модератор?


 
Reindeer Moss Eater   (2003-09-19 15:02) [35]

Лучше дай работающий пример и не будем учить папу любить маму :)

Иди в баню и люби маму с папой вместе.

Напоследок все же пример. Проверка username/password методом Challenge Response:

При логоне:
Сервер генерит случайное число CHALLENGE и шлет его клиенту.
Клиент вычисляет HASH(HASH(Clear_Password + Salt_Value) + CHALLENGE) и возвращает серверу
Если сервер хранит CLEAR_PASSWORD клиента, то
Сервер выполняет HASH(HASH(Clear_Password + Salt_Value) + CHALLENGE) и сравнивает с принятым RESPONSE
Если сервер не знает CLEAR_PASSWORD клиента, а хранит HASH(Clear_Password + Salt_Value), то
Сервер выполняет HASH(<хранимое_значение> + CHALLENGE) и сравнивает с принятым RESPONSE

Если совпало, значит клиент знает правильный пароль.
Злоумышленнику посередине бесполезно перехватывать как CHALLENGE (он каждый раз криптографически случаен) так и RESPONSE (он правильный только для конкретного CHALLENGE)

SALT_VALUE - произвольная случайная фиксированная величина, задаваемая при генерации системы.
Применяется как средство против атаки по словарю HASH-значений паролей.


 
Reindeer Moss Eater   (2003-09-19 15:29) [36]

это вам не функции расписать или ссылочку умную дать.

Функция - см.[3]
Ссылочка - см.[9]



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.035 c
1-41189
SergeY-cha
2003-11-02 11:23
2003.11.13
winXp


6-41797
Lord Of The Dark Wind
2003-09-14 09:49
2003.11.13
TClientSocket & TServerSocket


1-41364
Илья
2003-10-30 16:31
2003.11.13
Файлы ресурсов


14-42033
Soft
2003-10-15 19:06
2003.11.13
Алкогольный генератор.


8-41737
Igor__
2003-07-14 21:09
2003.11.13
Как рисунок 256 цветов конвертировать в 16 цветов ...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский