【发布时间】:2017-12-13 23:14:47
【问题描述】:
我使用 Mosquitto 作为我的本地网络 mqtt 代理和几个客户发布和订阅不同的频道。
由于客户端通过 mosquitto 身份验证(使用配置中的密码文件)以访问代理,有没有办法保护单个通道?
我喜欢让一些传感器来控制灯光(即),但不是每个传感器都可以控制窗户。
【问题讨论】:
标签: mqtt mosquitto home-automation
我使用 Mosquitto 作为我的本地网络 mqtt 代理和几个客户发布和订阅不同的频道。
由于客户端通过 mosquitto 身份验证(使用配置中的密码文件)以访问代理,有没有办法保护单个通道?
我喜欢让一些传感器来控制灯光(即),但不是每个传感器都可以控制窗户。
【问题讨论】:
标签: mqtt mosquitto home-automation
Mosquitto 支持 ACL,可让您设置用户可以订阅/发布的主题。如何创建 ACL 文件的详细信息包含在 mosquitto.conf man 页面中:
acl_file 文件路径
设置访问控制列表文件的路径。如果 定义后,文件的内容用于控制客户端访问 关于代理的主题。
如果定义了这个参数,那么只有列出的主题才会有 使用权。使用以下格式的行添加主题访问:
主题[读|写|读写]
访问类型使用“读取”、“写入”或“读写”来控制。 此参数是可选的(除非包含空格字符) - 如果没有给出,那么访问是读/写的。可以在订阅中包含 + 或 # 通配符。
第一组主题应用于匿名客户端,假设 allow_anonymous 为真。用户特定主题 ACL 在 用户行如下:
用户
这里提到的用户名与password_file中的用户名相同。这是 不是clientid。
还可以根据模式替换定义 ACL 主题内。形式与主题关键字相同,但 使用模式作为关键字。
模式[读|写|读写]
可供替换的模式有:
%c 匹配客户端的客户端id
%u 匹配客户端的用户名
替换模式必须是该级别的唯一文本 等级制度。模式 ACL 适用于所有用户,即使“用户”关键字 之前已经给出了。
例子:
模式写入sensor/%u/data
允许访问网桥连接消息:
模式写入$SYS/broker/connection/%c/state
如果 ACL 文件的一行的第一个字符是 #,则将其处理 作为评论。
在重新加载信号时重新加载。当前加载的 ACL 将被释放并 重新加载。重新加载后,现有订阅将受到影响。
【讨论】: