mqtt-брокер — aclfile

Я установил комара на Debian 9

apt-get install mosquitto mosquitto-clients

сделал перезапуск службы Re-Start mosquitto

проверил это

mosquitto_pub -d -t My/Topic2 -m "Hello MQTT"

нет сообщения об ошибке

создал пароль

mosquitto_passwd -c /etc/mosquitto/passwd myUsername

создал aclfile

touch /etc/mosquitto/aclfile
nano /etc/mosquitto/aclfile

с этим содержанием:

# This affects access control for clients with no username.
topic read myTopic/#

# This only affects clients with username "myUsername".
user myUsername
topic myTopic/#

# This affects all clients.
pattern write $SYS/broker/connection/%c/state

вставить путь к acl_file в этот файл

nano /etc/mosquitto/mosquitto.conf

acl_file /etc/mosquitto/aclfile
password_file /etc/mosquitto/passwd

поэтому план состоит в том, что пользователь «myUsername» может публиковать в «myTopic», а все остальные пользователи, включая гостей, могут только читать.

У меня эта конфигурация уже работала на другом сервере, но в этом случае что-то не так. В первый раз, когда я тестировал, я забыл добавить путь к файлу password_file в mosquitto.conf и получил ошибку: Отказано в соединении, если я хочу, поэтому опубликуйте также, если я хочу только подписаться

Хорошо, я исправил эту проблему, но теперь я могу публиковать без имени пользователя и пароля.

и, конечно же, я сделал перезагрузку:

service mosquitto restart

Итак, если я отправлю

mosquitto_pub -d -t myTopic/test -m "Access denied is expected"

Я не получаю ошибки, похоже, сообщение опубликовано

если я открою вторую оболочку (а также с удаленной машины), я могу подписаться

mosquitto_sub -d -t myTopic/test

но если я публикую что-то в этой теме, ничего не приходит (пинг работает)

Любые идеи для моих 2 проблем?

PS: я НЕ профессионал в Linux, поэтому, если вам нужна дополнительная информация, предоставьте мне правильную информацию о том, как получить эту информацию.

РЕДАКТИРОВАТЬ: если я использую

ps -efc 

это единственная запись с комарами

mosquit+ 736 1 TS 19 21:36 ? 00:00:02 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

в журнале

nano /var/log/mosquitto/mosquitto.log

я получил

ACL denying access to client with dangerous client id "mosqpub/7977-Debian-93-"
ACL denying access to client with dangerous client id "mosqpub/356-h2700629"

но что касается google, это уже должно быть исправлено в прошлом году

Я использую москитную версию 1.4.10.


person Nisbo    schedule 26.01.2018    source источник
comment
Убедитесь, что mosquitto действительно использует предоставленный вами файл конфигурации. (В журналах должен быть указан файл конфигурации пути, используемый во 2-й строке при запуске, или он должен быть указан в выводе ps -efc). Mosquitto не использует файл конфигурации, если это явно не указано.   -  person hardillb    schedule 27.01.2018
comment
если я использую ps -efc, это единственная запись с комаром mosquit+ 736 1 TS 19 21:36 ? 00:00:02 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf правильно ли это?   -  person Nisbo    schedule 27.01.2018
comment
Отредактируйте вопрос, чтобы включить обновленную информацию. Но да, похоже, он использует файл конфигурации. Поэтому вам нужно проверить файл журнала (расположение которого должно быть в файле conf). Если это не показывает ничего очевидного, вы можете повысить уровень ведения журнала (см. справочную страницу для mosquitto.conf и параметр log_type)   -  person hardillb    schedule 27.01.2018
comment
в журнале nano /var/log/mosquitto/mosquitto.log я получаю ACL, запрещающий доступ к клиенту с опасным идентификатором клиента mosqpub/7977-Debian-93- ACL, запрещающий доступ к клиенту с опасным идентификатором клиента mosqpub/356-h2700629, но относительно google это должно быть уже исправлено в прошлом году   -  person Nisbo    schedule 27.01.2018
comment
Возможно, это было исправлено, но мы понятия не имеем, какую версию mosquitto вы на самом деле используете.   -  person hardillb    schedule 27.01.2018
comment
Я только что установил его сегодня, поэтому я предполагаю, что это последняя версия журнала: версия mosquitto 1.4.10.   -  person Nisbo    schedule 27.01.2018
comment
Версия 1.4.10 была выпущена в августе 2016 года. Последняя версия — 1.4.14 (июль 2017 года).   -  person hardillb    schedule 27.01.2018
comment
В журнале написано: mosquitto версии 1.4.10 (дата сборки понедельник, 29 мая 2017 г., 13:43:29 +0100), начиная с версии 1.4.14, и нет возможности обновить ее через apt-get :/ mosquitto_sub -d -i test123 -t myTopic/test также не работает, если я хочу использовать ручной идентификатор клиента   -  person Nisbo    schedule 27.01.2018


Ответы (2)


Когда пользователю не разрешено публиковать сообщения в теме, публикация просто невозможна. Это работает так, как задумано для MQTT (по крайней мере, в MQTT v3.x).

Вам также, вероятно, потребуется добавить allow_anonymous false, если вы хотите, чтобы клиенты не передавали имя пользователя/пароль.

Чтобы получить последнюю версию mosquitto, следуйте инструкциям на странице https://mosquitto.org/download/. установить правильный ppa

person hardillb    schedule 26.01.2018
comment
план состоит в том, что пользователь myUsername может публиковать в myTopic, а все остальные пользователи, включая гостей, могут только читать, из-за этого для параметра allow_anonymous установлено значение true. Если я отправлю с параметром -i, сообщения об ошибках в журнале исчезнут. Как бы то ни было, вы правы, если я вставлю -u имя пользователя -P пароль, чем это сработает, я ожидал сообщения об отказе в доступе :) Извините, я не могу проголосовать за ваш ответ, чтобы меньше очков :( - person Nisbo; 27.01.2018

Столкнулся с той же проблемой и обнаружил, что речь идет о / в имени пользователя/идентификаторе клиента. Из https://github.com/eclipse/mosquitto/blob/5c45bc4e8407d94d29b39152b580d2b4cc8082e9/src/security.c#L609-L610:

/* Check whether the client id or username contains a +, # or / and if
 * so deny access.

Удаление «/» заставило его снова работать.

person Christian Fritz    schedule 04.03.2021