mqtt 代理 - aclfile

mqtt broker - aclfile

我在 Debian 9 上安装了 mosquitto

apt-get install mosquitto mosquitto-clients

重新开始 服务蚊子重启

测试过

mosquitto_pub -d -t My/Topic2 -m "Hello MQTT"

没有错误信息

创建密码

mosquitto_passwd -c /etc/mosquitto/passwd myUsername

创建了 acl 文件

touch /etc/mosquitto/aclfile
nano /etc/mosquitto/aclfile

内容如下:

# This affects access control for clients with no username.
topic read myTopic/#

# This only affects clients with username "myUsername".
user myUsername
topic myTopic/#

# This affects all clients.
pattern write $SYS/broker/connection/%c/state

将 acl_file 的路径插入此文件

nano /etc/mosquitto/mosquitto.conf

acl_file /etc/mosquitto/aclfile
password_file /etc/mosquitto/passwd

所以计划是用户 "myUsername" 可以在 "myTopic" 中发布,而包括来宾在内的所有其他用户只能阅读。

我已经在另一台服务器上 运行 进行了此配置,但在这种情况下出现了问题 我第一次测试时忘记将 password_file 路径添加到 mosquitto.conf 并得到错误:连接被拒绝,如果我想这样发布 如果我只想订阅

好的,我解决了这个问题,但现在我可以在没有用户名/密码的情况下发布

当然我重启了:

service mosquitto restart

所以如果我发送

mosquitto_pub -d -t myTopic/test -m "Access denied is expected"

我没有收到任何错误消息,消息似乎已发布

如果我打开第二个 shell(也来自远程机器) 我可以订阅

mosquitto_sub -d -t myTopic/test

但是如果我发布关于这个主题的东西,则没有收到任何东西(Ping 正在工作)

对我的两个问题有什么想法吗?

PS:我不是Linux专业人士 因此,如果您需要更多信息,请向我提供正确的信息如何获取此信息

编辑:如果我使用

ps -efc 

这是唯一有蚊子的条目

mosquit+ 736 1 TS 19 21:36 ? 00:00:02 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

在日志中

nano /var/log/mosquitto/mosquitto.log

我明白了

ACL denying access to client with dangerous client id "mosqpub/7977-Debian-93-"
ACL denying access to client with dangerous client id "mosqpub/356-h2700629"

但是关于 google 这应该在去年就已经修复了

我正在使用 mosquitto 版本 1.4.10

当不允许用户发布主题时,发布将静默失败。这是为 MQTT 设计的(至少在 MQTT v3.x)。

如果你想阻止不通过 username/password 的客户端,你可能还需要添加 allow_anonymous false

要获取最新版本的 mosquitto,请按照 https://mosquitto.org/download/ 上的说明安装正确的 ppa

运行 进入同一个问题,发现它是关于 username/client-id 中的 /。来自 https://github.com/eclipse/mosquitto/blob/5c45bc4e8407d94d29b39152b580d2b4cc8082e9/src/security.c#L609-L610:

/* Check whether the client id or username contains a +, # or / and if
 * so deny access.

删除“/”使其再次工作。