Форум: "Сети";
Текущий архив: 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