Не могу использовать свой собственный файл конфигурации mosquitto “Не удается открыть”.

Вопрос или проблема

Не удается использовать мой собственный файл конфигурации с mosquitto, передача файла конфигурации по умолчанию работает нормально:

localhost:/etc/mosquitto # sudo mosquitto -c /etc/mosquitto/mosquitto.conf 
1706606342: mosquitto версия 2.0.15 запускается
1706606342: Конфигурация загружена из /etc/mosquitto/mosquitto.conf.
1706606342: Запуск в локальном режиме. Подключения будут возможны только от клиентов, работающих на этом устройстве.
1706606342: Создайте файл конфигурации, который определяет слушателя для разрешения удаленного доступа.
1706606342: Подробнее см. https://mosquitto.org/documentation/authentication-methods/
1706606342: Открытие ipv4 сокета прослушивания на порту 1883.
1706606342: Открытие ipv6 сокета прослушивания на порту 1883.
1706606342: mosquitto версия 2.0.15 работает
^C1706606343: mosquitto версия 2.0.15 завершает работу

Затем, когда я пытаюсь использовать мой собственный файл конфигурации myconf.conf:

localhost:/etc/mosquitto # sudo mosquitto -c /etc/mosquitto/myconf.conf 
1706606346: Ошибка: Не удается открыть файл конфигурации /etc/mosquitto/myconf.conf.

Хотя эти файлы абсолютно одинаковые, все разрешения совпадают, это буквальная копия.

localhost:/etc/mosquitto # ll
total 92
-rw-r----- 1 root mosquitto   230 16 aug  2022 aclfile.example
drwxr-xr-x 1 root mosquitto    12 25 okt 09:41 ca_certificates
drwxr-xr-x 1 root mosquitto    12 25 okt 09:41 certs
drwxr-xr-x 1 root mosquitto    12 25 okt 09:41 conf.d
-rw-r----- 1 root mosquitto 40470 12 aug 17:43 mosquitto.conf
-rw-r----- 1 root mosquitto 40470 30 jan 10:17 myconf.conf
-rw-r----- 1 root mosquitto    23 16 aug  2022 pskfile.example
-rw-r----- 1 root mosquitto   355 16 aug  2022 pwfile.example

ОС – opensuse TW и установлен mosquitto через менеджер пакетов:

i+ | mosquitto-devel             | Файлы разработки для mosquitto                 | пакет
i+ | mosquitto                   | MQTT v3.1/v3.1.1 Брокер                        | пакет
i  | libmosquittopp1             | Общая С++ библиотека для mosquitto             | пакет
i  | libmosquitto1               | Общая С библиотека для mosquitto               | пакет

Strace показывает, что доступ запрещен:

openat(AT_FDCWD, "/etc/mosquitto/myconf.conf", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOTDIR (Не является каталогом)
newfstatat(AT_FDCWD, "/etc/mosquitto/myconf.conf", {st_mode=S_IFREG|0640, st_size=40470, ...}, 0) = 0
openat(AT_FDCWD, "/etc/mosquitto/myconf.conf", O_RDONLY) = -1 EACCES (Доступ запрещен)

Редактирование1: Похоже, что SELinux не включен, я не вижу, чтобы в конфигурационном файле было установлено Permissive.

Как мне заставить mosquitto работать с моим собственным файлом конфигурации?

У меня такая же проблема на OpenSuse TW. Решено установкой “Разрешить” доступ в AppArmor.

.

Ответ или решение

Конфигурация и запуск серверов, таких как Mosquitto, могут вызывать определенные трудности, особенно если речь идет о настройке файлов конфигурации. В описанном вами случае вы столкнулись с проблемой, заключающейся в том, что Mosquitto не может открыть ваш собственный конфигурационный файл myconf.conf, несмотря на то, что он является точной копией рабочего mosquitto.conf.

Теория

Mosquitto — это сервер брокера MQTT, который используется для передачи сообщений между клиентами по протоколу MQTT. Он считывает настройки из конфигурационного файла, который определяет поведение сервера, такие как сетевые настройки, политики безопасности и другие параметры.

Ошибки, подобные «Unable to open config file», часто связаны с проблемами доступа и расширенными системами безопасности, которые могут быть настроены в вашей системе. В современном мире операционных систем используются различные механизмы обеспечения безопасности, такие как AppArmor или SELinux, которые могут ограничивать доступ даже при корректных файловых разрешениях.

Пример

В соответствии с вашей проблемой конфигурационный файл myconf.conf имеет такие же разрешения и владельцев, как и mosquitto.conf. Это подтверждает вывод команды ll, где оба файла принадлежат пользователю и группе root и mosquitto соответственно, и имеют права rw-r-----. Однако, используя утилиту strace, вы смогли увидеть, что ошибка связана с отказом в доступе (EACCES), указывающем на то, что проблема может возникать не из-за файловых разрешений, а из-за ограничений безопасности системы.

Операционная система, которую вы используете — OpenSUSE Tumbleweed, включает механизмы безопасности, такие как AppArmor, которые могут контролировать действия приложений на более глубоком уровне. Несмотря на то, что SELinux в вашей системе, возможно, не активирован, AppArmor может быть включен по умолчанию.

Применение

Для решения проблемы необходимо проверить и при необходимости настроить правила AppArmor. Вот шаги, которые могут помочь в решении проблемы:

  1. Проверка статуса AppArmor: Для начала необходимо проверить, активен ли AppArmor в вашей системе. Это можно сделать с помощью команды:

    sudo aa-status

    Если AppArmor активен, вы увидите список активных политик и профилей.

  2. Настройка профиля Mosquitto: Если AppArmor включен и ограничивает доступ к myconf.conf, необходимо отредактировать профиль, чтобы предоставить Mosquitto доступ. Профили конфигурации обычно находятся в директории /etc/apparmor.d/.

  3. Открытие профиля Mosquitto: Отредактируйте профиль Mosquitto с помощью текстового редактора:

    sudo nano /etc/apparmor.d/usr.sbin.mosquitto

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

    /etc/mosquitto/myconf.conf r,
  4. Перезагрузка AppArmor: После внесения изменений необходимо перезагрузить службу AppArmor, чтобы изменения вступили в силу:

    sudo systemctl restart apparmor
  5. Перезапуск Mosquitto: Попробуйте снова запустить Mosquitto с вашим конфигурационным файлом:

    sudo mosquitto -c /etc/mosquitto/myconf.conf

Следуя этим шагам, вы интегрируете свои изменения в систему безопасности OpenSUSE Tumbleweed, позволяя Mosquitto правильно загружать ваш файл конфигурации. Подобные проблемы распространены в системах, использующих мер безопасности уровня AppArmor или SELinux, и требуют тщательной настройки разрешений. В итоге, основываясь на понимании работы операционной системы и особенностей Mosquitto, можно эффективно решать подобные задачи.

Оцените материал
Добавить комментарий

Капча загружается...