Mosquitto-auth-плагин ACL для подписки - PullRequest
0 голосов
/ 07 января 2019

В настоящее время я использую брокер mosquitto, чтобы посмотреть, смогу ли я создать что-нибудь интересное с ним, и я наткнулся на этот плагин для аутентификации под названием mosquitto-auth-plugin.

Я следовал за документацией плагина, и я использую postgres в качестве внутренней таблицы. Похоже, работает в отношении аутентификации пользователя. Когда дело доходит до ACL, я обнаруживаю, что ACL для публикации на месте, но ACL для подписки - это то, что я не могу обернуть.

|-- GETTING USERS: karthik
1546887525: |-- getuser(karthik) AUTHENTICATED=1 by postgres
1546887525: New client connected from 127.0.0.1 as karthik (c1, k60, u'karthik').
1546887525: No will message specified.
1546887525: Sending CONNACK to karthik (0, 0)
1546887525: Received SUBSCRIBE from karthik
1546887525: 	test/test (QoS 0)
1546887525: |-- mosquitto_auth_acl_check(..., client id not available, karthik, test/test, MOSQ_ACL_WRITE)
1546887525: |-- SUPERUSER: karthik
1546887525: |-- user is 0
1546887525: |-- USERNAME: karthik, TOPIC: test/test, acc: 4
1546887525: |-- aclcheck(karthik, test/test, 4) AUTHORIZED=0 by none
1546887525: Sending SUBACK to karthik

Как вы можете видеть, я сомневаюсь, что означают '4' в 'acc: 4' ? Я не нашел этого в документации плагина. Если я создаю еще одну запись имени пользователя в базе данных с доступом на чтение / запись, установленным на 4 (в дополнение к изначально установленному доступу на чтение / запись), я обнаружу, что ACL для подписки работает правильно и проверяет аутентификацию.

Мне интересно, должен ли я внести изменения в конфигурацию комара, чтобы решить эту проблему? Я предполагаю, что упускаю простую, но ключевую деталь ... любая помощь приветствуется! Также я прикрепил файл конфигурации

auth_plugin /home/auth-plug.so
auth_opt_backends postgres
auth_opt_host localhost
auth_opt_port 5432
auth_opt_dbname test_db
auth_opt_user postgres
auth_opt_pass lolol
auth_opt_userquery SELECT password FROM clients WHERE username = $1 limit 1
auth_opt_superquery SELECT COALESCE(COUNT(*),0) FROM clients WHERE username = $1 AND super = 1
auth_opt_aclquery SELECT topic FROM mqttacl WHERE (username = $1) AND (rw & $2) > 0

1 Ответ

0 голосов
/ 10 января 2019

Решил проблему. В новом выпуске mosquitto 1.5 MOSQ_ACL_SUBSCRIBE представляет собой дополнительное усовершенствование, которое было введено, и дополнительный бит был введен в проверку ACL. Значение теперь изменяется от 0 до 7 (из-за 3 бит) вместо 0-3 (из-за 2 бит).

Таким образом, теперь значение чтения / записи в вашей таблице ACL в базе данных должно изменяться от 0 до 7.

  1. 0: нет доступа
  2. 1: читать
  3. 2: написать
  4. 3: читать и писать
  5. 4: подписаться
  6. 5: читать и подписываться
  7. 6: пишите и подписывайтесь
  8. 7: читать, писать и подписываться

Надеюсь, это поможет людям, которые столкнулись с той же проблемой, что и я: D!

...