ACL File 访问控制

    内置访问控制模块默认启动,可以通过dashboard页面进行停止和更新,但不可以删除。

    直接编辑ACL文件,或选择具体配置文件进行替换

    image-20200927213049265

    内置 ACL 是优先级最低规则表,在所有的 ACL 检查完成后,如果仍然未命中则检查默认的 ACL 规则。

    该规则文件以 Erlang 语法的格式进行描述:

    1. 第一条规则允许客户端发布订阅所有主题

    2. 第三条规则允许 ip 地址为 127.0.0.1 的客户端发布/订阅 $SYS/## 主题,为第二条开了特例

    3. 第四条规则允许用户名为 dashboard 的客户端订阅 $SYS/# 主题,为第二条开了特例

    acl.conf 文件中的规则按书写顺序从上往下匹配。

    的语法规则包含在顶部的注释中,熟悉 Erlang 语法的可直接阅读文件顶部的注释。或参考以下的释义:

    • %% 表示行注释。

    • 每条规则由四元组组成,以 . 结束。

    ​ * allow:表示 允许

    ​ * deny: 表示 拒绝

    • 元组第二位:表示规则所生效的用户,可使用的格式为:

    ​ * {user, "dashboard"}:表明规则仅对 用户名 (Username) 为 “dashboard” 的用户生效

    ​ * {client, "dashboard"}:表明规则仅对 客户端标识 (ClientId) 为 “dashboard” 的用户生效

    ​ * {ipaddr, "127.0.0.1"}:表明规则仅对 源地址 为 “127.0.0.1” 的用户生效

    • 元组第三位:表示规则所控制的操作,可取值为:

    ​ * publish:表明规则应用在 PUBLISH 操作上

    ​ * subscribe:表明规则应用在 SUBSCRIBE 操作上

    ​ * pubsub:表明规则对 PUBLISH 和 SUBSCRIBE 操作都有效

    • 元组第四位:表示规则所限制的主题列表,内容以数组的格式给出,例如:

    ​ * "$SYS/#":为一个 主题过滤器 (Topic Filter);表示规则可命中与 $SYS/# 匹配的主题;如:可命中 “$SYS/#”,也可命中 “$SYS/a/b/c”

    ​ * {eq, "#"}:表示字符的全等,规则仅可命中主题为 # 的字串,不能命中 /a/b/c

    • 除此之外还存在两条特殊的规则:

    • :拒绝所有操作

    提示

    acl.conf 中应只包含一些简单而通用的规则,使其成为系统基础的 ACL 原则。如果需要支持复杂、大量的 ACL 内容可以选择外部资源去实现它。