DevOps

Как сменить пароль почтового ящика в Mailcow из терминала

Пошаговое руководство по экстренной смене пароля почтового ящика в Mailcow из терминала. Методы сброса пароля администратора и изменение пароля через MySQL.

1 ответ 1 просмотр

Как сменить пароль почтового ящика из терминала на сервере Mailcow? Текущий администратор покинул проект и не оставил паролей. Необходимо получить доступ к административному почтовому ящику. Поиск готовых скриптов для смены паролей не дал результатов.

Экстренная смена пароля в Mailcow возможна даже в отсутствие исходных учетных данных администратора. Для восстановления доступа к почтовому ящику можно использовать два основных подхода: сброс пароля через официальный скрипт от разработчиков или прямое изменение пароля в базе данных MySQL с последующей генерацией правильного хэша. Эти методы не требуют исходных паролей и позволяют восстановить доступ к системе.


Содержание


Подготовка к смене пароля в Mailcow

Прежде чем приступать к смене пароля, необходимо убедиться, что у вас есть необходимые права и доступ к серверу. Для работы с mailcow потребуется доступ по SSH с правами пользователя, имеющего возможность управления Docker-контейнерами.

Проверьте, что mailcow действительно установлен и работает на вашем сервере:

bash
docker ps

Вы должны увидеть контейнеры с префиксом “mailcow”. Если контейнеры не запущены, сначала запустите их:

bash
cd /opt/mailcow-dockerized
docker-compose up -d

Также убедитесь, что вы знаете имя базы данных пользователя и пароль для доступа к MySQL. Эти данные обычно находятся в файле mailcow.conf в директории установки mailcow.

bash
grep -E "DBUSER|DBPASS" mailcow.conf

Если файлы конфигурации недоступны, пароли от базы данных можно найти в файлах внутри Docker-контейнеров:

bash
docker exec -it $(docker ps -qf "name=mysql-mailcow") bash
cat /etc/mysql/debian.cnf

В этом файле будут указаны учетные данные для доступа к базе данных.


Сброс пароля администратора через официальный скрипт

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

Использование официального скрипта

Перейдите в директорию установки mailcow и выполните команду:

bash
cd /opt/mailcow-dockerized
./helper-scripts/mailcow-reset-admin.sh

Скрипт запросит новый пароль для администратора. Введите его и подтвердите. Скрипт автоматически:

  • Сгенерирует правильный хэш пароля
  • Обновит запись в базе данных
  • Перезапустит необходимые сервисы

Если скрипт недоступен, вы можете скачать его напрямую из репозитория разработчиков:

bash
curl -o mailcow-reset-admin.sh https://raw.githubusercontent.com/mailcow/mailcow-dockerized/master/helper-scripts/mailcow-reset-admin.sh
chmod +x mailcow-reset-admin.sh
./mailcow-reset-admin.sh

Альтернативный метод через Docker

Если скрипт недоступен или не работает, вы можете выполнить сброс пароля напрямую через Docker-контейнер:

bash
docker exec -it $(docker ps -qf "name=php-fpm-mailcow") bash

Затем внутри контейнера выполните:

bash
cd /web/inc/
php -r "
require_once 'db.inc.php';
require_once 'vars.inc.php';
$password = 'new_password_here';
$hash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $pdo->prepare('UPDATE admin SET password = :password WHERE username = \"admin\"');
$stmt->bindParam(':password', $hash);
$stmt->execute();
echo 'Password updated successfully';
"

Замените new_password_here на желаемый пароль. Этот метод использует встроенные функции PHP для генерации хэша пароля.


Изменение пароля конкретного почтового ящика через MySQL

Если вам необходимо сменить пароль конкретного почтового ящика (а не администратора), вы можете сделать это напрямую через базу данных MySQL. Этот метод подходит, когда у вас есть доступ к базе данных, но нет доступа к административному интерфейсу.

Подключение к базе данных

Сначала подключитесь к базе данных MySQL:

bash
docker exec -it $(docker ps -qf "name=mysql-mailcow") mysql -u root -p

Введите пароль root пользователя MySQL. Если вы не знаете пароль, он может быть указан в файле mailcow.conf или в файлах контейнера.

Поиск нужного почтового ящика

Найдите ID нужного почтового ящика в базе данных:

sql
SELECT id, username, domain FROM mailbox WHERE username = 'user' AND domain = 'domain.com';

Замените ‘user’ и ‘domain.com’ на актуальные данные вашего почтового ящика.

Обновление пароля

После получения ID ящика обновите его пароль:

sql
UPDATE mailbox SET password = 'new_password_hash' WHERE id = 'mailbox_id';

Здесь new_password_hash - это хэш нового пароля, а mailbox_id - ID вашего ящика из предыдущего запроса.

Важное замечание о хэшах

Прямое указание пароля в виде открытого текста (UPDATE mailbox SET password = 'password123') не сработает, так как mailcow использует специальные методы хеширования паролей. Правильный подход - сгенерировать хэш с помощью Dovecot, как описано в следующем разделе.


Генерация хэша пароля с использованием Dovecot

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

Метод 1: Использование doveadm

Самый надежный способ - использовать утилиту doveadm для генерации хэша:

bash
docker exec -it $(docker ps -qf "name=dovecot-mailcow") doveadm pw -s BLF-CRYPT -p 'your_new_password'

Эта команда вернет хэш пароля, который можно использовать в базах данных. Скопируйте результат и используйте его в SQL-запросе.

Метод 2: Генерация через Dovecot внутри контейнера

Если doveadm недоступен напрямую, выполните его внутри контейнера:

bash
docker exec -it $(docker ps -qf "name=dovecot-mailcow") bash
doveadm pw -s BLF-CRYPT -p 'your_new_password'

Поддерживаемые алгоритмы хеширования

Mailcow поддерживает следующие алгоритмы хеширования:

  • BLF-CRYPT (по умолчанию, самый безопасный)
  • SSHA
  • SSHA256
  • SSHA512
  • MD5-CRYPT
  • SHA512-CRYPT

Для максимальной безопасности всегда используйте BLF-CRYPT. При генерации хэша вы можете явно указать алгоритм:

bash
doveadm pw -s SHA512-CRYPT -p 'your_new_password'

Пример полного процесса

Давайте рассмотрим полный процесс смены пароля для конкретного почтового ящика:

  1. Сгенерируем хэш:
bash
HASH=$(docker exec -it $(docker ps -qf "name=dovecot-mailcow") doveadm pw -s BLF-CRYPT -p 'new_secure_password')
echo $HASH
  1. Подключимся к MySQL:
bash
docker exec -it $(docker ps -qf "name=mysql-mailcow") mysql -u root -p
  1. Найдем ID ящика:
sql
SELECT id FROM mailbox WHERE username = 'user' AND domain = 'domain.com';
  1. Обновим пароль:
sql
UPDATE mailbox SET password = '$HASH' WHERE id = 'mailbox_id';
  1. Обновим пароль в таблице aliases (если необходимо):
sql
UPDATE alias SET password = '$HASH' WHERE address = 'user@domain.com';
  1. Перезапустим Dovecot:
bash
docker restart dovecot-mailcow

Проверка и финальные настройки после смены пароля

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

Проверка через почтовый клиент

Попробуйте подключиться к почтовому ящику с использованием нового пароля в вашем почтовом клиенте (Thunderbird, Outlook и т.д.). Убедитесь, что вы можете отправлять и получать письма.

Проверка через веб-интерфейс

Если вы меняли пароль администратора, попробуйте войти в веб-интерфейс mailcow с новым паролем:

https://your-mailcow-domain.com

Проверка через IMAP/POP3

Вы можете проверить доступ к почтовому ящеку через командную строку с помощью telnet или nc:

bash
telnet mail.yourdomain.com 143

После подключения выполните команды:

a1 LOGIN username@domain.com new_password
a2 LIST "" "*"
a3 LOGOUT

Если вы видите успешный ответ на команды LOGIN и LIST, значит пароль изменен корректно.

Перезапуск сервисов

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

bash
docker restart php-fpm-mailcow
docker restart dovecot-mailcow
docker restart postfix-mailcow

Проверка логов

Если что-то не работает, проверьте логи соответствующих сервисов:

bash
docker logs php-fpm-mailcow
docker logs dovecot-mailcow
docker logs postfix-mailcow

Особое внимание обращайте на ошибки аутентификации или подключения к базе данных.


Источники

  1. Mailcow Official Documentation — Официальная документация по сбросу пароля администратора: https://docs.mailcow.email/troubleshooting/debug-reset_pw/
  2. Mailcow Reset Admin Script — Исходный код официального скрипта для сброса пароля: https://raw.githubusercontent.com/mailcow/mailcow-dockerized/master/helper-scripts/mailcow-reset-admin.sh
  3. Prepaid Hoster FAQ — Практическое руководство по сбросу пароля администратора Mailcow: https://support.prepaid-hoster.de/faq/en/virtual-server-en/mailcow-admin-password-reset.html
  4. Mailcow Password Models — Документация по моделям паролей и алгоритмам хеширования: https://docs.mailcow.email/models/model-passwd/
  5. Mailcow GitHub Issue — Примеры SQL-запросов для обновления паролей в базе данных: https://github.com/mailcow/mailcow-dockerized/issues/2600

Заключение

Смена пароля в mailcow из терминала является решаемой задачей даже в отсутствие исходных учетных данных администратора. Основные методы включают использование официального скрипта от разработчиков и прямое изменение пароля в базе данных MySQL с последующей генерацией правильного хэша. Важно помнить, что прямое указание пароля в виде открытого текста не сработает из-за использования специализированных алгоритмов хеширования Dovecot. Всегда генерируйте хэш с помощью doveadm перед обновлением записей в базе данных. После смены пароля обязательно проверьте работоспособность почтовых клиентов и перезапустите необходимые сервисы.

Авторы
Проверено модерацией
Модерация