环境
- EMQX 版本:5.0.17(官方镜像)
- 操作系统版本:CentOS 7.9
- 操作系统内核版本: 6.1
重现此问题的步骤
- docker-compose内容
version: "3"
services:
emqx:
image: emqx:5.0.17
container_name: emqx
restart: always
network_mode: "host"
privileged: true
environment:
"EMQX_NAME": "emqx-sit-srv3"
"EMQX_HOST": "xt-emqtt-srv3.sit.bbb.cn"
"EMQX_NODE__NAME": "emqx-sit-srv3@xt-emqtt-srv1.sit.bbb.cn"
"EMQX_NODE__COOKIE": "xtsitsecretcookie"
"EMQX_ALLOW_ANONYMOUS": "false"
"EMQX_BROKER__SHARED_SUBSCRIPTION_STRATEGY": "hash_clientid"
volumes:
- "/data/emqx/etc/emqx.conf:/opt/emqx/etc/emqx.conf:rw"
- "/data/emqx/etc/acl.conf:/opt/emqx/etc/acl.conf:rw"
- "/data/emqx/data:/opt/emqx/data:Z"
- "/data/emqx/log:/opt/emqx/log:Z"
- 普通用户订阅topic后客户端就断开连接
docker-compose部署的emqx 5.0.17,dashboard授权中,ACL规则将一个普通用户设置了和超级用户一样的topic策略,但是普通用户订阅topic就导致客户端断开连接,超级用户可以正常连接并发布订阅topic。
yyw 设置为超级用户,客户端可以正常连接并发布订阅topic
app 设置为普通用户,客户端可以正常连接,但是一旦新建订阅,就会提示Error connect,并且客户端直接断开连接
正常发布订阅 topic 然后手动断开连接的日志
新建订阅后,点击更新,马上断开客户端连接了
日志提示授权权限被拒绝,客户端主动断开日志
看上去我acl配置中授权也没有问题呀
- acl.conf 内容
{allow, {username, "^dashboard?"}, subscribe, ["$SYS/#"]}.
{allow, {ipaddr, "127.0.0.1"}, all, ["$SYS/#", "#"]}.
{allow, {user, "admin"}, all, ["$SYS/#","#"]}.
{allow, {user, "yyw"}, all, ["%c/device"]}.
{allow, {user, "app"}, all, ["%c/device"]}.
{deny, all}.
预期行为
acl 中 设置授权规则 {allow, {user, “app”}, all, [“%c/device”]}. 后,客户端连接以后通过可以正常发布和订阅 clientid/device 类型的topic。
实际行为
授予了这条规则 {allow, {user, “app”}, all, [“%c/device”]}. 之后,客户端能连接,但是一旦订阅 clientid/device 类型的topic 客户端就直接断开,容器报错: authorization permission denied。并且我尝试将最后 {deny, all}. 的规则去掉,app用户也还是 一订阅就失败。
请问下这是什么原因呢?是因为新版本的 emqx 没有开启认证插件导致的吗?如果是的话,那老版本可以在 load_plugins 中添加所需要的插件,新版本在哪里添加这个插件呢?我看dashboard上可以增加插件,但是好像需要下载插件,那这个插件从哪里下载?