leewoody / psi-dev

Automatically exported from code.google.com/p/psi-dev
0 stars 0 forks source link

NTLM аутентификация #261

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
Для использования в домене MS Windows.
Проверял на Openfire 3.6.4 с патчем от norman.rasmussen

Взято из miranda IM.

использование:
 - настроить Openfire на использование доменных учеток
 - запустить psi с машины в домене под доменным пользователем
 - в настройках аккаунта указать любой пароль
 - на закладке Соединение поставить галку Allow NTLM

Original issue reported on code.google.com by grinc...@gmail.com on 18 Feb 2010 at 10:56

Attachments:

GoogleCodeExporter commented 8 years ago
Ого, мощно. Жаль, проверить не могу. А зачем 
вводить любой пароль? Может лучше
сделать, что если в настроках выставлено 
Allow NTLM - поле ввода пароля становится
неактивным?
Еще в патче нужно заменить все пробелы в 
начале строк на табы. И, думаю, можете
запостить его непосредственно в апстрим.

Original comment by wadea...@gmail.com on 19 Feb 2010 at 5:08

GoogleCodeExporter commented 8 years ago
grincart: Интересует совместимость с ejabberd.

wadealer: этот патч может и нам пригодиться.

Original comment by vladimir.shelukhin on 19 Feb 2010 at 6:10

GoogleCodeExporter commented 8 years ago
Конечно, пригодится! Это мощная штука. 
Просто я думаю, что его должны в апстрим 
взять

Original comment by wadea...@gmail.com on 19 Feb 2010 at 7:27

GoogleCodeExporter commented 8 years ago
wadealer: по поводу неактивного поля пароля 
вопрос спорный...
NTLM можно также использовать с машины не в 
домене, тогда пароль нужен.
только зачем в этом случае NTLM...

vladimir.shelukhin: думается, что совместимость с 
ejabberd будет, т.к. пакеты
аутентификации формирует виндовая 
библиотека.

про табы не понял... патч же diff делает. как-то 
не так сделал?

Original comment by grinc...@gmail.com on 19 Feb 2010 at 7:31

GoogleCodeExporter commented 8 years ago
wadealer: с апстримом может быть косяк, т.к. патч 
накладывается в основном на iris и
его qca.
как я только вчера обнаружил, существует
qca-wingss-2.0.0-beta1.tar.bz2  SASL GSSAPI (for Kerberos)
но, видимо, т.к. Windows Only, то в Psi не 
используется.
qca NTLM не нашёл.

короче, имо, в Psi с этим патчем пошлют куда 
подальше...

Original comment by grinc...@gmail.com on 19 Feb 2010 at 7:39

GoogleCodeExporter commented 8 years ago
Дело не в патче, а в самом коде. В исходном 
коде psi перед строкой нет пробелов, там
табы. А в твоем коде - пробелы. Нужно 
исправить.

Original comment by wadea...@gmail.com on 19 Feb 2010 at 8:06

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
исправил.

Original comment by grinc...@gmail.com on 19 Feb 2010 at 11:19

Attachments:

GoogleCodeExporter commented 8 years ago
наложил патч последним, компилирую.

Original comment by vladimir.shelukhin on 20 Feb 2010 at 11:50

GoogleCodeExporter commented 8 years ago
скомпилилось успешно. теперь осталось 
найти ёжика с ntlm и доменом :)

Original comment by vladimir.shelukhin on 20 Feb 2010 at 12:19

GoogleCodeExporter commented 8 years ago
я правильно понимаю что это windows-only патч?
я не вижу ни одного ifdef в патче и тем не 
менее похоже он подключает что-то только 
вендовое (security.h).

по псишному кодестайлингу нужно 
использовать табы для отступов в строках

Original comment by rion4ik on 20 Feb 2010 at 8:26

GoogleCodeExporter commented 8 years ago

Original comment by rion4ik on 21 Feb 2010 at 7:55

GoogleCodeExporter commented 8 years ago
> я правильно понимаю что это windows-only патч?
да.

> я не вижу ни одного ifdef в патче и тем не 
менее похоже он подключает что-то только 
>вендовое (security.h).
будет чуть позже, совсем забыл

>по псишному кодестайлингу нужно 
использовать табы для отступов в строках
http://code.google.com/p/psi-dev/issues/detail?id=261#c8
здесь поправил на табы, не знаю как 
перезалить на первом сообщении...

Original comment by grinc...@gmail.com on 21 Feb 2010 at 1:10

GoogleCodeExporter commented 8 years ago
> не знаю как перезалить на первом 
сообщении...
при написании комментария можно 
приаттачить новый патч, а предыдущие 
аттачи можно не
трогать.

Original comment by vladimir.shelukhin on 21 Feb 2010 at 1:29

GoogleCodeExporter commented 8 years ago
неправда. ничего там не исправлено.

Original comment by rion4ik on 21 Feb 2010 at 6:13

GoogleCodeExporter commented 8 years ago
> неправда. ничего там не исправлено.
чего-то перекосило меня. исправил.

добавил ifdef, но м.б. коряво. под линуксом 
собрать не пробовал.

Original comment by grinc...@gmail.com on 22 Feb 2010 at 11:45

Attachments:

GoogleCodeExporter commented 8 years ago
в *.pri файлах тоже надо сделать условное 
подключение windows-oly файлов

Original comment by rion4ik on 23 Feb 2010 at 7:45

GoogleCodeExporter commented 8 years ago
>в *.pri файлах тоже надо сделать условное 
подключение windows-oly файлов
как-то так...

Original comment by grinc...@gmail.com on 23 Feb 2010 at 9:13

Attachments:

GoogleCodeExporter commented 8 years ago
патч приму если будет написан с поддержкой 
Libntml(http://josefsson.org/libntlm/) с минимальным 
дублированием кода для вин и всего 
остального.

Original comment by rion4ik on 13 Jul 2010 at 7:14

GoogleCodeExporter commented 8 years ago
А аналогичную штуку можно сделать для 
аутентификации на прокси сервере в 
настройках подключения черех прокси?

Original comment by maksim.maj on 14 Jul 2010 at 10:49

GoogleCodeExporter commented 8 years ago
я обычно люблю говорить что нет ничего 
невозможного =)

Original comment by rion4ik on 14 Jul 2010 at 10:51

GoogleCodeExporter commented 8 years ago
> написан с поддержкой Libntml(http://josefsson.org/libntlm/)
а смысл?
чтоб использовать NTLM под linux?

это всё задумывалось, чтобы использовать 
single sign on,
т.е. вход без пароля в домене windows

Original comment by grinc...@gmail.com on 14 Jul 2010 at 11:15

GoogleCodeExporter commented 8 years ago
@grincart, да именно.
я честно говоря, слабо представляю как этот 
single sign on и вообще использование вендового 
домена можно организовать под линуксом, но 
догадываюсь аутентификации по NTLM как 
таковая может понадобиться.

ну и кроме того, я несколько недолюбливаю 
однобокие решения. это уж так, моё скромное 
мнение =)

Original comment by rion4ik on 14 Jul 2010 at 11:35

GoogleCodeExporter commented 8 years ago
@rion4ik, просьба принять патчи, поскольку то, 
что вы предлагаете - бессмысленно
Никакой libntlm под линуксом никогда никому 
нужен не будет, по одной простой причине.

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

Хотел бы также заметить, что 
распространению джаббера очень сильно 
мешает отсутствие вменяемой подержки NTLM, 
Kerberos и некоторых других вещей.

На данный момент клиентов, поддерживающих 
(реально, а не на бумаге) Kerberos целых одна 
штука, сереров - такое же количество. В то же 
время клиентов, которые желают иметь 
подобный клиент и сервер для 
корпоративного IM - миллионы.

Спасибо.

Original comment by fer...@gmail.com on 6 Feb 2012 at 2:31

GoogleCodeExporter commented 8 years ago
не знаю что там с libntlm, но в остальном 
всецело псиплюсую!

Original comment by maksim.maj on 6 Feb 2012 at 8:26

GoogleCodeExporter commented 8 years ago
Протестировал патч - он нерабочий
Я так понимаю, код позаимствован из миранды
В миранде код тоже нерабочий

Единственный рабочий клиент - это Pandion, 
тестировалось на ejabberd с соответствующими 
патчами, разумеется.

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

Спасибо.

Original comment by fer...@gmail.com on 12 Mar 2012 at 4:31

GoogleCodeExporter commented 8 years ago
Можно поинтересоваться, что именно не 
работает?
Не накладывается патч или в принципе не 
работает?

Последний раз собирал год назад ( 21.04.11 ).
До сих пор работает домен на 40 клиентов.

Странно говорить, что в миранде код 
нерабочий...

Может ejabberd не поддерживает NTLM, а Pandion входит 
используя что-то другое
Kerberos/GSS/SASL ?

Original comment by grinc...@gmail.com on 12 Mar 2012 at 6:55

GoogleCodeExporter commented 8 years ago
патч накладывается
в миранде код нерабочий, я уже понял почему
баг проявляется только в 7/2008 системах и 
является общеизвестной регрессией

дело в том, что с висты NTLMSSP отключен и 
теперь для совместимости он включается 
несколькими на мой взгляд странными 
манипуляциями, но, опять же, по 
рекомендации МС

ссылок сейчас при себе нет, ключевые слова 
SPNEGO, NEGOex, гугл много чего говорит на сей счет

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

прошу также заметить, что далеко не я один 
"в курсе"
например: 
https://support.process-one.net/secure/ViewProfile.jspa?name=sm97

в миранде используется "жесткая схема" 
response-challenge, первое сообщение НЕ должно 
содержать никаких данных, только заявление 
о выборе механизма
SASL предполагает определенный набор шагов, 
видио, здесь он просто нарушается

Pandion же работает, просто потому что написан 
на js и просто используется соответствующий 
интерфейс к SSPI (что единственно верно)

Фикс должен быть предельно простой, но дело 
в том, что я не программер и править С код 
мне тяжеловато. Если кто-нить готов помочь - 
я буду только рад, тесты гарантирую.

Original comment by fer...@gmail.com on 12 Mar 2012 at 7:48

GoogleCodeExporter commented 8 years ago
да, забыл добавить, я довел до рабочего 
состояния NTLM на ejabberd
подсистема авторизациии сервера вообще 
довольно в плачевном состоянии, её похоже 
никто никогда не тестирует, код там с 
огромным числом ошибок и фактически "из 
коробки" работает только PLAIN

Original comment by fer...@gmail.com on 12 Mar 2012 at 7:52

GoogleCodeExporter commented 8 years ago
ссылка неправильная, и, еще раз прочитав 
комменты, вижу, что причина кроектся даже 
не в отключенном NTLMSSP, он косвенным 
способом может задействоваться, а вот в 
этих словах
"Miranda works only if disable SASL. Pidgin have hardcoded support for SASL so 
it cannot be disabled."

https://support.process-one.net/browse/EJAB-629

Original comment by fer...@gmail.com on 12 Mar 2012 at 8:04

GoogleCodeExporter commented 8 years ago
Такс...
По ссылке мне пройти.

В википедии ж чётко написано - "... NTLMSSP has been 
removed from Windows Vista and Windows Server 2008 in favor of the newer 
Kerberos authentication protocol."

Этот патч относится только к NTLM.
Далеко не безопасный вариант, но простота 
реализации.

По поводу "Единственный рабочий клиент - 
это Pandion"...
У Openfire есть свой клиент вполне 
поддерживающий Kerberos.

SASL вообще не тот механизм, который стоит 
рассматривать в домене.

Опять же, на W7/2003 NTLM нормально работает.
W7/2008 не проверял.

Может имеет смысл Kerberos SSP пилить?

Original comment by grinc...@gmail.com on 12 Mar 2012 at 8:07

GoogleCodeExporter commented 8 years ago
Механизм согласования я оставлял 
оригинальным.
Из mirand-ы взят только ntlm и добавлен как 
возможный протокол аутентификации.

Про SASL всё правильно написано.
Он невозможен к использованию, т.к. 
требуется известный пароль со стороны 
клиента.

Так же, аналогично, в linux нельзя настроить 
авторизацию ntlm->samba->unix user

Original comment by grinc...@gmail.com on 12 Mar 2012 at 8:12

GoogleCodeExporter commented 8 years ago
+#ifdef Q_OS_WIN
+           if (mech == "NTLM"  && allow_NTLM) {
+               mechanism_ = "NTLM";
+               break;
+           }
+#endif

вот break здесь наверное не очень к месту
опять же, код С++ я не сильно понимаю, так что 
мои комментарии могут быть бесполезны, я 
еще не смотрел толком внутрь подсистемы 
авторизации psi+

Original comment by fer...@gmail.com on 12 Mar 2012 at 8:18

GoogleCodeExporter commented 8 years ago
"В википедии ж чётко написано - "... NTLMSSP has been 
removed from Windows Vista and Windows Server 2008 in favor of the newer 
Kerberos authentication protocol."

повторяю - у меня работает NTLM во *всех* 
системах - XP/7/2003/linux(server-side)
я смотрел в код теста libntlm и он выглядит 
немного отлично от мирандовского - стадии 
там 2 до первого ответа на challenge, если я, 
конечно, все верно понял

самая адекватная реализация в юниксах - в 
самбе, один человек очень правильно сделал, 
что заиспользовал их helper для server-side NTLM
это самый толковый способ, просто потому 
что будет поддерживаться лучше всего

Original comment by fer...@gmail.com on 12 Mar 2012 at 8:22

GoogleCodeExporter commented 8 years ago
"У Openfire есть свой клиент вполне 
поддерживающий Kerberos." Мне так и не удалось 
его настроить, это раз. Во-вторых, опенфайр 
страшно тормозной. У меня около 1000 
пользователей в домене, а опенфайр дохнет 
по некоторым данным уже на 50-100. Ejabberd сделан 
именно так, как должен быть сделан сетевой 
сервис - предельно модульным и практически 
неубиваемым.

Original comment by fer...@gmail.com on 12 Mar 2012 at 8:26

GoogleCodeExporter commented 8 years ago
"Может имеет смысл Kerberos SSP пилить?" Уже давно 
пилю, пришлось разбираться полностью в 
коде, что заняло огромное количество 
времени. Существующий код под ejabberd опять же 
нерабочий, пилю по мере возможности. На 
первом этапе устроит NTLM. Kerberos допилю позже.

Original comment by fer...@gmail.com on 12 Mar 2012 at 8:28

GoogleCodeExporter commented 8 years ago
Ну тогда нужно сравнивать трафик рабочего 
клиента с нерабочим и уже делать какие-то 
выводы.

Original comment by grinc...@gmail.com on 12 Mar 2012 at 8:34

GoogleCodeExporter commented 8 years ago
Ребята, здесь не форум. Это багтрэкер. Есть 
желание пообщаться - или в личной 
переписке, или на форуме

Original comment by wadea...@gmail.com on 13 Mar 2012 at 7:38

GoogleCodeExporter commented 8 years ago
Writing in english in order to attract more people to testing.

I couldn't get patch posted above to work and after some digging into the code 
I was finally able to find the issue and fix it. Please find updated patch in 
attachment.

Generally, the path strictly relies on SSPI infrastructure which is 
windows-related and  I've found also that while it was ported from miranda's 
code tree it lacks support of GSSAPI which seems to be implemented there. I've 
found several NTLM client auth implementations including libntlm, ntlm_auth 
helper and several less popular (from my impression gotten after thorough 
googling) like heimdal libs, libkntlm4, and the best supported cntlm which does 
not seem to provide libraries. I was really surprised to find out that NTLM2 is 
supported by QAuthenticator Qt class but was unable to find any usable and 
clear to me examples to play with.

I'm planning to get to work GSSAPI/Kerberos later, when I'm able to fix 
ejabberd's code.

This path is in state *worksforme*, tested both on DJabberd and ejabberd with 
patches applied (see https://support.process-one.net/browse/EJAB-629 for 
details), last one got fixes to code which will be posted soon.

Thanks to patch author!

Original comment by fer...@gmail.com on 27 Apr 2012 at 4:36

Attachments:

GoogleCodeExporter commented 8 years ago
патчик непригоден для апстрима из-за плохо 
знания Qt и C++ а также хренового местами 
кодестайла. но в пси+ жить резрешаю. но 
исключительно последним в очереди

Original comment by rion4ik on 27 Apr 2012 at 5:51

GoogleCodeExporter commented 8 years ago
После того, как QCA убрали из исходников, 
патч перестал быть актуальным

Original comment by wadea...@gmail.com on 26 Oct 2012 at 7:38

GoogleCodeExporter commented 8 years ago
А есть возможность адаптировать патч к 
последней версии Psi+ ?

Original comment by obtim1...@gmail.com on 17 Sep 2013 at 5:48