Mosquitto - аутентификация по имени пользователя и паролю

  • Михаил
  • 8 мин. на прочтение
  • 37
  • 19 Feb 2024
  • 19 Feb 2024

Брокер Mosquitto MQTT можно настроить так, чтобы он требовал аутентификации клиента с использованием действительного имени пользователя и пароля, прежде чем будет разрешено соединение. Комбинация имени пользователя и пароля передается в виде открытого текста и не является безопасной без какой-либо формы транспортного шифрования (SSL). Однако использование аутентификации по имени пользователя и паролю обеспечивает простой способ ограничения доступа к брокеру. Примечание . Имя пользователя , используемое для аутентификации, также можно использовать для ограничения доступа к темам ACL.

В этом руководстве мы рассмотрим, как настроить ограничения имени пользователя и пароля в брокере Mosquitto, а также посмотрим, как это работает, рассмотрев некоторые примеры подключения с использованием консоли.

Конфигурация брокера Mosquitto

Все формы ограничений, например идентификатор клиента, имя пользователя/пароль, тема и т. д., реализованы в брокере MQTT.

После внедрения на брокере клиент должен соблюдать эти ограничения для подключения, подписки и публикации.

Для настройки брокера Mosquitto вам необходимо:

  • Создайте файл паролей
  • Отредактируйте файл mosquitto.conf , чтобы принудительно использовать пароль.

Для создания файла паролей необходимо использовать утилиту mosquitto_passwd , которая входит в состав клиентских инструментов при установке брокера Mosquitto .

Сначала давайте создадим новый файл пользователей:

sudo touch /mosquitto/passwd.conf
sudo chown mosquitto:mosquitto /mosquitto/passwd.conf
sudo chmod 0640 /mosquitto/passwd.conf

Есть несколько способов сделать это:

Способ 1

Заполнить созданный файл строками имя пользователя и пароли, по одному в каждой строке, разделив имя пользователя и пароль двоеточием, как показано ниже.

user1:Password1
user2:Password2

Закройте файл в текстовом редакторе.

Теперь вам нужно преобразовать файл паролей, который шифрует пароли. Перейдите в командную строку и введите:

mosquitto_passwd -U passwordfile
пример
mosquitto_passwd -U passwd.conf

Теперь, если вы снова откроете файл паролей, вы увидите уже зашифрованные пароли. Файл паролей теперь готов к использованию.

Способ 2

Вы создаете файл паролей с помощью команды

mosquitto_passwd -c passwordfile user
пример
mosquitto_passwd -c passwd.conf User2 

Обратите внимание, что для этого вам необходимо ввести имя пользователя. Это добавит пользователя в файл паролей.

Вам будет предложено ввести пароль для пользователя.

Будьте осторожны, так как пароль не отображается, и не похоже, что он принят, но это так.

Теперь вы можете использовать команду

mosquitto_passwd -b passwordfile user password
пример
mosquitto_passwd -b passwd.conf User3 password

чтобы добавить в файл дополнительных пользователей.

Вы также можете удалить пользователей из файла паролей с помощью команды

mosquitto_passwd -D passwordfile user
пример
mosquitto_passwd -D User3 passwd.conf

Проверяем.

Использование файла паролей

Теперь, когда у нас есть файл пользователя, мы можем сообщить о нем Mosquitto. Добавьте в свой файл следующее :/mosquitto/mosquitto.conf

# Require a username / password to connect
allow_anonymous false
# ....which are stored in the following file
password_file /etc/mosquitto/mosquitto_users

Это отключает анонимный доступ и сообщает Mosquitto, где находится файл имени пользователя и пароля.

Обнаружение ошибок аутентификации

Если вы попытаетесь подключиться к брокеру без правильных данных аутентификации, соединение будет отклонено.

Чтобы обнаружить это, вам нужно будет проверить обратный вызов on_connect .

Если вы изучите документацию метода обратного вызова on_connect , вы увидите, что он принимает 4 параметра.

on_connect (клиент, пользовательские данные, флаги, rc):

Параметр rc является кодом возврата и должен быть равен 0 для хорошего соединения.

Код возврата 5 указывает на ошибку аутентификации .

Примеры подключения по паролю:

Проверить работу можно с помощью командной строки, используя утилиты:

mosquitto_sub - для подписки на темы

mosquitto_pub - для публикации сообщений

Пример использования публикации с авторизацией.

 mosquitto_pub -h 10.10.11.18 -t "test/test" -m "hello world" -u "root" -P "пароль"

где: 

-h - сервер
-t - тема куда отправляем сообщение
-m - текст сообщения
-u - имя пользователя
-p - пароль

 

Пример использования подписки авторизацией.

 mosquitto_sub -h 10.10.11.18 -t test -u "root" -P "пароль"

где: 

-h - сервер
-t - тема откуда получать сообщения
-u - имя пользователя
-p - пароль