内置 ACL
ACL 规则文件:
内置 ACL 优先级最低,可以被 ACL 插件覆盖,如需禁用全部注释即可。规则文件更改后需重启 EMQ X 以应用生效。
内置 ACL 是优先级最低规则表,在所有的 ACL 检查完成后,如果仍然未命中则检查默认的 ACL 规则。
该规则文件以 Erlang 语法的格式进行描述:
- 第一条规则允许客户端发布订阅所有主题
- 第二条规则禁止全部客户端订阅 与
#
主题 - 第三条规则允许 ip 地址为
127.0.0.1
的客户端发布/订阅$SYS/#
与#
主题,为第二条开了特例 - 第四条规则允许用户名为
dashboard
的客户端订阅$SYS/#
主题,为第二条开了特例
acl.conf 编写规则
acl.conf
文件中的规则按书写顺序从上往下匹配。
的语法规则包含在顶部的注释中,熟悉 Erlang 语法的可直接阅读文件顶部的注释。或参考以下的释义:
- 以
%%
表示行注释。 - 每条规则由四元组组成,以
.
结束。 元组第二位:表示规则所生效的用户,可使用的格式为:
{user, "dashboard"}
:表明规则仅对 用户名 (Username) 为 “dashboard” 的用户生效{clientid, "dashboard"}
:表明规则仅对 客户端标识 (ClientId) 为 “dashboard” 的用户生效{ipaddr, "127.0.0.1"}
:表明规则仅对 源地址 为 “127.0.0.1” 的用户生效- :表明规则对所有的用户都生效
-
subscribe
:表明规则应用在 SUBSCRIBE 操作上pubsub
:表明规则对 PUBLISH 和 SUBSCRIBE 操作都有效
元组第四位:表示规则所限制的主题列表,内容以数组的格式给出,例如:
"$SYS/#"
:为一个 主题过滤器 (Topic Filter);表示规则可命中与$SYS/#
匹配的主题;如:可命中 “$SYS/#”,也可命中 “$SYS/a/b/c”{eq, "#"}
:表示字符的全等,规则仅可命中主题为#
的字串,不能命中/a/b/c
等
除此之外还存在两条特殊的规则:
{allow, all}
:允许所有操作- :拒绝所有操作
在 acl.conf
修改完成后,并不会自动加载至 EMQ X 系统。需要手动执行:
acl.conf 中应只包含一些简单而通用的规则,使其成为系统基础的 ACL 原则。如果需要支持复杂、大量的 ACL 内容,你应该在认证插件中去实现它。