SystemdDoctor
служба не работает почта сертификаты права

Почтовый сервер доступа не запускается: не читается сертификат

Служба доступа к почте читает сертификаты до перехода на непривилегированного пользователя, но при перезагрузке настроек делает это уже от своего пользователя. Из-за этого запуск проходит, а перезагрузка отказывает — сочетание, которое сбивает с толку.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Нет прав на закрытый ключ

    Закрытый ключ обычно доступен только root. При чтении от пользователя службы возникает отказ.

  2. В файле нет полной цепочки

    Клиенты требуют промежуточные сертификаты. Без них соединение не устанавливается, хотя служба запускается.

  3. Путь указывает на обновляемую ссылку

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

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Сообщения службы о сертификатах и правах.

journalctl -u dovecot -n 30 --no-pager

Какой сертификат служба отдаёт прямо сейчас.

openssl s_client -connect 127.0.0.1:993 </dev/null 2>/dev/null | openssl x509 -noout -dates

Права на закрытые ключи.

sudo ls -l /etc/dovecot/private/

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Нет прав на закрытый ключ
Почему происходит
Закрытый ключ обычно доступен только root. При чтении от пользователя службы возникает отказ.
Как проверить
Посмотрите права на ключ и пользователя службы.
sudo ls -l /etc/dovecot/private/ 2>/dev/null
systemctl show dovecot -p User -p Group 2>/dev/null
Как исправить
Дайте доступ к ключу через группу службы, не меняя права на файл шире. Копия ключа с общими правами — не решение.
2. В файле нет полной цепочки
Почему происходит
Клиенты требуют промежуточные сертификаты. Без них соединение не устанавливается, хотя служба запускается.
Как проверить
Посмотрите содержимое файла сертификата.
sudo grep -c "BEGIN CERTIFICATE" /etc/dovecot/certs/fullchain.pem 2>/dev/null
openssl s_client -connect 127.0.0.1:993 -showcerts </dev/null 2>/dev/null | grep -c "BEGIN CERTIFICATE"
Как исправить
Укажите файл с полной цепочкой, а не только сертификат узла. Порядок в файле важен: сначала сертификат узла, затем промежуточные.
3. Путь указывает на обновляемую ссылку
Почему происходит
После продления сертификата ссылка меняется, но служба держит в памяти прежний файл. Перезагрузка настроек обязательна.
Как проверить
Посмотрите пути и дату сертификата в памяти службы.
sudo ls -l /etc/letsencrypt/live/*/fullchain.pem 2>/dev/null
openssl s_client -connect 127.0.0.1:993 </dev/null 2>/dev/null | openssl x509 -noout -dates 2>/dev/null
Как исправить
Добавьте перезагрузку настроек службы в действие после продления сертификата. Без этого клиенты будут видеть просроченный сертификат при обновлённых файлах на диске.

Пример вывода

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

dovecot[7200]: master: Error: service(imap-login): command startup failed, error code 89
dovecot[7200]: ssl-params: Can't open private key file /etc/dovecot/private/server.key: Permission denied
systemd[1]: dovecot.service: Main process exited, code=exited, status=89

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация Dovecot: настройка шифрования документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено ключом с правами только для root.
    собственная проверка, systemd 255
    сверено 15 сентября 2026