Mosquitto Broker ACL模式与用户规则冲突 求合理配置方案
解决Mosquitto 1.4.15 ACL规则冲突问题
核心问题原因
Mosquitto 1.4.x的ACL匹配逻辑是:
- 若存在当前用户对应的
user规则块,仅检查该块内的规则,忽略全局规则 - 若不存在对应用户的
user块,才会应用全局的pattern/topic规则
你遇到的普通用户无法连接的问题,大概率是全局规则被错误地放到了user admin块内部,或者规则顺序导致普通用户没有匹配到允许的权限规则。
正确的ACL配置
直接使用以下配置即可满足需求:
# 全局规则:所有用户默认拥有自身用户名路径下的全读写权限 pattern readwrite %u/# # 给admin用户追加全主题读写权限 user admin topic readwrite #
配置说明
- 全局
pattern规则独立于任何user块,对所有没有专属规则的普通用户生效,自动匹配其用户名路径下的主题 user admin块仅针对admin用户追加权限,不会影响普通用户的全局规则匹配- 确保
allow_anonymous设置为false,强制用户通过用户名密码认证,同时已正确配置password_file
验证方法
- 重启Mosquitto服务:
sudo systemctl restart mosquitto - 用普通用户客户端连接,尝试发布/订阅
用户名/#下的主题,确认权限正常 - 用admin用户客户端连接,尝试操作任意主题,确认全权限生效
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

