Автор Тема: Exim auth from MySQL  (Прочетена 5770 пъти)

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Exim auth from MySQL
« Отговор #15 -: 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 атаките са доста по-бавни. Само дето в случаи като този май не са толкова добра идея.
Активен

"Knowledge is power" - France is Bacon

kip

  • Напреднали
  • *****
  • Публикации: 162
  • Distribution: Debian, FreeBSD, Arch Linux
  • Window Manager: Gnome,LXDE,XFCE
    • Профил
Re: Exim auth from MySQL
« Отговор #16 -: 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-а се водих от това.Ще поровя още малко ... благодарен съм на вякакви идеи  ^-^
« Последна редакция: Jul 29, 2010, 11:15 от kip »
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Exim auth from MySQL
« Отговор #17 -: Jul 29, 2010, 12:10 »
Защо все пак не пуснеш mysql сървъра да ти лог-ва всички заявки? За справка виж документацията:
http://dev.mysql.com/doc/refman/5.0/en/query-log.html

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

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

"Knowledge is power" - France is Bacon

romeo_ninov

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

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

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

0x2B|~0x2B

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Exim auth from MySQL
« Отговор #19 -: Jul 29, 2010, 12:36 »
Би трябвало всички заявки да се логват, поне такива спомени имам. Включително селект-ите.
Активен

"Knowledge is power" - France is Bacon

kip

  • Напреднали
  • *****
  • Публикации: 162
  • Distribution: Debian, FreeBSD, Arch Linux
  • Window Manager: Gnome,LXDE,XFCE
    • Профил
Re: Exim auth from MySQL
« Отговор #20 -: Jul 29, 2010, 13:37 »
gat3way прав си сега направих тест на работната ми машина всички заявки се логват.Сега ще пробвам на freeBSD-to  да видим лога от дейността на Exim-a.
« Последна редакция: Jul 29, 2010, 14:03 от kip »
Активен

romeo_ninov

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

0x2B|~0x2B

kip

  • Напреднали
  • *****
  • Публикации: 162
  • Distribution: Debian, FreeBSD, Arch Linux
  • Window Manager: Gnome,LXDE,XFCE
    • Профил
Re: Exim auth from MySQL
« Отговор #22 -: 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}}

Благодаря за помоща на всички.
« Последна редакция: Jul 29, 2010, 16:16 от kip »
Активен