Контроль доступа на сервере Mosquitto MQTT
Контроль доступа аналогичен учетным записям пользователей. Во-первых, нам нужен файл контроля доступа, в котором описывается, кто к чему имеет доступ, а затем нам нужна директива в файле, чтобы сообщить Mosquitto об этом. Начнем с этого файла контроля доступа. Мой находится по адресу /mosquitto/mosquitto_acl
Файл ACL состоит из двух частей. Во-первых, user директива устанавливает текущего пользователя, к которому topic применяются любые следующие директивы.
Директива topicпозволяет текущему пользователю читать, записывать или читать и записывать (оба одновременно) заданную тему. MQTT как протокол построен на идее публикации (записи) или подписки (чтения) тем. Mosquitto предполагает, что у пользователя вообще нет доступа, если не topicприсутствует одна или несколько директив, разрешающих доступ.
Директива темы состоит из 3 частей.
- Во-первых, слово topic— это имя директивы.
- Далее любое из следующих слов определяет, какой тип доступа предоставляется:
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
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.