LDAP 认证/访问控制

LDAP 认证/访问控制使用外部 OpenLDAP 服务器作为认证数据源,可以存储大量数据,同时方便与外部设备管理系统集成。

创建模块

打开 EMQ X DashboardLDAP 认证/访问控制 - 图1 (opens new window),点击左侧的 “模块” 选项卡,选择添加:

image-20200928161310952

选择 LDAP 认证/访问控制模块

image-20200928144927769

配置OpenLDAP相关参数

image-20200928144945076

最后点击“添加”按钮,模块即可添加成功:

image-20200928145033628

LDAP Schema

需要在 LDAP schema 目录配置数据模型,默认配置下数据模型如下:

/etc/openldap/schema/emqx.schema

  1. attributetype ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.1.3 NAME 'isEnabled'
  2. EQUALITY booleanMatch
  3. SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
  4. SINGLE-VALUE
  5. USAGE userApplications )
  6. attributetype ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.4.1 NAME ( 'mqttPublishTopic' 'mpt' )
  7. EQUALITY caseIgnoreMatch
  8. SUBSTR caseIgnoreSubstringsMatch
  9. SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  10. USAGE userApplications )
  11. attributetype ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.4.2 NAME ( 'mqttSubscriptionTopic' 'mst' )
  12. EQUALITY caseIgnoreMatch
  13. SUBSTR caseIgnoreSubstringsMatch
  14. SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  15. USAGE userApplications )
  16. attributetype ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.4.3 NAME ( 'mqttPubSubTopic' 'mpst' )
  17. EQUALITY caseIgnoreMatch
  18. SUBSTR caseIgnoreSubstringsMatch
  19. SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  20. USAGE userApplications )
  21. objectclass ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.4 NAME 'mqttUser'
  22. AUXILIARY
  23. MAY ( mqttPublishTopic $ mqttSubscriptionTopic $ mqttPubSubTopic) )
  24. objectclass ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.2 NAME 'mqttDevice'
  25. SUP top
  26. STRUCTURAL
  27. MUST ( uid )
  28. MAY ( isEnabled ) )
  29. objectclass ( 1.3.6.1.4.1.11.2.53.2.2.3.1.2.3.3 NAME 'mqttSecurity'
  30. SUP top
  31. AUXILIARY
  32. MAY ( userPassword $ userPKCS12 $ pwdAttribute $ pwdLockout ) )

编辑 ldap 的配置文件 slapd.conf 引用 Schema:

/etc/openldap/slapd.conf

  1. include /etc/openldap/schema/core.schema
  2. include /etc/openldap/schema/cosine.schema
  3. include /etc/openldap/schema/inetorgperson.schema
  4. include /etc/openldap/schema/ppolicy.schema
  5. include /etc/openldap/schema/emqx.schema
  6. database bdb
  7. suffix "dc=emqx,dc=io"
  8. rootdn "cn=root,dc=emqx,dc=io"
  9. rootpw {SSHA}eoF7NhNrejVYYyGHqnt+MdKNBh4r1w3W
  10. directory /etc/openldap/data

默认配置下示例数据如下:

  1. ## create emqx.io
  2. dn:dc=emqx,dc=io
  3. objectclass: top
  4. objectclass: dcobject
  5. objectclass: organization
  6. dc:emqx
  7. o:emqx,Inc.
  8. # create testdevice.emqx.io
  9. dn:ou=testdevice,dc=emqx,dc=io
  10. objectClass: top
  11. objectclass:organizationalUnit
  12. ou:testdevice
  13. dn:uid=mqttuser0001,ou=testdevice,dc=emqx,dc=io
  14. objectClass: top
  15. objectClass: mqttUser
  16. objectClass: mqttDevice
  17. objectClass: mqttSecurity
  18. uid: mqttuser0001
  19. isEnabled: TRUE
  20. mqttAccountName: user1
  21. mqttPublishTopic: mqttuser0001/pub/1
  22. mqttSubscriptionTopic: mqttuser0001/sub/1
  23. mqttPubSubTopic: mqttuser0001/pubsub/1
  24. userPassword:: e1NIQX1tbGIzZmF0NDBNS0JUWFVWWndDS21MNzNSLzA9

启用 LDAP 认证后,你可以通过用户名: mqttuser0001,密码:public 连接。

LDAP 访问控制配置方式

mqttPublishTopic 允许发布的主题(可以配置多个)

mqttSubscriptionTopic 允许订阅的主题(可以配置多个)

mqttPubSubTopic 允许订阅/发布的主题(可以配置多个)

WARNING

目前版本仅支持 OpenLDAP,不支持 Microsoft Active Directory。