Mosquitto 配置认证
在 Mosquitto 实例上配置身份验证非常重要,这样未经授权的客户端就无法连接。
在 Mosquitto 2.0 及更高版本中,你必须明确选择身份验证选项,然后客户端才能连接。早期版本中,默认设置是允许客户端无需身份验证即可连接。
身份验证有三种选择:密码文件、身份验证插件和匿名访问。可以使用三个选项的组合。
在 Mosquitto2.0 及更高版本中,可以通过配置文件中将 per_listener_settings 设置为 true,让不同的侦听器使用不同的身份验证方法。
除了身份验证,您还应该考虑访问权限控制,以确定哪些客户端可以访问哪些主题。
密码文件设置
密码文件是一种将用户名和密码存储在单个文件中的简单机制。适合于有相对较少的静态用户。请注意,修改了密码文件后,需要重新加载 mosquitto。
创建密码文件,可以使用mosquitto_passwd
工具,命令如下:
mosquitto_passwd -c <password file> <username>
请注意,使用-c 标志将覆盖已存在的文件,如果向已存在文件添加,请去掉-c 标志。
要开始使用密码文件,需要配置 broker,在配置文件中,添加如下项:
password_file <path to the configuration file>
密码文件必须能够被运行 mosquitto 的用户读取。
身份验证插件设置
如果你需要更多的控制来认证用户,你需要使用认证插件。具体的特性依赖于你使用的认证插件。
可使用的插件:
- mosquitto-go-auth ,它提供了各种后端来存储用户数据,例如 mysql,postgresql,jwt 或 redis 等。
- Dynamic security,动态安全插件,仅适用于 2.0 及更高版本,可提供原创管理的灵活的代理客户端、组和角色。
配置身份验证插件依赖你的 Mosquitto 的版本。
版本 1.6.x 和以前的版本,使用auth_plugin
选项。这个选项在版本 2.0 也被支持。
listener 1883
auth_plugin <path to plugin>
版本 2.0 及更高,使用plugin
选项。
listener 1883
plugin <path to plugin>
匿名访问设置
配置匿名访问,请使用allow_anonymous
选项。
listener 1883
allow_anonymous true
允许对同一代理进行匿名和身份验证访问是有效的。特别是,动态安全插件允许您为匿名用户分配与经过身份验证的用户不同的权限,例如,这可能对数据的只读访问有用。