Access-Control-List

只允許匿名在 mosquitto 中閱讀

  • April 24, 2016

我正在嘗試實現一個有兩個聽眾的蚊子經紀人。一種不安全,一種受 TLS 保護。基本上,對於訂閱(閱讀)主題,您不必提供任何憑據和東西。但它不起作用。匿名使用者仍然可以發佈到主題。

我查閱了手冊頁,恕我直言,一切都做對了,但只要我有這條線allow_anonymous true,即使 acl 中的第一行topic read #也允許匿名寫入。allow_anonymous false我使用未包含在 ACL 中的使用者進行了仔細檢查以進行驗證。在這種情況下,我仍然可以發佈到主題,比如foo/generic/something唯一改變的是,需要一個有效的使用者,但 ACL 仍然不能像我預期的那樣工作。

所以基本上即使是手冊頁狀態

第一組主題應用於匿名客戶端,假設 allow_anonymous 為真。

這沒用。我究竟做錯了什麼?我正在使用蚊子 1.4.7。我在下面附加了我的配置(路徑有點瘋狂,因為我在共享機器上)

mosquitto.conf

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

蚊子.acl

topic   read    #

user    john
topic   readwrite       foo/

您使用製表符分隔 ACL 文件中的欄位。ACL 文件需要使用(任意數量的)空格。

雖然手冊頁沒有明確說明這一點,但文件由 strtok_r 解析,分隔符為“”。這意味著只有空格是可接受的分隔符。

因此,要使您的訪問控制正常工作,只需將製表符替換為空格即可。

引用自:https://serverfault.com/questions/771554