Назад | Перейти на главную страницу

Postfix + Dovecot с бэкэндом MySQL: хешированные пароли md5 и авторизация CRAM-MD5

Мой вопрос

Каковы риски перехода с паролей MD5 на CRAM-MD5 в базе данных, особенно с учетом следующего, и как подойти к этому для существующей установки (при условии, что я знаю пароли в виде обычного текста)?

С (переходом на) CRAM-MD5,

  1. для шифрования / проверки PostfixAdmin должен вернуться к внешнему инструменту (doveadm pw) при создании пользователя и изменении пароля, поэтому пароль в открытом виде по крайней мере вскоре появится в списке процессов1
  2. Возможно, я ввожу новую зависимость (тот же самый инструмент)
  3. Не уверены, могут ли с этим справиться другие (сторонние) инструменты

Пункт 2 может не иметь большого значения, поскольку я не планирую заменять Dovecot (и даже если у него есть хорошо документированные пути миграции, IMHO). Пункт 3 не имеет большого значения все же (поскольку я не знаю таких инструментов). За кулисами есть также SASL, который, IIRC, снова выполняет эту часть своей работы с помощью Dovecot (например, smtpd_sasl_type=dovecot в конфиге Postfix). Но, может быть, я что-то упустил - будь то еще одна проблема или другой вариант.

Есть подсказки? Что бы вы порекомендовали (кроме полностью разные настройки)?

TL; DR (фон)

Я нахожусь в процессе настройки нового почтового сервера, использую Dovecot, Postfix, PostfixAdmin, Sieve, некоторые дополнительные компоненты - все они связаны с MySQL в качестве бэкэнда (не следуя этот немецкий учебник). Пока у меня все работает, но потом я заметил, что для аутентификации IMAP доступны только PLAIN и LOGIN. Не имеет большого значения для местный соединения (например, веб-почтовая программа Roundcube на том же компьютере) и другие «зашифрованные соединения» (HTTPS / IMAPS / POP3S / SMTPS) - но я боюсь, что некоторые пользователи будут использовать вместо этого незашифрованные соединения, которые я не хочу полностью отключить (есть ситуации, когда это может понадобиться).

Поэтому я включил CRAM-MD5 и DIGEST-MD5 в Dovecot - что, конечно, не могло работать: PostfixAdmin хранит пароли в базе данных, используя свою внутреннюю процедуру MD5, и поэтому Dovecot не может сопоставить их (см. мой ответ здесь подробнее). Что в основном оставляет мне 3 варианта, один из которых даже не таковой:

Обновить

Из исследования «участников» вот сравнение возможностей:

                    PwdStore MD5         PwdStore CRAM-DM5
Webmail (Roundcube)

Client/Server       HTTPS only (HTTP requests would be upgraded, so PLAIN = OK)
IMAP                PLAIN                PLAIN / CRAM-MD5 (internal)²
SMTP                PLAIN                PLAIN / CRAM-MD5 (internal)²

Native Clients (connecting to Postfix/Dovecot)

IMAP³               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5
SMTP³               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5
POP3³               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5
IMAPS               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5
SMTPS               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5
POP3S               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5

PostfixAdmin
Create/Update       MD5 (internal)       CRAM-MD5 (via dovecotadm)⁴

1: Я только что проверил источники и обнаружил в postfixadmin/functions.inc.php в строке 928:
Use proc_open call to avoid safe_mode problems and to prevent showing plain password in process table
Так что этот контраргумент, похоже, не выдерживает критики.

2: roundcube/program/lib/Roundcube/rcube_imap_generic.php строка 90ff, в function authenticate()

3: ОБЫЧНЫЙ / ВХОД обычно отключен для незашифрованных соединений

4: Может быть переписан с использованием кода из Roundcube, поскольку оба написаны на PHP, но PostfixAdmin

Поскольку я не получил ответов, я поэкспериментировал сам и, наконец, переключился, и все прошло гладко. Преимущество, как было сказано изначально, состоит в том, CRAM-MD5 доступны для аутентификации на незашифрованном транспорте, если шифрованный транспорт недоступен (да, такое случается), плюс упрощает переход со старого сервера для тех, кто уже использует там CRAM-MD5. Кроме того, побочных эффектов не наблюдалось. все же - хотя это может занять некоторое время :)


Итак, для заинтересованных, вот шаги, которые необходимо выполнить:

  • Dovecot: изменить default_pass_scheme из MD5-CRYPT к CRAM-MD5 в твоем /etc/dovecot/dovecot-mysql.conf (или соответствующий файл, который вы используете), затем добавьте cram-md5 к auth_mechanisms в /etc/dovecot/dovecot.conf
  • Postfix: в моем случае Postfix использует Dovecot для аутентификации через SASL (smtpd_sasl_type=dovecot) - так что тут делать нечего
  • PostfixAdmin:
    • Сначала войдите в PostfixAdmin WebIF и оставайтесь в системе - иначе вы не сможете это сделать после изменения конфигурации :)
    • изменения в config.inc.php: $CONF['encrypt'] = 'md5crypt'; должен быть изменен на $CONF['encrypt'] = 'dovecot:CRAM-MD5';. Также проверьте $CONF['dovecotpw'] = "/usr/sbin/doveadm pw"; - например, на Debian Wheezy, doveadm проживает в /usr/bin и поэтому требует, чтобы этот параметр был изменен
    • Теперь перейдите в PostfixAdmin WebIf (где вы все еще вошли в систему) и обновите пароли пользователей: перейдите в «Виртуальные списки», прокрутите до «Почтовые ящики», нажмите ссылку «изменить» для каждого почтового ящика и сохраните там «новый». пароль »(это означает, что вы должны либо знать их пароли, либо установить« какой-то »пароль и попросить их обновить его позже. Насколько мне известно, невозможно« преобразовать »существующий пароль).
      Повторите то же самое для администраторов через «Список администраторов» - иначе они / вы не сможете войти снова.
  • Перезапустите почтовые службы. В принципе, достаточно перезапустить Dovecot и, возможно, Postfix.

Готово. Теперь вы можете проверить, все ли работает. В моем случае это было так: Roundcube все еще мог аутентифицировать PLAIN - и теперь удаленный клиент мог использовать CRAM-MD5. Дело решено, для меня.