mosquitto搭建的MQTT服务器用户权限配置

一、前言

作为项目上的配置记录,担心以后自己都忘了自己是如何配置的了。接一年前的博文,在ubuntu上成功搭建MQTT服务器后,并已经稳定使用了一年(具体的搭建过程,可以详细参考这边博文,写的非常的详细。ubuntu上搭建MQTT服务器)。现在在项目上遇到了一个这样的问题,如果我不去控制每个连接账号的权限,任意让知道了账号和密码的人都可以订阅任何主题,和发布任何主题,这显然是不可行的。例如,我为客户开放一个主题,但是他却可以修改主题,去订阅其他消息,我不想让他推送消息,可他却可以自由推送消息。好在Mosquitto提供了非常方便的权限控制,可以设定每个用户订阅/发布权限、也可以设定每个用户可访问的topic范围、从而达到权限控制的目的

注:以下配置和服务器的搭建设置联系比较紧密,所以请详细先看看搭建的链接。

二、具体实现配置

1. 新增访问账号

#新增一个账号为 visit 注意这里增加账户不需要添加参数-c 不然会把第一次创建的账户覆盖
sudo mosquitto_passwd /etc/mosquitto/passwd visit_1
#之后会输入两次设置的密码进行确认
#设置成功后,查看这个文件,就可以看到自己添加的新增账号和密码(密码显示的是经过加密的)
cd /etc/mosquitto
sudo vim passwd

可以看到如下图,我之前有一个账户为***ISC和一个刚才新增的账户visit_1
123

2. 设置访问账号权限

新增账户之后,就要设置访问权限

#创建权限控制文件
sudo vim acl
#在文本中添加一下内容
user visit_1
topic read TEST/TEST1/#
user ***ISC
topic TEST/#

#以上添加了用户visit_1的访问权限为只能订阅。且只能接收主题为TEST/TEST1/分层下的内容
#而用户***ISC没有限制读或者写权限,所以这个用户既有订阅权限又有发布权限
#visit_1用户如需设置发布权限 将参数改为 write

3. 指定访问权限文件的路径

设置好用户的访问权限文件后,需要在配置文件中进行设置访问权限配置文件的路径。
在这里插入图片描述
此时在当前目录下可以看到如上一些文件
acl文件: 前面我们自己创建的配置访问权限的文件
passwd文件: 创建的用户和密码
conf.d文件夹:默认系统配置文件夹

进入系统配置文件夹进行修改

cd conf.d
sudo vim default.conf

在默认的配置文件中添加用户访问权限控制文件的路劲(最后一行)

allow_anonymous false                #禁止匿名登录
password_file /etc/mosquitto/passwd  #指定账号和密码路劲
acl_file /etc/mosquitto/acl          #指定访问权限路劲

最后重启mqtt服务

sudo systemctl restart mosquitto

三、测试

使用MQTTBox进行测试。分别使用用户visit_1和***ISC创建两个客户端

1. visit_1 自订阅,自发布

可以看到,visit_1用户自己订阅自己发布的主题,自己没有收到数据。这是因为前面限制了visit_1用户只有订阅权限,没有发布权限。
在这里插入图片描述

2. ***ISC发布数据,visit_1订阅数据

先看看***ISC,是可以自订自发数据的。
在这里插入图片描述
***ISC发布主题为TEST/TEST1/1234,可以看到visit_1也收到了发布的数据
在这里插入图片描述
当***ISC发布主题为TEST/TEST2时,visit_1无法接收到数据,因为visit_1被限制在只能访问主题TEST/TEST1/下的内容
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值