Я пытаюсь создать брокера-комара с двумя слушателями. Один небезопасный и один защищенный TLS. В основном так, что для подписки (чтения) тем вам не нужно предоставлять какие-либо учетные данные и прочее. Но это не работает. Анонимные пользователи по-прежнему могут публиковать сообщения в темах.
Я проконсультировался с страница руководства и ИМХО все сделал правильно, но пока у меня строчка allow_anonymous true
даже с первой строкой в acl с topic read #
он позволяет анонимно писать. Я дважды проверил с allow_anonymous false
использование для проверки пользователя, не включенного в списки ACL. В этом случае я все еще могу публиковать в таких темах, как foo/generic/something
Единственное, что изменилось, так это то, что требуется действующий пользователь, но ACL по-прежнему не работают так, как я ожидал.
Так что в основном даже на странице руководства говорится
Первый набор тем применяется к анонимным клиентам при условии, что allow_anonymous истинно.
Это не работает. Что я делаю не так? Использую Mosquitto 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
mosquitto.acl
topic read #
user john
topic readwrite foo/
Вы использовали вкладки для разделения полей в файле ACL. Файл ACL требует использования (любого количества) пробелов.
Хотя на странице руководства это явно не указано, файл анализируется strtok_r с разделителем "". Это означает, что допустимыми разделителями являются только пробелы.
Итак, чтобы ваш контроль доступа работал, просто замените табуляции пробелами.