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

Брокер сообщений не открывает слушатель: права и пути

Брокеры сообщений открывают слушатель и каталог хранения при запуске, и оба шага упираются в права. Отдельная сложность — пользователь службы: брокер меняет его на своего после запуска, и файлы, доступные root, оказываются недоступны.

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

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

  1. Нет прав на файлы сертификатов

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

  2. Каталог постоянного хранения недоступен для записи

    При включённом сохранении состояния брокер пишет файл в свой каталог. Без права записи запуск отказывает.

  3. Порт занят другим экземпляром

    Второй экземпляр или оставшийся процесс держит порт, и новый слушатель открыть нельзя.

Диагностика

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

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

journalctl -u mosquitto -n 30 --no-pager

Кто занимает порты брокера.

sudo ss -tlnp | grep -E ":1883|:8883"

Пользователь и каталоги службы.

systemctl show mosquitto -p User -p StateDirectory -p ProtectSystem

Решение

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

1. Нет прав на файлы сертификатов
Почему происходит
После смены пользователя брокер читает сертификаты уже не от root. Закрытый ключ с правами только для root прочитать нельзя.
Как проверить
Посмотрите права на ключи и пользователя брокера.
sudo ls -l /etc/mosquitto/certs/ 2>/dev/null
grep -hE "^user|^listener" /etc/mosquitto/mosquitto.conf /etc/mosquitto/conf.d/* 2>/dev/null
Как исправить
Дайте пользователю брокера право чтения ключа через группу, не меняя права на общие каталоги сертификатов. Копия ключа с широкими правами — плохая замена.
2. Каталог постоянного хранения недоступен для записи
Почему происходит
При включённом сохранении состояния брокер пишет файл в свой каталог. Без права записи запуск отказывает.
Как проверить
Посмотрите каталог и параметры хранения.
grep -hE "^persistence|^persistence_location" /etc/mosquitto/mosquitto.conf 2>/dev/null
sudo ls -ld /var/lib/mosquitto 2>/dev/null
Как исправить
Объявите каталог через StateDirectory= в unit-файле: systemd создаст его с нужным владельцем при каждом запуске.
[Service]
StateDirectory=mosquitto
3. Порт занят другим экземпляром
Почему происходит
Второй экземпляр или оставшийся процесс держит порт, и новый слушатель открыть нельзя.
Как проверить
Посмотрите, кто держит порт.
sudo ss -tlnp | grep -E ":1883|:8883"
Как исправить
Остановите лишний экземпляр или разведите слушатели по портам и адресам.

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

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

mosquitto[5900]: Error: Unable to load server key file "/etc/mosquitto/certs/server.key". Check keyfile.
mosquitto[5900]: Error: Unable to start listener on port 8883.
systemd[1]: mosquitto.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED

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

Источники

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