Контроль доступа на сервере Mosquitto MQTT

  • Михаил
  • 8 мин. на прочтение
  • 34
  • 19 Feb 2024
  • 19 Feb 2024

Контроль доступа аналогичен учетным записям пользователей. Во-первых, нам нужен файл контроля доступа, в котором описывается, кто к чему имеет доступ, а затем нам нужна директива в файле, чтобы сообщить Mosquitto об этом. Начнем с этого файла контроля доступа. Мой находится по адресу /mosquitto/mosquitto_acl

 

Файл ACL состоит из двух частей. Во-первых, user директива устанавливает текущего пользователя, к которому topic применяются любые следующие директивы.

Директива topicпозволяет текущему пользователю читать, записывать или читать и записывать (оба одновременно) заданную тему. MQTT как протокол построен на идее публикации (записи) или подписки (чтения) тем. Mosquitto предполагает, что у пользователя вообще нет доступа, если не topicприсутствует одна или несколько директив, разрешающих доступ.

Директива темы состоит из 3 частей.

  1. Во-первых, слово topic— это имя директивы.
  2. Далее любое из следующих слов определяет, какой тип доступа предоставляется:

read :  Доступ только для чтения
write : Доступ только для записи
readwrite : доступ как для чтения, так и для записи.

    3. Наконец, указывается имя темы, на которую влияет правило доступа. 

Это может включать в себя символ решетки ( #) в качестве подстановочного знака. Например, это повлияет только на эту конкретную тему, но затронет все темы, начинающиеся с .rockets/statusspace/#space/

Вот еще несколько примеров:

# Allow read access to "my_app/news"
topic read my_app/news
# Allow write access to "rockets/status"
topic write rockets/status
# Allow read and write access to everything under "another_app/"
topic readwrite another_app/#

После того, как вы создали файл ACL, добавьте его в свой (будьте осторожны и помещайте его перед любыми директивами, если у вас включена поддержка TLS/MQTTS):mosquitto.conflistener

acl_file /etc/mosquitto/mosquitto_acls

 

Это сообщит Mosquitto о вашем новом файле контроля доступа.

Перезагрузка изменений
После внесения вышеуказанных изменений вы захотите попросить Mosquitto перезагрузить файл конфигурации. Сделайте это следующим образом:

sudo systemctl reload mosquitto-mqtt.service

Если ваш служебный файл systemd не поддерживает перезагрузку, то подойдет перезагрузка. Альтернативно добавьте это в свой служебный файл systemd в раздел:[Service]

ExecReload=/bin/kill -s HUP $MAINPID

Далее еще рассмотрим прикручивание ssl к серверу MQTT