第6章 用户认证与访问控制
6.1 认证机制概览
匿名
用户名密码
插件
客户端连接
认证检查
allow_anonymous
密码文件
动态认证
允许或拒绝
验证密码
成功/失败
外部验证
6.2 密码文件管理
创建密码文件
bash
# 创建新密码文件(-c)
mosquitto_passwd -c /etc/mosquitto/passwd admin
# 添加用户
mosquitto_passwd -b /etc/mosquitto/passwd user1 pass123
# 删除用户
mosquitto_passwd -D /etc/mosquitto/passwd user1
# 修改密码
mosquitto_passwd -b /etc/mosquitto/passwd admin newpass
密码文件格式
bash
# /etc/mosquitto/passwd
# 格式: username:$6$hash...
admin:$6$4o...
user1:$6$7k...
user2:$6$9m...
6.3 ACL访问控制
ACL文件结构
ACL规则
用户权限
user specific
topic readwrite
topic read
topic write
模式匹配
pattern readwrite
%u 用户名
%c ClientID
通配符
- 单级 # 多级
ACL配置示例
bash
# /etc/mosquitto/acl
# 管理员 - 所有权限
user admin
topic readwrite #
# 传感器设备
user sensor001
topic write sensor/sensor001/data
topic read sensor/sensor001/config
topic read cmd/sensor001/#
# 移动应用
user app_user123
topic read home/#
topic write home/cmd/#
# 只读监控
user monitor
topic read #
# 模式匹配
pattern readwrite home/%u/#
pattern readwrite device/%c/#
匹配优先级
ACL检查
用户特定规则
模式匹配规则
默认规则
最优先
其次
最后
应用第一个匹配
6.4 认证流程
ACL文件 密码文件 Broker 客户端 ACL文件 密码文件 Broker 客户端 CONNECT user/user1, pass/pass123 查询user1 密码匹配 认证成功 SUBSCRIBE sensor/ 检查ACL 允许订阅 SUBACK PUBLISH sensor/data 检查发布权限 允许发布 转发消息
6.5 完整配置
bash
# /etc/mosquitto/mosquitto.conf
# 禁用匿名
allow_anonymous false
# 密码文件
password_file /etc/mosquitto/passwd
# ACL文件
acl_file /etc/mosquitto/acl
# 访问日志
log_dest stdout
log_type all
connection_messages true
6.6 本章小结
实现了基于用户名密码的认证和细粒度的主题访问控制。