Драйвер Dovecot auth-sql не соблюдает параметры имени пользователя sql, как мне обойти это?

Dovecot работает в тюрьме и правильно настроен для соединений SQL.

dovecot-sql-conf.ext имеет соответствующие параметры, основная из которых проблематична - connect.

connect = host = 127.0.0.1 dbname = mailserver user = mailuser password = password

Пользователь sql установлен на (скрытый), поэтому нет проблем с dovecot или postfix, пытающимися получить доступ к сокету, который он не может доступ из тюрьмы.

Dovecot запускается, проблем нет. Попытка входа в imap, временная ошибка аутентификации.

Журналы выглядят следующим образом:

dovecot: auth-worker (1295): Ошибка: mysql (127.0.0.1): не удалось подключиться к базе данных ((почтовый сервер)): доступ запрещен для пользователя 'mailuser' @ 'localhost' (с паролем: ДА).

Кто-нибудь знает, как заставить dovecot использовать формат% u (username = user @ domain) для имени пользователя sql-драйвера вместо % n (скрыто)

Я буквально перепробовал все, что мог придумать / найти, включая погружение в источник для изменения параметра 'localhost'. Он кажется неизменным.

Файл option_file выглядел многообещающе, но тестирование показывает, что на самом деле он не считывает большинство параметров соединения, и нет абсолютно никакой документации по формату, который они ищут, кроме начала с option_group [client] для избежать фатальной ошибки.

Я бы предпочел не перемещать sql-сокет в папку dovecot и мне пришлось бы создавать отдельное имя пользователя sql, чтобы dovecot мог делать запросы, если это вообще возможно.

Я надеюсь у кого-то из присутствующих может быть представление о том, как решить эту проблему ...

Для справки, я использую пакет 2.2.33.2, доступный для Bionic.Я планирую собрать новейшую версию dovecot завтра, когда у меня будет время (хотя по этому поводу не было ошибок / проблем.

Edit: @anx, я включил SELECT User, Host, Plugin из mysql.user; У меня было предоставить дополнительные привилегии для этого; Изменить: я настроил тесты mysql, чтобы включить имя базы данных; Ранее я просто набирал USE mailserver;

+-----------+-----------+-------------+
| user      | host      | plugin      |
+-----------+-----------+-------------+
| root      | localhost | unix_socket |
| mailuser  | 127.0.0.1 |             |
| mailadmin | localhost |             |
+-----------+-----------+-------------+

Ниже приведены команды, которые я использовал для проверки входа в систему с помощью mailuser, обе оказались успешными.

-----------------------------------
mysql -u mailuser -p -h 127.0.0.1.
MariaDB: USE mailserver;
-----------------------------------
mysql -u mailuser -p -h 127.0.0.1 --database='mailserver'
-----------------------------------

(Same output for both commands)
MariaDB[mailserver]> SELECT * from virtual_users
+----+-----------+------------------+------------------+
| id | domain_id | email            | password         |
+----+-----------+------------------+------------------+
|  1 |         1 | john@example.org | {SHA256-CRYPT}.. |
+----+-----------+------------------+------------------+

Тестирование аутентификации с помощью dovecot было выполнено следующим образом:

openssl s_client -connect 127.0.0.1:993 -crlf
IMAP> a login john@example.org password

Временная ошибка аутентификации

Драйвер dovecot mysql выше содержит имя базы данных в строке подключения.

Журналы показывают много записей, подобных приведенной ниже, где аутентификация с помощью SQL не выполняется, потому что он не идентифицируется правильно.

dovecot: auth-worker(1394): Error: mysql(127.0.0.1): Connect failed to database (mailserver): Access denied for user 'mailuser'@'localhost' (using password: YES) - waiting for 125 seconds before retry.

РЕДАКТИРОВАТЬ: см. принятый ответ для подробностей. TL; DR проблема заключалась в повреждении оборудования (ASPM) / сети докеров.

3
задан 27 August 2019 в 12:24
1 ответ

Спасибо, Майкл, я соответствующим образом скорректировал сообщение.

По сути, вышеупомянутый стек был стеком postfix / dovecot / msql, который был помещен в контейнеры и работал в течение нескольких лет. Сборка была недавно обновлена, и она пройдет тесты, но после развертывания выйдет из строя.

Проблема была странной, когда аутентификация с помощью dovecot не выполнялась во время ручного тестирования.

Аутентификация Dovecot работала без проблем, когда компоненты находились в разных контейнерах. Аутентификация Dovecot завершилась ошибкой при подключении или тестировании через адаптер обратной петли в контейнере.

Примерно через неделю после публикации я работал со стеком и в конечном итоге делал дамп TCP в различных местах и ​​на разных этапах процесса аутентификации.

Кто-то из списка разработчиков dovecot заметил, что были некоторые ошибки контрольной суммы, когда пакеты не отбрасывались, и эти пакеты приводили к сбою работы контейнерной службы по шлейфу.

Примерно в то же время, когда мы копались в этой проблеме. Заметил ошибку шины PCIe на хосте,где ошибка L2 записывалась в кольцевой буфер ядра с кодом состояния 00001100, периодически и случайным образом.

В конце концов стало ясно, что ошибки не были полностью случайными, поскольку они, казалось, имели тенденцию к тому времени, когда большое количество контейнеров удалялось или создавалось (непоследовательно).

Ошибка отображалась как исправленная, и все обычные тесты tcp, udp, icmp прошли без проблем, никаких других проблем не было, поэтому ранее на нее не обращали внимания.

Я переместил изображение в другое. хост с другим оборудованием, и проблема исчезла.

Вернувшись к исходному хосту и покопавшись, я обнаружил, что ASPM был причиной ошибки благодаря сообщению Томаса Кренна; и передача ядру параметра pcie_aspm = off разрешила ошибку.

Повторное тестирование проблемы впоследствии показало, что проблема больше не существует. Через три недели проблема еще не всплыла.

TL; DR - проблема не в голубятне, а в основной аппаратной проблеме, которая вызвала повреждение пакетов через некоторые сетевые интерфейсы докеров, и поврежденные пакеты не отбрасывались для по какой-то причине.

В нашем случае тесты, запущенные с хоста или переданные от раннера, не имели проблем, а тесты, запущенные на интерактивной консоли в контейнере или запущенные службой контейнера, прошедшей петлю, неожиданно завершились ошибкой .

Если вы используете какие-либо виртуальные машины или контейнерную инфраструктуру; в идеальном мире виртуальные сети будут работать так же, как физические сети, и это определенно не идеальный мир.

Спасибо всем, кто помог.

2
ответ дан 3 December 2019 в 06:53

Теги

Похожие вопросы