Как сменить пароль почтового ящика из терминала на сервере Mailcow? Текущий администратор покинул проект и не оставил паролей. Необходимо получить доступ к административному почтовому ящику. Поиск готовых скриптов для смены паролей не дал результатов.
Экстренная смена пароля в Mailcow возможна даже в отсутствие исходных учетных данных администратора. Для восстановления доступа к почтовому ящику можно использовать два основных подхода: сброс пароля через официальный скрипт от разработчиков или прямое изменение пароля в базе данных MySQL с последующей генерацией правильного хэша. Эти методы не требуют исходных паролей и позволяют восстановить доступ к системе.
Содержание
- Подготовка к смене пароля в Mailcow
- Сброс пароля администратора через официальный скрипт
- Изменение пароля конкретного почтового ящика через MySQL
- Генерация хэша пароля с использованием Dovecot
- Проверка и финальные настройки после смены пароля
Подготовка к смене пароля в Mailcow
Прежде чем приступать к смене пароля, необходимо убедиться, что у вас есть необходимые права и доступ к серверу. Для работы с mailcow потребуется доступ по SSH с правами пользователя, имеющего возможность управления Docker-контейнерами.
Проверьте, что mailcow действительно установлен и работает на вашем сервере:
docker ps
Вы должны увидеть контейнеры с префиксом “mailcow”. Если контейнеры не запущены, сначала запустите их:
cd /opt/mailcow-dockerized
docker-compose up -d
Также убедитесь, что вы знаете имя базы данных пользователя и пароль для доступа к MySQL. Эти данные обычно находятся в файле mailcow.conf в директории установки mailcow.
grep -E "DBUSER|DBPASS" mailcow.conf
Если файлы конфигурации недоступны, пароли от базы данных можно найти в файлах внутри Docker-контейнеров:
docker exec -it $(docker ps -qf "name=mysql-mailcow") bash
cat /etc/mysql/debian.cnf
В этом файле будут указаны учетные данные для доступа к базе данных.
Сброс пароля администратора через официальный скрипт
Mailcow предоставляет официальный скрипт для сброса пароля администратора, который позволяет обойти необходимость в исходных паролях. Этот метод является предпочтительным, так как он автоматически обрабатывает все необходимые процессы, включая генерацию хэша пароля и обновление всех связанных компонентов.
Использование официального скрипта
Перейдите в директорию установки mailcow и выполните команду:
cd /opt/mailcow-dockerized
./helper-scripts/mailcow-reset-admin.sh
Скрипт запросит новый пароль для администратора. Введите его и подтвердите. Скрипт автоматически:
- Сгенерирует правильный хэш пароля
- Обновит запись в базе данных
- Перезапустит необходимые сервисы
Если скрипт недоступен, вы можете скачать его напрямую из репозитория разработчиков:
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-контейнер:
docker exec -it $(docker ps -qf "name=php-fpm-mailcow") 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:
docker exec -it $(docker ps -qf "name=mysql-mailcow") mysql -u root -p
Введите пароль root пользователя MySQL. Если вы не знаете пароль, он может быть указан в файле mailcow.conf или в файлах контейнера.
Поиск нужного почтового ящика
Найдите ID нужного почтового ящика в базе данных:
SELECT id, username, domain FROM mailbox WHERE username = 'user' AND domain = 'domain.com';
Замените ‘user’ и ‘domain.com’ на актуальные данные вашего почтового ящика.
Обновление пароля
После получения ID ящика обновите его пароль:
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 для генерации хэша:
docker exec -it $(docker ps -qf "name=dovecot-mailcow") doveadm pw -s BLF-CRYPT -p 'your_new_password'
Эта команда вернет хэш пароля, который можно использовать в базах данных. Скопируйте результат и используйте его в SQL-запросе.
Метод 2: Генерация через Dovecot внутри контейнера
Если doveadm недоступен напрямую, выполните его внутри контейнера:
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. При генерации хэша вы можете явно указать алгоритм:
doveadm pw -s SHA512-CRYPT -p 'your_new_password'
Пример полного процесса
Давайте рассмотрим полный процесс смены пароля для конкретного почтового ящика:
- Сгенерируем хэш:
HASH=$(docker exec -it $(docker ps -qf "name=dovecot-mailcow") doveadm pw -s BLF-CRYPT -p 'new_secure_password')
echo $HASH
- Подключимся к MySQL:
docker exec -it $(docker ps -qf "name=mysql-mailcow") mysql -u root -p
- Найдем ID ящика:
SELECT id FROM mailbox WHERE username = 'user' AND domain = 'domain.com';
- Обновим пароль:
UPDATE mailbox SET password = '$HASH' WHERE id = 'mailbox_id';
- Обновим пароль в таблице aliases (если необходимо):
UPDATE alias SET password = '$HASH' WHERE address = 'user@domain.com';
- Перезапустим Dovecot:
docker restart dovecot-mailcow
Проверка и финальные настройки после смены пароля
После смены пароля важно убедиться, что все работает корректно. Проверьте доступ к почтовому ящику с использованием нового пароля.
Проверка через почтовый клиент
Попробуйте подключиться к почтовому ящику с использованием нового пароля в вашем почтовом клиенте (Thunderbird, Outlook и т.д.). Убедитесь, что вы можете отправлять и получать письма.
Проверка через веб-интерфейс
Если вы меняли пароль администратора, попробуйте войти в веб-интерфейс mailcow с новым паролем:
https://your-mailcow-domain.com
Проверка через IMAP/POP3
Вы можете проверить доступ к почтовому ящеку через командную строку с помощью telnet или nc:
telnet mail.yourdomain.com 143
После подключения выполните команды:
a1 LOGIN username@domain.com new_password
a2 LIST "" "*"
a3 LOGOUT
Если вы видите успешный ответ на команды LOGIN и LIST, значит пароль изменен корректно.
Перезапуск сервисов
Иногда после смены пароля необходимо перезапустить определенные сервисы:
docker restart php-fpm-mailcow docker restart dovecot-mailcow docker restart postfix-mailcow
Проверка логов
Если что-то не работает, проверьте логи соответствующих сервисов:
docker logs php-fpm-mailcow docker logs dovecot-mailcow docker logs postfix-mailcow
Особое внимание обращайте на ошибки аутентификации или подключения к базе данных.
Источники
- Mailcow Official Documentation — Официальная документация по сбросу пароля администратора: https://docs.mailcow.email/troubleshooting/debug-reset_pw/
- Mailcow Reset Admin Script — Исходный код официального скрипта для сброса пароля: https://raw.githubusercontent.com/mailcow/mailcow-dockerized/master/helper-scripts/mailcow-reset-admin.sh
- Prepaid Hoster FAQ — Практическое руководство по сбросу пароля администратора Mailcow: https://support.prepaid-hoster.de/faq/en/virtual-server-en/mailcow-admin-password-reset.html
- Mailcow Password Models — Документация по моделям паролей и алгоритмам хеширования: https://docs.mailcow.email/models/model-passwd/
- Mailcow GitHub Issue — Примеры SQL-запросов для обновления паролей в базе данных: https://github.com/mailcow/mailcow-dockerized/issues/2600
Заключение
Смена пароля в mailcow из терминала является решаемой задачей даже в отсутствие исходных учетных данных администратора. Основные методы включают использование официального скрипта от разработчиков и прямое изменение пароля в базе данных MySQL с последующей генерацией правильного хэша. Важно помнить, что прямое указание пароля в виде открытого текста не сработает из-за использования специализированных алгоритмов хеширования Dovecot. Всегда генерируйте хэш с помощью doveadm перед обновлением записей в базе данных. После смены пароля обязательно проверьте работоспособность почтовых клиентов и перезапустите необходимые сервисы.