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.
删除“/”使其再次工作。
我在 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.
删除“/”使其再次工作。