只允许匿名用户在 mosquitto 中阅读

只允许匿名用户在 mosquitto 中阅读

我正在尝试实现一个带有两个侦听器的 mosquitto 代理。一个不安全,一个 TLS 安全。基本上,对于订阅(阅读)主题,您不必提供任何凭据和其他信息。但它不起作用。匿名用户仍然可以发布到主题。

我咨询了手册页在我看来一切都做对了,但只要我有这行,allow_anonymous true即使是 acl 中的第一行,topic read #它也可以允许匿名写入。我allow_anonymous false使用未包含在 ACL 中的用户进行了双重检查。在这种情况下,我仍然能够发布到主题,foo/generic/something唯一的变化是需要有效用户,但 ACL 仍然无法按我预期的方式工作。

因此,基本上连手册页上都写着

第一组主题适用于匿名客户端,假设allow_anonymous为真。

它不起作用。我做错了什么?我使用的是 mosquitto 1.4.7。我在下面附加了我的配置(路径有点疯狂,因为我在一台共享机器上)

mosquitto配置文件

retry_interval 30
sys_interval 15
store_clean_interval 15
pid_file /home/johndoe/mosquitto/pidfile.pid
port 61883

# tls listener
listener 61884
cafile /home/johndoe/mosquitto/tls/ca.crt
certfile /home/johndoe/mosquitto/tls/server.crt
keyfile /home/johndoe/mosquitto/tls/server.key
require_certificate false
tls_version tlsv1.2

# acls
acl_file /home/johndoe/etc/mosquitto/mosquitto.acl
password_file /home/johndoe/etc/mosquitto/mosquitto.passwd
allow_anonymous true

mosquitto.acl

topic   read    #

user    john
topic   readwrite       foo/

答案1

您使用制表符分隔 ACL 文件中的字段。ACL 文件要求使用(任意数量的)空格。

虽然手册页没有明确说明这一点,但 strtok_r 使用分隔符“ ”来解析文件。这意味着只有空格才是可接受的分隔符。

因此,要使您的访问控制正常工作,只需用空格替换制表符即可。

相关内容