Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: kip в Jul 28, 2010, 09:36



Титла: Exim auth from MySQL
Публикувано от: kip в Jul 28, 2010, 09:36
Челта на упражнението, е Exim-а да чете md5crypt паролите от MySQL.В момента настртойката, която ползвам в Exim-а е:
Код:
auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$auth2}' AND `password` = \
                     '${quote_mysql:$auth3}'}{yes}{no}}
  server_prompts = :
  server_set_id = $auth2
Как да го накарам да md5crypt паролата която му изпращам от клиента(защото с текущата конфигурация трабва в клиента да пиша md5crypt хеша, а не паролата).Пробвах с crypteq, но пак не стана.Мисля, че трябва и md5 да сложа в конфига по-горе, но не съм се занимавал с Exim и просто не знам как точно  ??? да настроя server_condition-а.Разгледах и това ($2), но пак гредичка... Ако някой го е правил това нека помогне .


Титла: Re: Exim auth from MySQL
Публикувано от: kip в Jul 28, 2010, 13:23
Пробвах и така:
Код:
plain:
driver = plaintext
public_name = PLAIN
server_condition = ${crypteq{$auth3}{\{crypt\}${lookup mysql{SELECT `username` FROM \
                                  `mailbox` WHERE `username` = \
                                   '${quote_mysql:$auth2}' AND `password` = \
                                   '${quote_mysql:$auth3}' \
                                }}}{yes}{no}}
server_set_id = $auth2
Замених горе \{crypt\} с \{md5\} и пак не се получава ...
Някакви идеи ?


Титла: Re: Exim auth from MySQL
Публикувано от: romeo_ninov в Jul 28, 2010, 13:38
какъв тип е password колоната в базата?


Титла: Re: Exim auth from MySQL
Публикувано от: kip в Jul 28, 2010, 13:41
md5crypt


Титла: Re: Exim auth from MySQL
Публикувано от: romeo_ninov в Jul 28, 2010, 13:42
md5crypt
сложи го varchar, правиш иначе двойно хеширане (мисля)


Титла: Re: Exim auth from MySQL
Публикувано от: kip в Jul 28, 2010, 13:47
Извинявай мислех си за стойността. Полето е varchar , a стойността в него е резултат от md5crypt


Титла: Re: Exim auth from MySQL
Публикувано от: romeo_ninov в Jul 28, 2010, 13:52
Извинявай мислех си за стойността. Полето е varchar , a стойността в него е резултат от md5crypt
Въпроса е какво е записано в таблицата, направи един селект и сравни с md5 хеша на паролата


Титла: Re: Exim auth from MySQL
Публикувано от: kip в Jul 28, 2010, 13:56
В таблицата е записан криптиран md5 хеш.А просто не знам как да накарам  Exim-а да ми показва резултата от server_condition-а за да го сравня с този в таблицата  ???


Титла: Re: Exim auth from MySQL
Публикувано от: romeo_ninov в Jul 28, 2010, 14:02
В таблицата е записан криптиран md5 хеш.А просто не знам как да накарам  Exim-а да ми показва резултата от server_condition-а за да го сравня с този в таблицата  ???
Код:
echo romeo_ninov |md5sum
306c46ec345d7d05ed88a789a32d238a  -
Елементарно


Титла: Re: Exim auth from MySQL
Публикувано от: kip в Jul 28, 2010, 14:06
По точно в полето е записано това : crypt `echo romeo_ninov |md5sum`.
Не ме разбра май искам Exim-a da покаже резултата от
Код:
server_condition = ${crypteq{$auth3}{\{crypt\}${lookup mysql{SELECT `username` FROM \
                                  `mailbox` WHERE `username` = \
                                   '${quote_mysql:$auth2}' AND `password` = \
                                   '${quote_mysql:$auth3}' \
                                }}}{yes}{no}}

За да сравня с този в таблицата.


Титла: Re: Exim auth from MySQL
Публикувано от: romeo_ninov в Jul 28, 2010, 14:13
По точно в полето е записано това : crypt `echo romeo_ninov |md5sum`.
Не ме разбра май искам Exim-a da покаже резултата от
Код:
server_condition = ${crypteq{$auth3}{\{crypt\}${lookup mysql{SELECT `username` FROM \
                                  `mailbox` WHERE `username` = \
                                   '${quote_mysql:$auth2}' AND `password` = \
                                   '${quote_mysql:$auth3}' \
                                }}}{yes}{no}}

За да сравня с този в таблицата.
ти не ме разбра, аз ти демонстрирах как да видиш хеша на стринг, парола например. И след това сравняваш с фактическия запис в базата


Титла: Re: Exim auth from MySQL
Публикувано от: kip в Jul 28, 2010, 14:26
Цитат
ти не ме разбра, аз ти демонстрирах как да видиш хеша на стринг, парола например. И след това сравняваш с фактическия запис в базата
Хеша си го генерирам аз и го слагам в базата данни така, че не разбирам коментара ти.
Проблема не е в хеша в базата, а в начина, по който да накарам  Exim-а да преобразува plaintex паролата в хеш и да го сравнява с този от базата.


Титла: Re: Exim auth from MySQL
Публикувано от: romeo_ninov в Jul 28, 2010, 14:39
Цитат
ти не ме разбра, аз ти демонстрирах как да видиш хеша на стринг, парола например. И след това сравняваш с фактическия запис в базата
Хеша си го генерирам аз и го слагам в базата данни така, че не разбирам коментара ти.
Проблема не е в хеша в базата, а в начина, по който да накарам  Exim-а да преобразува plaintex паролата в хеш и да го сравнява с този от базата.
Като за начало погледни в логовете на MySQL какво точно се сравнява


Титла: Re: Exim auth from MySQL
Публикувано от: kip в Jul 28, 2010, 16:46
В логовете няма нищо, което да ме ориентира.


Титла: Re: Exim auth from MySQL
Публикувано от: romeo_ninov в Jul 28, 2010, 17:04
В логовете няма нищо, което да ме ориентира.
Една идея: защо не промените заявката така че стойността, която се генерира от exim да се записва в базата, а не да се сравнява. Така ще разберете какво всъщност създава exim и може би защо не стават нещата


Титла: Re: Exim auth from MySQL
Публикувано от: gat3way в Jul 28, 2010, 18:34
Под md5crypt предполагам се разбира съвсем различно нещо. Това е един алгоритъм, използван от линукс до неотдавна, за да си пази системните пароли. Изходът е $1$salt$base64(__crypt(password,salt)). __crypt() функцията прави грубо погледнато 1000 итерации като на всяка от тях се хваща изхода от предишната, добавя се salt-а и полученото се минава през md5 алгоритъма. Salt-а обикновено се избира на псевдослучаен принцип, поради което всяко викане на md5crypt срещу един и същ низ ще ти даде различна криптирана стойност - ако сравниш две криптирани стойности - няма да съвпаднат. Та когато се сравняват две криптирани по този начин пароли, трябва първо да хванеш това след $1$ до $ и да го ползваш като salt при генерирането на втората парола, вместо да го оставиш да си избере псевдослучайна стойност.

Само дето като хвърлих едно око, май exim не предвижда да му се задава salt и освен ако не е достатъчно умен сам да си ги прави тези неща (което по-скоро ме съмнява), твърде вероятно ще видиш голям зор. md5crypt паролите са хубаво нещо, защото за разлика от простите md5 хеш стойности не могат да се чупят с rainbow таблици, от друга страна bruteforce атаките са доста по-бавни. Само дето в случаи като този май не са толкова добра идея.


Титла: Re: Exim auth from MySQL
Публикувано от: kip в Jul 29, 2010, 10:58
Цитат
Само дето като хвърлих едно око, май exim не предвижда да му се задава salt и освен ако не е достатъчно умен сам да си ги прави тези неща (което по-скоро ме съмнява), твърде вероятно ще видиш голям зор. md5crypt паролите са хубаво нещо, защото за разлика от простите md5 хеш стойности не могат да се чупят с rainbow таблици, от друга страна bruteforce атаките са доста по-бавни. Само дето в случаи като този май не са толкова добра идея.
gat3way май си прав надявах се Exim-a до може да го прави сам ама ...  ^-^. Всичкото хауто дето изнамерих ме насочва да ползвам crypteq функцията на Exim. След като направих както ме посъветва romeo_ninov   (благодаря за идеята) да записвам в базата резултата от това, което прави Exim-a се получава следното :
при : server_condition = ${lookup mysql{insert into test value ('${quote_mysql:$auth2}','${quote_mysql:$auth3}')}{yes}{no}} в базата се записват юзера и паролата без проблем (което си е в реда на нещата) , НО
при : server_condition =  ${crypteq{$auth2}{\{crypt\} ${lookup mysql{insert into test value ('${quote_mysql:$auth2}','${quote_mysql:$value}')}{yes}{no}} }}
в лога на Exim :  435 Unable to authenticate at present (set_id=some_user@some_domain.com): "${crypteq" is not a known operator (or a } is missing in a variable reference)

Пробвах и това :
server_condition = ${if crypteq{$auth3}{\{md5\}${lookup mysql{insert into test value ('${quote_mysql:$auth2}','${quote_mysql:$value}')} } {yes}{no} }
server_condition = ${if crypteq{$auth3}{\{crypt\}${lookup mysql{insert into test value ('${quote_mysql:$auth2}','${quote_mysql:$value}')} } {yes}{no} }
но в базата записва само юзера без хеш ???

За server_condition-а се водих от това ($2).Ще поровя още малко ... благодарен съм на вякакви идеи  ^-^


Титла: Re: Exim auth from MySQL
Публикувано от: gat3way в Jul 29, 2010, 12:10
Защо все пак не пуснеш mysql сървъра да ти лог-ва всички заявки? За справка виж документацията:
http://dev.mysql.com/doc/refman/5.0/en/query-log.html

предполагам, спирането на услугата и стартирането на ръка с mysqld --log=logfile ще свърши работа.

Ще е много интересно какви заявки се изпълняват


Титла: Re: Exim auth from MySQL
Публикувано от: romeo_ninov в Jul 29, 2010, 12:14
Защо все пак не пуснеш mysql сървъра да ти лог-ва всички заявки? За справка виж документацията:
http://dev.mysql.com/doc/refman/5.0/en/query-log.html

предполагам, спирането на услугата и стартирането на ръка с mysqld --log=logfile ще свърши работа.

Ще е много интересно какви заявки се изпълняват
Хм, не мисля че в неговия случай (не запис, а четене) ще свърши работа, защото се записват само DML заявките


Титла: Re: Exim auth from MySQL
Публикувано от: gat3way в Jul 29, 2010, 12:36
Би трябвало всички заявки да се логват, поне такива спомени имам. Включително селект-ите.


Титла: Re: Exim auth from MySQL
Публикувано от: kip в Jul 29, 2010, 13:37
gat3way прав си сега направих тест на работната ми машина всички заявки се логват.Сега ще пробвам на freeBSD-to  да видим лога от дейността на Exim-a.


Титла: Re: Exim auth from MySQL
Публикувано от: romeo_ninov в Jul 29, 2010, 13:41
Би трябвало всички заявки да се логват, поне такива спомени имам. Включително селект-ите.
Не знам къде съм гледал, вчера търсих точно тази функционалност и нещо не я намерих


Титла: Re: Exim auth from MySQL
Публикувано от: kip в Jul 29, 2010, 16:14
Да обощя да наистина Еxim може да си генерира md5crypt  в смисъла на :
Цитат
$1$salt$base64(__crypt(password,salt)). __crypt() функцията прави грубо погледнато 1000 итерации като на всяка от тях се хваща изхода от предишната, добавя се salt-а и полученото се минава през md5 алгоритъма.
и да сравнява резултата със стойност записана в MySQL.
След дълго сравняване на лог файла  на MySQL (благодаря за идеята на gat3way) и rejectlog на Exim дефинирах следния server_condition, който md5crypt-ва plaintext паролата и сравнява salt-a  с този от базата данни :
server_condition = ${if crypteq{$auth3} {\{crypt\}${lookup mysql{SELECT password FROM mailbox WHERE username='${quote_mysql:$auth2}'}}} {yes}{no}}

Благодаря за помоща на всички.