用于订阅的Mosquitto-auth-plugin ACL

时间:2019-01-07 19:29:54

标签: mqtt acl mosquitto

我目前正在使用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

如您所见,我怀疑'acc:4'中的'4'是什么意思?我没有在插件的文档中找到它。如果我在数据库中创建了另一个用户名条目,并将读/写访问权限设置为4(除了最初设置的读/写访问权限之外),我发现预订的ACL正常工作并检查身份验证。

我想知道是否应该对mosquitto配置进行更改以解决此问题?我想我错过了一个简单而又关键的细节...感谢您的协助!另外,我还附上了配置文件

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 :(得分:2)

解决了该问题。在新的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!