Титла: Exim auth from MySQL Публикувано от: kip в Jul 28, 2010, 09:36 Челта на упражнението, е Exim-а да чете md5crypt паролите от MySQL.В момента настртойката, която ползвам в Exim-а е:
Код: auth_plain: Титла: Re: Exim auth from MySQL Публикувано от: kip в Jul 28, 2010, 13:23 Пробвах и така:
Код: plain: Някакви идеи ? Титла: 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 Титла: 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 \ За да сравня с този в таблицата. Титла: Re: Exim auth from MySQL Публикувано от: romeo_ninov в Jul 28, 2010, 14:13 По точно в полето е записано това : crypt `echo romeo_ninov |md5sum`.ти не ме разбра, аз ти демонстрирах как да видиш хеша на стринг, парола например. И след това сравняваш с фактическия запис в базата Титла: 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 Като за начало погледни в логовете на 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 сървъра да ти лог-ва всички заявки? За справка виж документацията:Хм, не мисля че в неговия случай (не запис, а четене) ще свърши работа, защото се записват само 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}} Благодаря за помоща на всички. |