You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mosquitto MQTT ACL规则不生效问题排查求助

Mosquitto ACL订阅权限不受限问题解决

针对你遇到的已认证用户可订阅任意随机主题,但发布操作受ACL限制的问题,核心原因是Mosquitto 2.x版本的默认ACL规则特性:

对于已通过认证的用户,当没有匹配到任何明确的ACL授权规则时:

  • 发布操作默认拒绝
  • 订阅操作默认允许

这正好符合你当前的现象——发布受限制,但订阅无约束。

解决方法

修改你的ACL文件,添加默认拒绝所有未明确授权的主题规则,强制用户只能访问你指定的主题:

修改后的ACL文件示例

# Remote is restricted
user remote
topic read control/request
topic write control/report
topic write control/advertise
# 拒绝该用户访问所有其他主题
topic deny #

# Hub is unrestricted
user hub
topic readwrite control/request
topic readwrite control/report
topic readwrite control/advertise
# 如果需要限制hub用户,也可以添加此规则,否则保持原有权限即可
# topic deny #

# 全局默认拒绝所有未授权主题(可选,若上面已给每个用户添加deny规则,此条可省略)
topic deny #

验证步骤

  1. 修改ACL文件后,重启Mosquitto服务:
systemctl restart mosquitto
  1. 使用remote用户尝试订阅随机主题(如test/random),此时应该收到订阅失败的响应(MQTT 3.1.1返回SUBACK码0x80,MQTT 5返回0x87错误)。

额外检查点

  • 确认Mosquitto进程有权读取ACL文件:你当前的文件权限-rw-r----- 1 root mosquitto是符合要求的,无需调整。
  • 确认配置文件中没有在listener级别覆盖acl_file配置:你的主配置已经全局指定acl_file /etc/mosquitto/acl,所有listener都会继承此设置,无冲突。

内容的提问来源于stack exchange,提问作者SimpleSimon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:38:17