物联网消息队列后端网络/通信【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mo/mosquitto点击查看免费下载本指南以 Mosquitto 官方《Migrating from 1.x to 2.0》文档仓库路径 www/pages/documentation/migrating-to-2-0.md为主线系统梳理 2.0 版本在监听器配置、认证默认策略、权限降级时机、打包结构与插件接口上的全部破坏性变更。无论你是正在升级线上 Broker 的运维人员、负责发行打包的维护者还是需要适配新接口的插件作者读完本文都能明确哪些配置必须改、哪些行为会静默变化并拿到可直接落地的配置示例与源码级佐证。一、2.0 版本的设计基调从宽容默认转向安全默认Mosquitto 2.0 的核心变化可以用一句话概括Broker 不再替用户做宽容的安全决策而是要求用户主动、知情地选择自己的安全模型相关说明见 www/posts/2020/12/version-2-0-0-released.md 的 Breaking changes 部分。这体现在两个层面无配置运行时只绑定回环接口杜绝意外的远程暴露所有显式配置的监听器默认拒绝匿名连接倒逼用户配置认证。因此升级到 2.0 不是简单的换二进制而是需要重新审视 broker 的监听器、认证、TLS 与文件权限四类配置。下面按官方迁移文档的章节逐一展开。二、监听器Listener行为变更2.1 无配置运行默认只监听回环接口这是 2.0 最直观的变化。当 Mosquitto不使用配置文件、也不配置任何监听器运行时它现在只绑定到回环接口127.0.0.1和/或::1意味着只有本机发起的连接才能建立。只有在这种本地测试模式下才默认允许匿名/未认证用户连接。以下运行方式会命中该模式mosquitto mosquitto -p 1883也就是说过去mosquitto一条命令就能让局域网内所有客户端连上 1883 端口的行为已经不存在了。若希望允许远程客户端连接必须提供配置文件例如listener 1883 # 注意此配置默认不允许匿名访问。该配置默认将 1883 端口监听器绑定到0.0.0.0或::接口即允许所有接口上的连接。当然仍可以手动绑定到指定接口例如listener 1883 192.168.1.1。从源码可以印证这套逻辑。配置读取阶段config-local_only的默认值为true见 src/conf.c且listener指令一旦出现就会把它置为false见 src/conf.c 与 src/conf.c。启动阶段若local_only为真则调用listeners__start_local_only()该函数会同时为127.0.0.1与::1各建立一个监听器并显式把security_options-allow_anonymous置为true见 src/listeners.c同时 Broker 会打印提示日志建议创建配置文件来开放远程访问见 src/listeners.c。2.2 认证强制配置allow_anonymous 默认变为 false除上述无监听器配置、绑定回环的特例之外所有监听器现在都要求配置认证。这意味着allow_anonymous的默认值从 1.6.x 时代的true除非设置了其他安全选项变为false。如果你现有的 Broker 在配置文件中定义了监听器但没有配置任何其他认证手段、也没有显式设置allow_anonymous那么升级到 2.0 后客户端将全部无法连接。官方文档给出三个选择配置内置的password_file与acl_file选项完成认证与访问控制使用认证插件例如随项目发布的 dynamic-security 插件或第三方 mosquitto-go-auth 插件显式设置allow_anonymous true——仅当确实存在未认证客户端接入需求时才应这样做。在源码层面配置解析器把allow_anonymous的未设置状态用-1表示见 src/conf.c。配置文件读取完成后若local_only为真则强制置true否则在per_listener_settings开启或关闭两种情况下凡未被显式赋值仍为-1的监听器/全局安全选项都会被置为false见 src/conf.c。这正对应了官方手册中除非配置文件未定义任何监听器否则默认拒绝匿名连接的表述见 man/mosquitto.conf.5.xml。2.3 tls_version 语义变更现在是最低版本TLS v1.0 被禁用监听器的tls_version选项语义发生变化它不再指定精确的TLS 版本而是指定最低允许的TLS 协议版本。例如设置listener 8883 tls_version tlsv1.2将同时允许 TLS v1.2 与 TLS v1.3 连接。与此同时对 TLS v1.0 的支持已被移除这意味着依赖 TLS v1.0 的老旧客户端必须升级。从源码看tls_version在配置解析中作为字符串选项读取见 src/conf.c且不支持热加载reload 时会被跳过修改后需要重启 Broker 才能生效。2.4 -p 命令行端口与配置文件的混用不再被支持旧版本允许配置文件里定义监听器同时又用-p指定额外端口的混用方式。2.0 中该行为已废弃只要配置文件中定义了任何监听器命令行-p提供的端口就会被忽略。举例说明。假设配置文件如下listener 1883 # ...并这样启动mosquitto -c mosquitto.conf -p 1884那么-p 1884将不起任何作用1884 端口不会有监听器。正确的做法是把所有监听器都写进配置文件listener 1883 # ... listener 1884 # ...然后直接运行mosquitto -c mosquitto.conf三、root/特权用户行为变更加载配置后立即降权在 2.0 之前的版本中若以 root 运行Mosquitto 会先加载 TLS 证书、启动监听器、启动日志然后才降级到非特权的 mosquitto 用户。这一顺序在 2.0 中已经反转2.0 中Mosquitto 读取配置文件后立即降级到配置指定的非特权用户默认是mosquitto。若mosquitto或手动配置的用户不存在Broker 会尝试降级到nobody用户。这意味着Broker 只有在读取配置文件时拥有 root 权限之后访问或写入的任何其他文件都必须对非特权用户可读/可写。特别地使用 Lets Encrypt 证书的用户需要额外处理证书目录权限问题官方提供了一个 certbot 部署续期钩子示例脚本misc/letsencrypt/mosquitto-copy.sh。该脚本在证书续期时把fullchain.pem与privkey.pem复制到 Mosquitto 的证书目录、将属主改为mosquitto、权限收紧为0600并发送 SIGHUP 让 Broker 重新加载证书见 misc/letsencrypt/mosquitto-copy.sh。仍可强制 Mosquitto 以 root 运行但这强烈不推荐。源码侧的实现在drop_privileges()函数中见 src/mosquitto.c以 rooteuid0运行时优先使用config-user指定的用户若该用户不存在且正好是默认值mosquitto则回退尝试nobody两者都失败才会报错退出。该函数在主流程中紧跟在配置加载之后被调用注释也明确说明降权之后TLS 证书、持久化文件等所有资源都必须对mosquitto或其他非特权用户可访问见 src/mosquitto.c。四、其他行为变化4.1 pid_file 无条件写入pid_file选项现在无论是否使用-d守护进程模式都会尝试写入 pid 文件。此前只有使用-d时才会写2.0 中该行为已统一避免脚本在非守护模式下误判 Broker 未运行。4.2 max_queued_messages 默认值提升并覆盖 QoS 0max_queued_messages选项的默认值从 100 提升到1000并且在客户端处于连接状态时也适用于 QoS 0 消息。配置解析器中的默认值初始化即为 1000见 src/conf.c。队列控制逻辑见 src/database.cQoS 0 消息在客户端在线时的选择是立即投递或丢弃队列上限由max_queued_messages与max_queued_bytes联合约束db__ready_for_flight()离线客户端的消息排队由db__ready_for_queue()负责同样受max_queued_messages限制。升级后若仍希望保持旧行为可在配置中显式写回max_queued_messages 100。五、打包与分发Packaging and Distribution变化官方文档将 Mosquitto 提供的组件分为三类2.0 对打包者影响如下。5.1 客户端库Client librariesC/C 客户端库用于创建 MQTT 客户端lib/libmosquitto.so.1lib/cpp/libmosquittopp.so.1include/mosquitto.hinclude/mqtt_protocol.h5.2 命令行客户端Clients通用命令行 MQTT 客户端依赖libmosquitto.so.1client/mosquitto_pubclient/mosquitto_subclient/mosquitto_rr5.3 Broker 及其配套工具项目主体是 Mosquitto Broker外加相关工具与插件apps/mosquitto_ctrl/mosquitto_ctrlapps/mosquitto_passwd/mosquitto_passwdplugins/dynamic-security/mosquitto_dynamic_security.sosrc/mosquittoinclude/mosquitto_broker.hinclude/mosquitto_plugin.h5.4 2.0 中的具体变化mosquitto_passwd工具的位置发生了变更新增mosquitto_ctrl工具用于控制运行中的 Broker当前主要用于控制 dynamic-security 插件新增mosquitto_dynamic_security插件这是 Mosquitto 专属的共享库提供基于客户端、分组与角色的认证和访问控制配置通过特殊 topic 管理、可在线热更新详见 plugins/dynamic-security/README.md 与 www/pages/documentation/dynamic-security.mdmosquitto_ctrl工具依赖libmosquitto.so.1插件开发者需要同时拿到 libmosquitto 的头文件与 broker 侧的头文件。5.5 依赖项Dependenciesmosquitto_ctrl与mosquitto_dynamic_security.so依赖 cJSON 库。若系统未检测到 cJSON 或不需要这些功能可以关闭相应特性构建系统相关检测见 cmake/FindcJSON.cmake。六、插件作者的迁移要点Mosquitto 2.0 引入了新的插件接口设计目标是更易开发、更易扩展。官方承诺只要现有插件遵循了mosquitto_plugin.h中的旧版指导除非使用 Mosquitto 2.0 头文件重新编译否则在 2.0 上继续可用——2.0 头文件中的文档注释存在一处错误会导致重新编译后出现问题。要让插件同时兼容 Mosquitto 1.6 与 2.0需要把插件中mosquitto_auth_plugin_version的返回值改为你支持的插件接口版本号即4。当前仓库中该版本宏定义在 include/mosquitto/broker_plugin.h#define MOSQ_AUTH_PLUGIN_VERSION 4与迁移文档的要求一致。仓库 plugins/examples 下提供了大量 2.0 插件示例如 auth-by-env、auth-by-ip、force-retain、payload-modification 等可作为适配新接口的参考起点。七、升级检查清单综合官方迁移文档与 2.0.0 发布说明 中的 Breaking changes升级前建议逐项核对监听器确认配置文件是否定义了listener若未定义确认仅本机访问符合预期否则补上listener配置。认证对每个监听器确认allow_anonymous、password_file/acl_file或认证插件三选一已明确配置避免升级后所有客户端掉线。TLS检查tls_version是否会被新语义影响如原来精确指定tlsv1.2现在会额外放行 1.3确认不存在依赖 TLS v1.0 的客户端。命令行端口若配置文件中已有listener移除命令行-p全部端口写入配置。文件权限以 root 部署时确保证书、持久化文件、pid 文件路径对mosquitto或nobody用户可读可写Lets Encrypt 用户部署 misc/letsencrypt/mosquitto-copy.sh。队列参数确认max_queued_messages默认值从 100 升到 1000 且覆盖 QoS 0 是否符合预期。插件确认插件未用 2.0 头文件重编导致接口破坏或将mosquitto_auth_plugin_version返回值更新为4。打包核对mosquitto_passwd路径变化、新增的mosquitto_ctrl与 dynamic-security 插件及其 cJSON 依赖是否已纳入分发清单。按上述清单改造后Broker 将以本地回环默认隔离、显式监听默认认证、尽早降权运行的安全基线稳定运行在 2.0 之上更多认证细节可继续阅读 authentication-methods 文档 与 mosquitto.conf 手册。赞分享物联网消息队列后端网络/通信【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mo/mosquitto点击查看免费下载相关推荐Eclipse Mosquitto 迁移指南从 1.x 升级到 2.0 的行为变更与配置改造Eclipse Mosquitto 迁移指南从 1.x 升级到 2.0 的行为变更与配置改造 Mosquitto 2.0 是 Eclipse Mosquitt后端消息队列消息路由psutil 2.0 API 迁移指南从 1.x 升级到 2.x 的破坏性变更与移植策略psutil 2.0 API 迁移指南从 1.x 升级到 2.x 的破坏性变更与移植策略 导读 psutil 是一个跨平台的进程与系统监控库其 2.0 版本可观测性系统编程PyTorch Lightning 2.0 升级指南从 1.x 迁移的破坏性变更与实战对照PyTorch Lightning 2.0 升级指南从 1.x 迁移的破坏性变更与实战对照 本篇技术指南围绕 PyTorch Lightning 官方升级文档人工智能深度学习机器学习预训练分布式训练微调创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考