URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 77932
[ Назад ]

Исходное сообщение
"SMTP-AUTH MySQL (Postfix)"

Отправлено MVictorL , 18-Дек-07 10:51 
Имею почтовый сервер: FC6, Postfix-2.4.6, MySQL-5.0, Cyrus-SASL-2.1.22 (из rpm: -sql, -plain, -md5, -lib, -devel), PostfixAdmin-2.1.0.
Всё настроил, работает нормально. Проблема возникла, когда захотел дать доступ к почтовику "мобильным" пользователям, т.е. извне.
Я так понял, что для этого нужно настроить авторизацию SMTP.

На данном этапе проблема в том, что данная авторизация работает только, если в MySQL базе пароль внесен "как есть", т.е. в чистом виде. Но вся остальная связка использует криптованный (md5crypt) пароль.

Подскажите, пожалуйста, как мне поступить -- создать дополнительное поле с clear password (тогда вопрос, как его получить для уже существующих пользователей), или можно как-то "уговорить" Cyrus-SASL понимать то, что я уже имею, или любое другое приемлемое решение...


Содержание

Сообщения в этом обсуждении
"SMTP-AUTH MySQL (Postfix)"
Отправлено enforcer , 18-Дек-07 13:22 
>[оверквотинг удален]
>Я так понял, что для этого нужно настроить авторизацию SMTP.
>
>На данном этапе проблема в том, что данная авторизация работает только, если
>в MySQL базе пароль внесен "как есть", т.е. в чистом виде.
>Но вся остальная связка использует криптованный (md5crypt) пароль.
>
>Подскажите, пожалуйста, как мне поступить -- создать дополнительное поле с clear password
>(тогда вопрос, как его получить для уже существующих пользователей), или можно
>как-то "уговорить" Cyrus-SASL понимать то, что я уже имею, или любое
>другое приемлемое решение...

Настройте PAM. Он содержит модули для работы SASL с MySQL. Шифрованный пароль или не шифрованный - значения не имеет, ведь шифрование/дешифрацию производит движок MySQL при обращении к этому полю на запись/чтение соответственно. Смысл шифрации - закрыть от просмотра пароли при select-запросе сторонних пользователей.


"SMTP-AUTH MySQL (Postfix)"
Отправлено MVictorL , 18-Дек-07 13:36 
>Настройте PAM. Он содержит модули для работы SASL с MySQL. Шифрованный пароль
>или не шифрованный - значения не имеет, ведь шифрование/дешифрацию производит движок
>MySQL при обращении к этому полю на запись/чтение соответственно. Смысл шифрации
>- закрыть от просмотра пароли при select-запросе сторонних пользователей.

Но у меня всё работает без PAM! Cyrus-SASL обращается к MySQL самостоятельно и берет из указанного поля пароль, НО пропускает только если пароль в этом поле в чистом виде.
А у меня в этом поле пароль криптованный (создается PostfixAdmin'ом или уже созданные пользователи со старого почтовика, работающего под Qmail'ом)


"SMTP-AUTH MySQL (Postfix)"
Отправлено Krivoy , 18-Дек-07 14:21 
Не заносите новые пароли копипастом из таблицы!!! :)
Там добавляется лишний символ....

"SMTP-AUTH MySQL (Postfix)"
Отправлено MVictorL , 18-Дек-07 14:37 
>Не заносите новые пароли копипастом из таблицы!!! :)
>Там добавляется лишний символ....

... а никто и не заносит -- их создает PostfixAdmin функцией (если глянуть в код) md5crypt()


"SMTP-AUTH MySQL (Postfix)"
Отправлено Krivoy , 18-Дек-07 15:58 
>>Не заносите новые пароли копипастом из таблицы!!! :)
>>Там добавляется лишний символ....
>
>... а никто и не заносит -- их создает PostfixAdmin функцией (если
>глянуть в код) md5crypt()

Да я так из личного опыта - только что нарвался правда у меня в LDAPе.... Кстати а как он его создает? - блаблабла или {MD5}блаблабла ???


"SMTP-AUTH MySQL (Postfix)"
Отправлено MVictorL , 18-Дек-07 17:02 
>Да я так из личного опыта - только что нарвался правда у
>меня в LDAPе.... Кстати а как он его создает? - блаблабла
>или {MD5}блаблабла ???

Если интересно:
function pacrypt ($pw,pw_db="")                                                          
{                                                                    
   global $CONF;
   $password = "";
   $salt = "";
  
   if ($CONF['encrypt'] == 'md5crypt')
   {
      $split_salt = preg_split ('/\$/', $pw_db);
      if (isset ($split_salt[2])) $salt = $split_salt[2];
  
      $password = md5crypt ($pw, $salt);
   }  
  
   if ($CONF['encrypt'] == 'system')
   {
      if (ereg ("\$1\$", $pw_db))
      {
         $split_salt = preg_split ('/\$/', $pw_db);
         $salt = $split_salt[2];
      }  
      else
      {
         $salt = substr ($pw_db, 0, 2);
      }  
      $password = crypt ($pw, $salt);
   }  
  
   if ($CONF['encrypt'] == 'cleartext')
   {
      $password = $pw;
   }  
  
   return $password;
}


"SMTP-AUTH MySQL (Postfix)"
Отправлено MVictorL , 18-Дек-07 17:50 
Так а по сути вопроса кто-нибудь ответит???

"SMTP-AUTH MySQL (Postfix)"
Отправлено enforcer , 19-Дек-07 11:27 
>Так а по сути вопроса кто-нибудь ответит???

В общем, попроуйте вручную внести одну запись. Если сработает - значит скрипт вносит лишний символ. Когда я настраивал свой - мне попадались статьи с настройкой PAM. Все же советую почитать, хотя сам я сделал на bdb.
В логах mySQL что написано?


"SMTP-AUTH MySQL (Postfix)"
Отправлено yurik , 24-Мрт-08 12:16 
>>Так а по сути вопроса кто-нибудь ответит???
>

у меня была такая же трудность.

решилось пересборкой rpm'а cyrus-sasl
с применением патча
http://netilium.org/~mad/cyrus-sasl-2.1.22-crypt.patch

тогда в конфиге smtpd.conf
распознается слово
password_format: crypt

прошу доложить мне о результатах, помогло ли.


"SMTP-AUTH MySQL (Postfix)"
Отправлено MVictorL , 25-Мрт-08 15:51 
>[оверквотинг удален]
>
>решилось пересборкой rpm'а cyrus-sasl
>с применением патча
>http://netilium.org/~mad/cyrus-sasl-2.1.22-crypt.patch
>
>тогда в конфиге smtpd.conf
>распознается слово
>password_format: crypt
>
>прошу доложить мне о результатах, помогло ли.

Да, я тоже так делал...
Уже почти полгода сервак работает!