LinuxForum.Fans
Тема

Dovecot - втупил ли я

Автор: AlfaStriker 47 сообщений 8128 просмотров
#193130

Добрый день!

На тестовой машине устанавливаю Exim+Dovecot+MySQL

При попытке забрать почту через почтовый клиент в логах появляется ошибка:

text

cat /var/log/maillog

Sep 16 04:39:33 localhost dovecot: dovecot: Relative home directory paths not supported (user linux@point.local):
Sep 16 04:39:33 localhost dovecot: pop3-login: Internal login failure (auth failed, 1 attempts): user=<linux@point.local>, method=PLAIN, rip=192.168.50.10, lip=192.168.50.2

dovecot.conf содержит следующее:

text
mail_location = maildir:/var/vmail/%d/%u

dovecot-sql.conf

text
#File: /etc/dovecot-mysql.conf
driver = mysql
connect = host=localhost dbname=vexim user=vexim password=password
default_pass_scheme = CRYPT
password_query = SELECT `username` as `user`, `password` FROM  `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
user_query = SELECT "" AS `home`, 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'

Втупил ли я ?

Спасибо!

#193135

Здесь надо переделать запрос MySQL чтобы использовался абсолютный путь за место относительного.

Так вот как его переделать, так чтобы все работало ?

#193137

#File: /etc/dovecot-mysql.conf
driver = mysql
connect = host=localhost dbname=vexim user=vexim password=password
default_pass_scheme = CRYPT
password_query = SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
user_query = SELECT "" AS `home`, 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'

Если переделать здесь запрос user_query на следующий

user_query = SELECT 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'

Он не ругается.

#193139

Но выходит другая ошибка:

2011-09-16 05:15:34 1R4TNQ-0003sf-Nn failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='point.local' AND `active`='1'" gave DEFER: MYSQL connection failed: Access denied for user 'vexim'@'localhost' (using password: YES)
#193172

Проблема решена!

#271420

Приветствую!
как решили следующую проблему

text

MYSQL connection failed: Access denied for user 'vexim'@'localhost'
#271439

AlfaStriker в продолжении данной темы задам вопросик если позволите : как использовать зашифрованные пароли вместо plain ? (на примере Outlook не получается настроить что то другое) :(

#271465

Они сейчас и так зашифрованы, когда я запускал в первый раз Exim, чтобы не усложнять установку пароли хранил простым текстом. Потом нашел способ как хранить пароли в MD5.
У меня Outlook нормально работает. Что пишет Outlook у тебя?

Если у тебя проблемы с Outlook'oм значить тебе надо крутить Довекот, а не Exim.

#271475
AlfaStriker написал:
Потом нашел способ как хранить пароли в MD5.

С этого места можно поподробней ?

#271479

Посмотри конфиг файлы
- /etc/exim/exim.conf
- /var/www/html/postfixadmin/config.inc.php
- /etc/dovecot-mysql.conf

Там описано как хранить, считывать и записывать пароли в формате MD5.

#271491

nik222
Для того чтобы хранить пароли в формате MD5 надо:
Открыть файл /etc/dovecot/dovecot-mysql.conf
В нем найти и изменить строчку на:

text
default_pass_scheme = MD5-CRYPT

Потом открыть главный конфигурационный файл Exim - /etc/exim/exim.conf и поменять секции авторизации:

text
auth_plain:
driver = plaintext
public_name = LOGIN
server_prompts = Username:: : Password::
server_condition = "${if crypteq{$2}{${lookup mysql{SELECT `password` FROM `mailbox` WHERE `username` = '${quote_mysql:$1}'}}}{yes}{no}}"
server_set_id = $1

auth_login: driver = plaintext public_name = PLAIN server_condition = "${if crypteq{$3}{${lookup mysql{SELECT `password` FROM `mailbox` WHERE `username` = '${quote_mysql:$2}'}}}{yes}{no}}" server_prompts = : server_set_id = $2

auth_cram_md5: driver = dovecot public_name = CRAM-MD5 server_socket = /var/run/dovecot/auth-client server_set_id = $auth1

Далее требуется открыть конфигурационный файл PostfixAdmin - /var/www/html/postfixadmin/config.inc.php
В этом файле надо найти и поменять значение строчки:

text
$CONF['encrypt'] = 'md5crypt';

После настройки Exim, Dovecot и Postfixadmin надо перезапустить демон Exim и Dovecot:

text
# service exim restart
text
# service dovecot restart

Если есть старые учетные записи в которых пароль хранится открытым текстом, надо заного пересоздать эти учетные записи.

#271513

Спасибо, шикарно. Вот только как в этом случае быть с postfix ?
С config.inc.php и dovecot-mysql.conf все остается также как я понимаю ?
И в dovecot.conf прописываю

text
auth_mechanisms = plain login cram-md5

Я так понимаю ?

#271522

Вообще-то пароли уже по умолчанию создаются в MD5.
Это прямо видно в файле config.inc.php выше.

#271557

Пфф, мне непонятен один момент: в базе пароли у меня зашифрованы, все ок. Но когда я ввожу данные авторизации в клиенте, я ведь ввожу пароль в открытом виде и в этом виде он отдается dovecot-у ?

#271588

Для этого надо использовать шифрования SSL/TSL.
Настройка этого есть в сети.

#271669
nik222 написал:
Пфф, мне непонятен один момент: в базе пароли у меня зашифрованы, все ок. Но когда я ввожу данные авторизации в клиенте, я ведь ввожу пароль в открытом виде и в этом виде он отдается dovecot-у ?

Подобное шифрование паролей - есть только иллюзия безопасности?
Рассмотрим можель угроз и нарушителей.
1. Если храним пароли (или их хеши) в какой то базе данных, то боимся ли мы администатора? Вряд ли. Ему и так может быть доступна вся наша почта. Без знания наших паролей. Значит эта угроза неактуальна.
2. Передача паролей по сети. Нарушитель может слушать сетевой трафик. Насколько это актуально в корпоративных или домашних локальных сетях? Особенно с учетом промышленных коммутаторов, в которых на порты может идти трафик только на те компу, что к этим портам подключены. А иной трафик - мимо? Ну а для дома - вообще какой смысл? Значит это тоже не актуально.
3. Нарушитель слушает интернетный трафик исходящий от нас к провайдеру. Насколько это реально? По моему - эта угроза есть литературный миф.

Далее, если есть таки нарушитель и он перехватил не плайн-пароль, а его дайджест, то это всё равно, что перехватил сам плайн-пароль. Так как нет ничего проще подставить именно перехваченный дайджест при атаке. Отсюда - по устойчивости в взлому системы и плайн-пароли и их дайджесты совершенно одинаковы. И полагаться на подобный механизм аутентификации нельзя.
Устойчивая аутентификация должна использовать дополнительные механизмы. А именно:
1. Сервер, получив идентификатор пользователя должен послать ему случайное число.
2. пользователь вычисляет из этого случайного числа и дайджества своего пароля новый суммирующий случайный (разовый) дайджест и отправляет его серверу.
3. сервер делает аналогичную операцию с хранимым на нем дайждестом и сравнивает полученный от пользователя дайджест со своим вычислением. Ну и если результат совпал, то юзер знает секрет и его можно пропускать.
Это есть базовый механизм устойчивой ко взлому системы аутентификации, все остальное, где по сети передаются или плайн-пароли или их дайджесты - неустойчиво.

#271680
"nik222" написал:
Пфф, мне непонятен один момент: в базе пароли у меня зашифрованы, все ок. Но когда я ввожу данные авторизации в клиенте, я ведь ввожу пароль в открытом виде и в этом виде он отдается dovecot-у ?

дело в том, что злоумышленник может получить доступ к базе данных, и КО ВСЕМ паролям на вашем сервере.
Однако, если злоумышленник получит все хеши, а не все пароли, то это ему ничего не даст. Суть в том, что можно из пароля вычислить хеш, но обратное преобразование невозможно (только полным перебором, что для пароля из 8+ символов невозможно на сегодня).

"Cruiser78" написал:
Далее, если есть таки нарушитель и он перехватил не плайн-пароль, а его дайджест, то это всё равно, что перехватил сам плайн-пароль. Так как нет ничего проще подставить именно перехваченный дайджест при атаке.

если злоумышленник перехватил именно пароль, то он может им воспользоваться. Однако, имея хеш пароля, ничего сделать нельзя. В том случае, конечно, если этот хеш вычисляется сервером. Последнему нужен именно пароль, а не хеш, который сервер вычисляет самостоятельно, и сравнивает его со своим хешем из БД. У одинаковых паролей одинаковые хеши, потому хранить пароли НИКОГДА не нужно.

У этой схемы имеются две уязвимости:

1. действительно, можно перехватить пароль. Однако, выловить пароль не так уж и просто, нужен полный доступ хотя-бы к одному из транзитных маршрутизаторов
2. можно воспользоваться радужными таблицами, которые можно приготовить заранее, а затем быстро взломать пароль по его хешу. К счастью, для защиты можно добавить к паролю случайную соль, которая приведёт к тому, что таблица не сработает.

"Cruiser78" написал:
1. Сервер, получив идентификатор пользователя должен послать ему случайное число.
2. пользователь вычисляет из этого случайного числа и дайджества своего пароля новый суммирующий случайный (разовый) дайджест и отправляет его серверу.
3. сервер делает аналогичную операцию с хранимым на нем дайждестом и сравнивает полученный от пользователя дайджест со своим вычислением. Ну и если результат совпал, то юзер знает секрет и его можно пропускать.
Это есть базовый механизм устойчивой ко взлому системы аутентификации

и что помешает злоумышленнику проделать точно такую-же операцию? К сожалению, если юзер не может доверять серверу, а сервер не может доверять юзеру, то данная схема НЕ сработает. Такие дела.
Но и тут есть выход - нужно привлечь какую-либо третью сторону, которой доверяет и клиент, и сервер. Т.е. серверу необходим сертификат, подписанный третьей стороной. В этом случае, клиент может проверить сертификат сервера, и будет уверен в том, что данный сервер не является подставой (fake). В противном случае клиент может послать свой пароль/дайджест/хеш/хитромудрый ключ на 100500 бит не на сервер, а прямо злоумышленнику, со всеми вытекающими.

#271732

Все это здорово но у меня два вопроса:

1. в общем то мне непонятен момент озвученный в 14 посте.
2. Исходя из описанных вариантов - с чего начать ?

#271741
"nik222" написал:
1. в общем то мне непонятен момент озвученный в 14 посте.

ответ - да. В открытом виде.

"nik222" написал:
2. Исходя из описанных вариантов - с чего начать ?

зависит от того, ЧЕГО вы желаете добиться. Попробуйте для начала настроить TLS шифрование. Отправная точка: http://ru.wikipedia.org/wiki/TLS
Но ещё раньше решите, а оно вам ДЕЙСТВИТЕЛЬНО надо? Лично я и так обхожусь (дык неуловимый Джо же!)

#271749
drBatty написал:
ответ - да. В открытом виде.

почтовые клиенты не могут передавать пароль в зашифрованном виде ?

Войдите или зарегистрируйтесь, чтобы ответить.