EMQX 4.3版本用户认证方式的差别以及鉴权方式mysql acl

  1. AMD64=linux-64bit=X86
  2. ARM64=linux-Aarch64=ARM
  3. windows 64bit指代的是X86_64=X86

安装之前确认服务器系统和架构,找适合自己的系统的结构。

emqx安装依赖于openssl 和erlang
先yum安装一下

yum install openssl-1.1.1

由于新机器默认是1.0.2的版本,需要升级为1.1.1

openssl version # 查看当前openssl版本

 yum install erlang

一、4.3版本之前的用户名密码验证配置

第一:4.3之前的版本是修改配置文件/etc/emqx/emqx.conf中allow_anonymous为false,关闭匿名用户登录。

#禁止匿名登录,allow_anonymous默认是true
vim /etc/emqx/emqx.conf
## Value: true | false
allow_anonymous = false

第二:Emqx4.3版本之前存在一个emqx_auth_username扩展,可以通过启动emqx_auth_username插件模块修改其配置实现账号密码验证。进行如下操作即可使用。

#命令添加账号密码或者编辑配置文件
emqx_ctl users add admin public
#编辑用户名密码配置文件
vim /etc/emqx/plugins/emqx_auth_username.conf
## username 认证数据
auth.user.2.username = admin
auth.user.2.password = public
## Password hash
auth.user.password_hash = sha256

  #导入插件模块

  cd /usr/lib/emqx/bin sh emqx_ctl plugins load emqx_auth_username

或者./bin/emqx plugins load emqx_auth_username

二:4.3版本之后的用户名密码验证配置

备注:Emqx4.3版本之后不一样了,官方文档:版本发布 | EMQX 文档 里有注明4.3版本中emqx_auth_clientid 与 emqx_auth_usernmae 合并为 emqx_auth_mnesia。emqx_auth_username模块从此废弃。在Emqx4.3版中加载emq_auth_username插件会报不存在的错误,所以不要再去寻找安装emqx_auth_username模块了。直接修改emqx_auth_mnesia.conf模块配置文件,添加账号密码。

第一:关闭匿名访问登录。修改配置文件/etc/emqx/emqx.conf中allow_anonymous为false,

#禁止匿名登录,allow_anonymous默认是true

vim /etc/emqx/emqx.conf

## Value: true | false

allow_anonymous = false

第二:配置中增加用户明密码配置./etc/plugins/emqx_auth_mnesia.conf

# etc/plugins/emqx_auth_mnesia.conf

## clientid 认证数据 auth.client.1.clientid = admin auth.client.1.password = public

## username 认证数据

auth.user.2.username = admin

auth.user.2.password = public

## Value: plain | md5 | sha | sha256

auth.mnesia.password_hash = sha256  密码方式自己选

第三: 加载插件,或者直接重启emqx ./bin/emqx restart

目前启动插件有以下四种方式:

  1. 默认加载
  2. 命令行启停插件
  3. 使用 Dashboard 启停插件
  4. 调用管理 API 启停插件

第四:最好将需要一直开启的插件,加在插件文件里,防止漏启,实际上执行启动插件后,会自动加载在此配置文件中。

接下来就用工具mqttx客户端自己去测试效果吧

三:emqx使用mysql来鉴权,控制哪些客户端可以连接到平台 


第一 . 关闭匿名访问登录

第二. 修改mysql配置文件 ./emqx/etc/plugins/emqx_auth_mysql.conf

# etc/plugins/emqx_auth_mysql.conf

## 不加盐,仅做哈希处理
auth.mysql.password_hash = sha256

## salt 前缀:使用 sha256 加密 salt + 密码 拼接的字符串
auth.mysql.password_hash = salt,sha256

## salt 后缀:使用 sha256 加密 密码 + salt 拼接的字符串
auth.mysql.password_hash = sha256,salt

## pbkdf2 with macfun iterations dklen
## macfun: md4, md5, ripemd160, sha, sha224, sha256, sha384, sha512
## auth.mysql.password_hash = pbkdf2,sha256,1000,20

 3. 保存,创建数据库,创建表 。然后加载插件 ./bin/emqx_ctl plugins load emqx_auth_mysql

切记:没有数据库表存在,加在插件会报错。

超级用户可以跳过acl权限控制

生成mqtt_user表的执行语句,看这个:

MySQL 认证 | EMQX 文档https://www.emqx.io/docs/zh/v4.4/advanced/auth-mysql.html#mysql-%E8%BF%9E%E6%8E%A5%E4%BF%A1%E6%81%AF

emqx鉴权方式mysql完成之后,配置订阅acl策略。操作步骤

1. 修改配置文件./emqx/etc/emqx.conf 文件

1. 修改配置文件./emqx/etc/acl.conf 文件,可以在配置文件中修改策略,注释允许订阅所有主题的配置

3. 根据需要修改订阅规则,以及在acl表中增加用户订阅topic

# 修改配置文件连接数据库 etc/plugins/emqx_auth_mysql.conf

auth.mysql.super_query = select is_superuser from mqtt_user where username = '%u' limit 1

 参考:EMQX 启用MySQL ACL 权限控制功能_猿又圆的博客-CSDN博客_启动emqx

4. 完成配置后使用 emqx restart 重启emqx broker服务才能生效

超级用户 SQL(super_query):
进行 ACL 鉴权时,EMQ X 将使用当前客户端信息填充并执行用户配置的超级用户 SQL,查询客户端是否为超级用户。客户端为超级用户时将跳过 ACL SQL

创建mqtt_ctl表

CREATE TABLE `mqtt_acl` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `allow` int(1) DEFAULT 1 COMMENT '0: deny, 1: allow',
  `ipaddr` varchar(60) DEFAULT NULL COMMENT 'IpAddress',
  `username` varchar(100) DEFAULT NULL COMMENT 'Username',
  `clientid` varchar(100) DEFAULT NULL COMMENT 'ClientId',
  `access` int(2) NOT NULL COMMENT '1: subscribe, 2: publish, 3: pubsub',
  `topic` varchar(100) NOT NULL DEFAULT '' COMMENT 'Topic Filter',
  PRIMARY KEY (`id`),
  INDEX (ipaddr),
  INDEX (username),
  INDEX (clientid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • username 为客户端连接的时候指定的用户名,此处的值如果设置为 $all 表示该规则适用于所有的用户
  • password 为使用 salt 加密后的密文
  • salt 为加密串
  • is_superuser 是否为超级用户,用于控制 ACL,缺省为0;设置成 1 的时候为超级用户,可以跳过 ACL 检查

四,emqx.conf常用配置功能

第一:配置最大允许连接数和池

第二:匿名访问登录关闭

第三:系统调优---emqx百万连接测试系统、网络、erlang虚拟机参数调优

./etc/emqx.conf文件修改如下配置

 ## Erlang Process Limit
node.process_limit = 2097152
 
## Sets the maximum number of simultaneously existing ports for this system
node.max_ports = 1048576

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
EMQ X 支持使用 MySQL 进行认证,具体配置步骤如下: 1. 安装 MySQL 和 Python 的 MySQL 驱动程序 2. 创建 EMQ X 所需的数据库和数据表,可以使用以下 SQL 语句: ```sql CREATE DATABASE emqx_auth; USE emqx_auth; CREATE TABLE mqtt_user ( id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(100) NOT NULL, password VARCHAR(100) NOT NULL, is_superuser BOOL NOT NULL DEFAULT FALSE, PRIMARY KEY (id), UNIQUE KEY mqtt_user_username_uindex (username) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE mqtt_acl ( id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, allow INT(1) NOT NULL DEFAULT 1, ipaddr VARCHAR(60) NOT NULL DEFAULT '', username VARCHAR(100) NOT NULL, clientid VARCHAR(100) NOT NULL, access INTEGER(2) NOT NULL, topic VARCHAR(256) NOT NULL, PRIMARY KEY (id), KEY mqtt_acl_username_clientid_topic_uindex (username,clientid,topic) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ``` 3. 配置 EMQ X,编辑 emqx.conf 文件,将 auth.acl.auth_mysql 和 auth.user.auth_mysql 配置为 true,同时配置数据库连接信息,例如: ```conf auth.user.auth_mysql = on auth.user.mysql.server = 127.0.0.1:3306 auth.user.mysql.username = root auth.user.mysql.password = root auth.user.mysql.database = emqx_auth auth.user.mysql.pool = 8 auth.acl.auth_mysql = on auth.acl.mysql.server = 127.0.0.1:3306 auth.acl.mysql.username = root auth.acl.mysql.password = root auth.acl.mysql.database = emqx_auth auth.acl.mysql.pool = 8 ``` 4. 重启 EMQ X,使配置生效。 注意:以上配置仅供参考,实际配置应根据具体情况进行调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值