【发布时间】:2022-08-05 20:30:52
【问题描述】:
我正在尝试 mosquitto 的动态安全模块,只要我从不systemctl restart mosquitto.service,一切似乎都可以正常工作。安装 mosquitto 并启用动态安全模块后,我运行了这两个命令:
mosquitto_ctrl dynsec init /etc/mosquitto/dynamic-security.json steve
systemctl restart mosquitto.service
然后我能够创建一个用户、角色、订阅和发布到这样的主题:
mosquitto_ctrl -u steve -P Pass1234 dynsec createClient john0
mosquitto_ctrl -u steve -P Pass1234 dynsec createRole role0
mosquitto_ctrl -u steve -P Pass1234 dynsec addClientRole john0 role0 1
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_sub -u john0 -P Pass1234 -t pizza
# then open a second terminal window and do this:
mosquitto_pub -u john0 -P Pass1234 -t pizza -m \'hi\'
# result is the word `hi` appears in the first/original terminal window
我可以在pizza 主题上使用john0 用户重复发布和订阅主题。
但是,当我必须重新启动服务器或运行systemctl restart mosquitto.service 时,john0 客户端将不再存在。
如何防止john0 用户以及所有角色和访问权限在systemctl restart mosquitto.service 之后消失?
编辑
这是我的/etc/mosquitto/mosquitto.conf
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
allow_anonymous false
per_listener_settings false
plugin /usr/lib/x86_64-linux-gnu/mosquitto_dynamic_security.so
plugin_opt_config_file /etc/mosquitto/dynamic-security.json
另外,在我的/etc/mosquitto/dynamic-security.json 中,唯一存在的记录是他的steve。我在dynamic-security.json 文件中看不到任何其他客户端。
编辑
另外,如果我手动编辑/etc/mosquitto/dynamic-security.json,它似乎不会立即生效。我需要运行 systemctl restart mosquitto.service 以使更改生效。
所以我想现在我的问题是我如何添加客户和角色以使其符合所有这些标准:
- 我可以在运行时添加它们,它们会立即生效而无需
systemctl restart mosquitto.service。 - 在
systemctl restart mosquitto.service之后,客户端和角色仍然存在(即它们没有被删除)
-
请编辑问题以包含您的 mosquitto.conf 和您正在使用的任何其他 mosquitto 配置文件的全部内容。另外,您所做的更改是否出现在
/etc/mosquitto/dynamic-security.json中? -
@romkey - 我更新了 mosquitto.conf 文件。只有
steve客户端出现在/etc/mosquitto/dynamic-security.json中。john0似乎从未出现 -
@romkey - 我还更新了我的问题,以表明如果我手动编辑
/etc/mosquitto/dynamic-security.json,我需要systemctl restart mosquitto.service才能使事情生效。但我的挑战是我不想每次添加用户时都重新启动 mosquitto 服务。 -
在您重新启动之前它不会生效 - 它仅在启动时读取。您可能遇到权限问题 - mosquitto 可能无法写入
/etc/mosquitto。状态应该存储在/var/lib/mosquitto- 尝试将配置文件的位置更改为/var/lib/mosquitto/dynamic-security.json并确保它由运行 mosquitto 的用户拥有。然后重新启动 mosquitto 并再次执行您尝试过的测试。 -
@romkey - 你的答案奏效了!我将我的 dynamic-security.json 移动到不同的位置,chown 与我的 mosquitto 服务和 chmod 755 相同的用户。现在我可以使用 mosquitto_ctrl 命令添加新用户和角色,并且更新 dynamic-security.json 以便下次系统重新启动时,更改将被保留。
标签: mosquitto