1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mqtt-rs-rmqtt

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
acl.md 7.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 14:56 2a97644

Встроенная система ACL

Встроенная система ACL (Access Control List) позволяет устанавливать правила, которые определяют, какие операции могут выполнять клиенты в системе. Она проста в использовании и подходит для проектов с предсказуемым количеством правил и без частых изменений.

Плагин:

rmqtt-acl

Конфигурационный файл плагина:

plugins/rmqtt-acl.toml

Примечание:

Встроенная система ACL имеет самый низкий приоритет среди всех систем ACL. Другие системы ACL могут перекрывать её правила. Если необходимо отключить все правила, можно закомментировать их. После изменения файла правил необходимо перезапустить сервис RMQTT, чтобы изменения вступили в силу.

Определение правил ACL

Встроенная система ACL представляет собой таблицу правил с самым низким приоритетом. Если ни одно из более приоритетных правил не срабатывает, то проверяется встроенная система ACL.

Правила описываются в формате Toml:

rules = [
    # Разрешить пользователю "dashboard" подписываться на "$SYS/#" тему
    ["allow", { user = "dashboard" }, "subscribe", ["$SYS/#"]],

    # Разрешить клиентам с IP-адресом "127.0.0.1" публиковать и подписываться на темы "$SYS/#", "#"
    ["allow", { ipaddr = "127.0.0.1" }, "pubsub", ["$SYS/#", "#"]],

    # Запретить всем клиентам подписываться на темы "$SYS/#", "#"
    ["deny", "all", "subscribe", ["$SYS/#", { eq = "#" }]],

    # Разрешить всем клиентам подключаться, публиковать и подписываться
    ["allow", "all"]
]
  1. Первое правило разрешает пользователям с именем «dashboard» подписываться на тему $SYS/#.
  2. Второе правило разрешает клиентам с IP-адресом «127.0.0.1» публиковать и подписываться на темы $SYS/# и #.
  3. Третье правило запрещает всем клиентам подписываться на темы $SYS/# и #.
  4. Четвёртое правило разрешает всем клиентам подключаться, публиковать и подписываться.

Таким образом, основная цель встроенной системы ACL — ограничить доступ клиентов к системным темам $SYS/# и универсальным темам #.

Написание правил в rmqtt-acl.toml

В файле rmqtt-acl.toml правила проверяются в порядке их написания.

  • # используется для комментариев.
  • Каждое правило состоит из четырёх элементов.
  • Первый элемент указывает на действие, которое будет выполнено после успешного совпадения правила: allow (разрешить) или deny (запретить).
  • Второй элемент определяет пользователя, к которому применяется правило. Возможные форматы:
    • { user = "dashboard" }: правило применяется только к пользователям с указанным именем.
    • { user = "dashboard", password = "123456", superuser = true }: если первый элемент равен allow, можно указать пароль или статус суперпользователя. Это правило будет применяться только к пользователям с указанными именем и паролем. Статус суперпользователя позволяет пропустить аутентификацию при последующей публикации или подписке сообщений.
    • { clientid = "dashboard" }: правило применяется только к клиентам с указанным идентификатором.
    • { ipaddr = "127.0.0.1" }: правило применяется только к клиентам с указанным IP-адресом.
    • { protocol = 4 }: правило применяется только к версиям MQTT-протокола 3.1.1. Версии MQTT-протокола: 3=3.1, 4=3.1.1 или 5=5.0.
    • { user = "dashboard", protocol = 4 }: правило применяется только к пользователям с указанным именем и версией протокола 3.1.1.
    • all: правило применяется ко всем пользователям.
  • Третий элемент определяет операцию, которую контролирует правило: connect (подключение), publish (публикация), subscribe (подписка), pubsub (и публикация, и подписка) или all (по умолчанию, все операции).
  • Четвёртый элемент определяет список тем, к которым применяется правило. Список указывается в виде массива. Например:
    • "$SYS/#": фильтр тем; правило может совпадать с темами $SYS/#, но не с /a/b/c.
    • { eq = "#" }: полное равенство символов; правило совпадает только с темой #, а не /a/b/c.
  • Существуют две специальные правила: {allow, all} (разрешает все операции) и {deny, all} (запрещает все операции).

После внесения изменений в rmqtt-acl.toml, они не будут автоматически применены к системе RMQTT. Необходимо выполнить следующую команду:

curl -X PUT "http://127.0.0.1:6060/api/v1/plugins/1/rmqtt-acl/config/reload"

Заполнитель

Во встроенной системе rmqtt-acl.toml в домене темы (четвёртый элемент правила) поддерживаются следующие заполнители:

  • %c: клиентский идентификатор, который будет заменён реальным клиентским идентификатором при применении правила.
  • %u: имя пользователя клиента, которое будет заменено реальным именем пользователя при применении правила.

Например:

["allow", "all", "pubsub", ["sensor/%c/ctrl"]]

Это правило разрешает клиенту с идентификатором light подписываться и публиковать сообщения в теме sensor/light/ctrl.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mqtt-rs-rmqtt.git
git@api.gitlife.ru:oschina-mirror/mqtt-rs-rmqtt.git
oschina-mirror
mqtt-rs-rmqtt
mqtt-rs-rmqtt
master