我有一个TLS工作的mosquitto,想添加ACL来限制客户端读写创建主题。
所有客户端发布到 /device/registration
主题,客户机只能订阅客户机特定的主题。/device/certificate/<client_id>
为此,我在ACL文件中设置了以下内容。
mosquitto.acl
topic write /device/registration
pattern read /device/certificate/%c
如何添加后台流程(backend-app
客户端)对所有这些主题进行读写?
同时完全禁止所有客户端订阅话题 $SYS/#
和创建任何其他名称的主题?
好的,所以ACL文件通常会对特定的用户应用规则,每个用户的规则集由前导决定。user <username>
的条目。
第一条之前的任何规则 user <username>
条目应用于任何匿名用户(假设 allow_anonymous true
是在配置文件中)。)
目前,你的规则适用于所有匿名用户。
为后台服务添加规则的最简单的方法是让它作为一个特定的用户登录,并有一个明确的规则来允许该用户。
topic write /device/registration
pattern read /device/certificate/%c
user backend-app
pattern readwrite #
这将允许 backend-app
用户可以同时发布和订阅任何主题。你可以在文件中指定用户密码,并使用 password_file
设置。(但是如果你要动态地添加用户设备,那么最好是使用 auth_plugin
的设置来访问数据库中的ACLUserPassword细节,并且可以很容易地更新。)
使用Userpassword进行设备授权比只使用client_id更好,因为没有什么可以阻止某人将他们的client_id设置为与任何人相匹配的密码。