我使用 Mosquitto 作为我的本地网络 mqtt 代理和几个客户发布和订阅不同的频道。
由于客户端通过 mosquitto 身份验证(使用配置中的密码文件)以访问代理,有没有办法保护各个通道?
我喜欢让一些传感器来控制灯光(即),但不是每个传感器都可以控制窗户。
我使用 Mosquitto 作为我的本地网络 mqtt 代理和几个客户发布和订阅不同的频道。
由于客户端通过 mosquitto 身份验证(使用配置中的密码文件)以访问代理,有没有办法保护各个通道?
我喜欢让一些传感器来控制灯光(即),但不是每个传感器都可以控制窗户。
Mosquitto 支持 ACL,它允许您设置用户可以订阅/发布的主题。mosquitto.conf手册页中包含有关如何创建 ACL 文件的详细信息:
acl_file 文件路径
设置访问控制列表文件的路径。如果已定义,则文件的内容用于控制客户端对代理上的主题的访问。
如果定义了此参数,则只有列出的主题才能访问。使用以下格式的行添加主题访问:
主题 [读|写|读写]
访问类型使用“read”、“write”或“readwrite”来控制。此参数是可选的(除非包含空格字符) - 如果未给出,则访问为读/写。可以在订阅中包含 + 或 # 通配符。
第一组主题应用于匿名客户端,假设 allow_anonymous 为真。在用户行之后添加用户特定主题 ACL,如下所示:
用户
这里提到的用户名和password_file中的一样。它不是客户端ID。
也可以基于主题内的模式替换来定义 ACL。形式与主题关键字相同,但使用模式作为关键字。
模式 [读|写|读写]
可用于替换的模式是:
%c 匹配客户端的客户端 ID
%u 匹配客户端的用户名
替换模式必须是该层次结构级别的唯一文本。模式 ACL 适用于所有用户,即使之前已给出“user”关键字。
例子:
模式写入传感器/%u/数据
允许访问网桥连接消息:
模式写入 $SYS/broker/connection/%c/state
如果 ACL 文件的一行的第一个字符是 #,则将其视为注释。
重载信号时重载。当前加载的 ACL 将被释放并重新加载。重新加载后,现有订阅将受到影响。