我的问题是,为什么我不能使用mosquitto_pub来创建新用户?
我似乎无法使用mosquitto_pub命令根据这个自述文件提供的指令在动态安全性中创建新用户:
https://github.com/eclipse/mosquitto/blob/master/plugins/dynamic-security/README.md
就我尝试的内容而言,我成功地使用mosquitto_ctrl命令创建了一个新的用户和角色,以确保动态安全工作。然后我尝试了mosquitto_pub命令,但失败了。让我详细介绍一下下面的mosquitto_ctrl和mosquitto_pub场景。
成功:使用mosquitto_ctrl
我创造了一个这样的角色:
mosquitto_ctrl -u steve -P Pass1234 dynsec createRole role0
mosquitto_ctrl -u steve -P Pass1234 dynsec addRoleACL role0 publishClientSend pizza allow
mosquitto_ctrl -u steve -P Pass1234 dynsec addRoleACL role0 subscribeLiteral pizza allow然后我做了一个这样的用户:
mosquitto_ctrl -u steve -P Pass1234 dynsec createClient user0
mosquitto_ctrl -u steve -P Pass1234 dynsec addClientRole user0 role0 1我打开一个终端并输入以下命令:
mosquitto_sub -u user0 -P Pass1234 -t chocolate我打开第二个终端窗口并放置以下命令:
mosquitto_pub -u user0 -P Pass1234 -t chocolate -m 'I love chocolate'其结果是,第一个终端windoow打印“我喜欢巧克力”。
失败:使用mosquitto_pub
由于role0已经存在,我想我可以创建一个新用户并将role0分配给该用户。我运行以下命令:
mosquitto_pub -u steve -P Pass1234 -t '$CONTROL/dynamic-security/v1' -m '{"command": "createClient", "username":"user1", "password":"Pass1234", "roles":[{"rolename":"role0", "priority":1}]}';然后我尝试使用以下命令
mosquitto_sub -u user1 -P Pass1234 -t chocolate结果是Connection error: Connection Refused: not authorised.,如果我执行systemctl restart mosquitto.service,user0和user1都会得到相同的连接,而不是授权错误。在上面的所有实验中,/etc/mosquitto/dynamic-security.json只显示了客户端steve和我在新安装了蚊帐2.0之后最初手动设置的admin角色。
发布于 2022-02-21 00:54:36
我想通了。这个命令起了作用:
mosquitto_pub -u steve -P Pass1234 -t '$CONTROL/dynamic-security/v1' -m '{"commands":[{"command": "createClient", "username":"user0", "password":"Pass1234", "roles":[{"rolename":"role0", "priority":1}]}]}';基本上,我需要用{"commands": ... }包装我的命令。
我还必须确保我在这里纠正这种情况:
Prevent systemctl restart mosquitto.service from resetting Dynamic Security
https://stackoverflow.com/questions/71199272
复制相似问题