我使用Mosquitto作为我的本地网络mqtt经纪人,并且有几个客户发布和订阅不同的渠道。
由于mosquitto(使用配置中的password_file)对客户端进行身份验证以访问代理,有没有办法 ecure个别渠道?
我想让一些传感器控制灯光(即)但不是每个传感器都可以控制窗户。
答案 0 :(得分:1)
Mosquitto支持ACL,可让您设置用户可以订阅/发布的主题。有关如何创建ACL文件的详细信息,请参见mosquitto.conf man页面:
acl_file文件路径
设置访问控制列表文件的路径。如果 定义后,该文件的内容用于控制客户端访问 关于经纪人的话题。
如果定义了此参数,则只列出所列主题 访问。主题访问添加了以下格式的行:
主题[read | write | readwrite]
使用“read”,“write”或“readwrite”控制访问类型。 此参数是可选的(除非包含空格字符) - 如果没有给出,那么访问是可读/写的。可以包含订阅中的+或#通配符。
假设,第一组主题适用于匿名客户端 allow_anonymous为true。用户特定主题ACL在a之后添加 用户行如下:
用户
此处引用的用户名与password_file中的用户名相同。它是 而不是clientid。
还可以基于模式替换来定义ACL 在主题内。表单与topic关键字相同,但是 使用模式作为关键字。
pattern [read | write | readwrite]
可用于替代的模式是:
%c以匹配客户端的客户端ID
%u匹配客户端的用户名
替换模式必须是该级别的唯一文本 层次结构。即使是“user”关键字,模式ACL也适用于所有用户 以前已经给过。
示例:
模式写入传感器/%u / data
允许访问桥接连接消息:
模式写入$ SYS / broker / connection /%c / state
如果ACL文件的第一行字符是#,则对其进行处理 作为评论。
重新加载重载信号。将释放当前加载的ACL 重新加载。重新加载后,现有订阅将受到影响。