使用Mosquitto动态安全创建角色失败:未授权连接错误
问题描述
使用Mosquitto动态安全功能创建新角色时,始终报错:
Can't create new roles using mosquitto dynamic security Connection error: Not authorized
已尝试操作
- 执行创建角色命令:
mosquitto_ctrl -u myadmin -P admin333 dynsec createRole firstRole - 使用sudo执行命令:
sudo mosquitto_ctrl -u myadmin -P <mypassword> dynsec createRole firstRole - 修改
dynamic-security.json权限:设置全权限、将所有者改为root,均无效,仍报相同错误。
相关配置信息
dynamic-security.json文件权限:-rw-r--r-- 1 mosquitto mosquitto 1247 Mar 6 06:51 dynamic-security.json- 文件生成命令:
sudo mosquitto_ctrl dynsec init /var/lib/mosquitto/dynamic-security.json myadmin mosquitto.conf配置内容:persistence true persistence_location /etc/mosquitto/data user mosquitto listener 1883 per_listener_settings false allow_anonymous false password_file /etc/mosquitto/conf.d/credentials log_dest file /etc/mosquitto/log/mosquitto.log log_dest stdout plugin /usr/lib/x86_64-linux-gnu/mosquitto_dynamic_security.so plugin_opt_config_file /usr/lib/x86_64-linux-gnu/dynamic-security.json
排查与解决方法
修正配置文件路径不匹配问题
初始化dynamic-security.json时指定的路径是/var/lib/mosquitto/dynamic-security.json,但mosquitto.conf中plugin_opt_config_file指向的是/usr/lib/x86_64-linux-gnu/dynamic-security.json,路径不一致导致Mosquitto加载的不是包含myadmin账号的配置文件,直接引发授权失败。- 修改
mosquitto.conf中的路径配置:plugin_opt_config_file /var/lib/mosquitto/dynamic-security.json - 重启Mosquitto服务:
sudo systemctl restart mosquitto
- 修改
确认管理员账号密码正确性
初始化dynsec时会提示设置myadmin的密码,确保执行mosquitto_ctrl时使用的密码是当时设置的内容,而非自行假设的admin333。恢复正确的文件权限
将dynamic-security.json的所有者恢复为mosquitto用户,权限保持rw-r--r--即可,过高权限反而可能导致Mosquitto无法正常读写配置文件。
内容的提问来源于stack exchange,提问作者Danana
相关产品推荐
相关产品推荐

