psi-plus / main

Main repository with patches and required resources
https://psi-plus.com/
GNU Lesser General Public License v2.1
68 stars 19 forks source link

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

Closed Ri0n closed 8 years ago

Ri0n commented 9 years ago

Original issue 261 created by psi-plus on 2010-02-18T22:56:53.000Z:

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

Взято из miranda IM.

использование:

Ri0n commented 9 years ago

Comment #1 originally posted by psi-plus on 2010-02-19T17:08:07.000Z:

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

Ri0n commented 9 years ago

Comment #2 originally posted by psi-plus on 2010-02-19T18:10:37.000Z:

grincart: Интересует совместимость с ejabberd.

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

Ri0n commented 9 years ago

Comment #3 originally posted by psi-plus on 2010-02-19T19:27:13.000Z:

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

Ri0n commented 9 years ago

Comment #4 originally posted by psi-plus on 2010-02-19T19:31:36.000Z:

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

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

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

Ri0n commented 9 years ago

Comment #5 originally posted by psi-plus on 2010-02-19T19:39:15.000Z:

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

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

Ri0n commented 9 years ago

Comment #6 originally posted by psi-plus on 2010-02-19T20:06:44.000Z:

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

Ri0n commented 9 years ago

Comment #7 originally posted by psi-plus on 2010-02-19T20:11:25.000Z:

в QT Creator есть "волшебная комбинация клавиш"?

Ri0n commented 9 years ago

Comment #8 originally posted by psi-plus on 2010-02-19T23:19:42.000Z:

исправил.

Ri0n commented 9 years ago

Comment #9 originally posted by psi-plus on 2010-02-20T11:50:02.000Z:

наложил патч последним, компилирую.

Ri0n commented 9 years ago

Comment #10 originally posted by psi-plus on 2010-02-20T12:19:38.000Z:

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

Ri0n commented 9 years ago

Comment #11 originally posted by psi-plus on 2010-02-20T20:26:14.000Z:

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

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

Ri0n commented 9 years ago

Comment #12 originally posted by psi-plus on 2010-02-21T07:55:21.000Z:

<empty>

Ri0n commented 9 years ago

Comment #13 originally posted by psi-plus on 2010-02-21T13:10:01.000Z:

я правильно понимаю что это windows-only патч? да.

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

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

Ri0n commented 9 years ago

Comment #14 originally posted by psi-plus on 2010-02-21T13:29:10.000Z:

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

Ri0n commented 9 years ago

Comment #15 originally posted by psi-plus on 2010-02-21T18:13:08.000Z:

неправда. ничего там не исправлено.

Ri0n commented 9 years ago

Comment #16 originally posted by psi-plus on 2010-02-22T23:45:52.000Z:

неправда. ничего там не исправлено. чего-то перекосило меня. исправил.

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

Ri0n commented 9 years ago

Comment #17 originally posted by psi-plus on 2010-02-23T07:45:34.000Z:

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

Ri0n commented 9 years ago

Comment #18 originally posted by psi-plus on 2010-02-23T21:13:54.000Z:

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

Ri0n commented 9 years ago

Comment #19 originally posted by psi-plus on 2010-07-13T19:14:48.000Z:

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

Ri0n commented 9 years ago

Comment #20 originally posted by psi-plus on 2010-07-14T10:49:20.000Z:

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

Ri0n commented 9 years ago

Comment #21 originally posted by psi-plus on 2010-07-14T10:51:49.000Z:

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

Ri0n commented 9 years ago

Comment #22 originally posted by psi-plus on 2010-07-14T11:15:58.000Z:

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

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

Ri0n commented 9 years ago

Comment #23 originally posted by psi-plus on 2010-07-14T11:35:11.000Z:

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

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

Ri0n commented 9 years ago

Comment #24 originally posted by psi-plus on 2012-02-06T14:31:09.000Z:

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

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

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

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

Спасибо.

Ri0n commented 9 years ago

Comment #25 originally posted by psi-plus on 2012-02-06T20:26:35.000Z:

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

Ri0n commented 9 years ago

Comment #26 originally posted by psi-plus on 2012-03-12T16:31:50.000Z:

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

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

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

Спасибо.

Ri0n commented 9 years ago

Comment #27 originally posted by psi-plus on 2012-03-12T18:55:33.000Z:

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

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

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

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

Ri0n commented 9 years ago

Comment #28 originally posted by psi-plus on 2012-03-12T19:48:11.000Z:

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

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

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

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

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

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

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

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

Ri0n commented 9 years ago

Comment #29 originally posted by psi-plus on 2012-03-12T19:52:04.000Z:

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

Ri0n commented 9 years ago

Comment #30 originally posted by psi-plus on 2012-03-12T20:04:28.000Z:

ссылка неправильная, и, еще раз прочитав комменты, вижу, что причина кроектся даже не в отключенном 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

Ri0n commented 9 years ago

Comment #31 originally posted by psi-plus on 2012-03-12T20:07:27.000Z:

Такс... По ссылке мне пройти.

В википедии ж чётко написано - "... 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 пилить?

Ri0n commented 9 years ago

Comment #32 originally posted by psi-plus on 2012-03-12T20:12:23.000Z:

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

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

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

Ri0n commented 9 years ago

Comment #33 originally posted by psi-plus on 2012-03-12T20:18:33.000Z:

+#ifdef Q_OS_WIN

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

Ri0n commented 9 years ago

Comment #34 originally posted by psi-plus on 2012-03-12T20:22:55.000Z:

"В википедии ж чётко написано - "... 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 это самый толковый способ, просто потому что будет поддерживаться лучше всего

Ri0n commented 9 years ago

Comment #35 originally posted by psi-plus on 2012-03-12T20:26:02.000Z:

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

Ri0n commented 9 years ago

Comment #36 originally posted by psi-plus on 2012-03-12T20:28:28.000Z:

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

Ri0n commented 9 years ago

Comment #37 originally posted by psi-plus on 2012-03-12T20:34:20.000Z:

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

Ri0n commented 9 years ago

Comment #38 originally posted by psi-plus on 2012-03-13T07:38:47.000Z:

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

Ri0n commented 9 years ago

Comment #39 originally posted by psi-plus on 2012-04-27T16:36:51.000Z:

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!

Ri0n commented 9 years ago

Comment #40 originally posted by psi-plus on 2012-04-27T17:51:42.000Z:

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

Ri0n commented 9 years ago

Comment #41 originally posted by psi-plus on 2012-10-26T07:38:31.000Z:

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

Ri0n commented 9 years ago

Comment #42 originally posted by psi-plus on 2013-09-17T05:48:20.000Z:

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

Ri0n commented 8 years ago

qca is out of scope of Psi development now.