RabbitMQ — программный брокер сообщений на основе стандарта AMQP — тиражируемое связующее программное обеспечение, ориентированное на обработку сообщений. Создан на основе системы Open Telecom Platform, написан на языке Erlang, в качестве движка базы данных для хранения сообщений использует Mnesia.
Состоит из сервера, библиотек поддержки протоколов HTTP, XMPP и STOMP, клиентских библиотек AMQP для Java и .NET Framework и различных плагинов (таких как плагины для мониторинга и управления через HTTP или веб-интерфейс или плагин «Shovel» для передачи сообщений между брокерами). Имеется реализация клиентов для доступа к RabbitMQ для целого ряда языков программирования, в том числе для Perl, Python, Ruby, PHP. Поддерживается горизонтальное масштабирование для построения кластерных решений.
Источник информации.
Данная статья применима к:
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)
(с установленным обновлением Бюллетень № 20190329SE15)Astra Linux Special Edition РУСБ.10015-16 исп. 1
Предисловие
В данной статье рассматривается запуск службы RabbitMQ с ненулевой меткой безопасности (для примера используется метка безопасности с иерархическим уровнем конфиденциальности 3, неиерархическими категориями доступа 0 и неиерархическим уровнем целостности 0, т.е. метка 3:0:0).
При этом:
- Служба работает на одном и только одном уровне конфиденциальности, и работа одного экземпляра службы одновременно на нескольких уровнях конфиденциальности невозможна, так как это противоречит требованиям мандатного разграничения доступа.
- Служба использует для своей работы базу данных Mnesia, также не поддерживающую работу с метками безопасности.
При необходимости работать с данными, имеющими разные уровни мандатного доступа, необходимо запустить несколько экземпляров службы, каждый из которых будет работать на своём изолированном уровне.
В целом для запуска любой службы для работы с ненулевой классификационной меткой необходимо выполнить следующие типовые операции:
- Установить службу и выполнить её базовые настройки.
- Исправить системный юнит (файл запуска) службы, внеся в него параметр с необходимой меткой безопасности.
- Установить на файловые объекты, в которые службой производится запись (журналы, базы данных и пр.), необходимые мандатные уровни.
Далее рассматривается выполнение этих операций применительно к службе RabbitMQ.
Установка службы RabbitMQ
Пакет rabbitmq-server, устанавливающий службу RabbitMQ, не входит в состав стандартного дистрибутива ОС Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6), поэтому для установки службы нужно подключить репозиторий Debian.
После подключения репозитория пакет rabbitmq-server может быть установлен с помощью графического менеджера пакетов (см. Графический менеджер пакетов synaptic) или из командной строки командами
sudo apt install rabbitmq-server
Настройка службы
Базовая настройка
Настройка плагинов:
Добавление пользователя для RabbitMQ, задание пароля, назначение прав
sudo rabbitmqctl set_user_tags user administrator && \
sudo rabbitmqctl set_permissions -p / user ".*" ".*" ".*"
Для выполнения дальнейших настроек остановить службу:
Создать каталоги для работы с ненулевой меткой безопасности и назначить их владельцем автоматически созданного при установке пакета пользователя rabbitmq:
Использование продвинутых редакторов (например, kate) может привести к тому, что ссылки будут заменены на копии файлов, после чего служба полностью потеряет работоспособность.
Отредактировать конфигурационный файл /opt/rabbitmq/etc/rabbitmq-env.conf, добавив или изменив следующие строки (в параметре NODE_IP_ADDRESS указать ip-адрес сервера):
NODE_IP_ADDRESS=<IP-address>
NODE_PORT=5672
LOG_BASE=/opt/rabbitmq/log
HOME=/opt/rabbitmq
MNESIA_BASE=/var/lib/rabbitmq/mnesia
Настройка запуска с ненулевой меткой безопасности
Отредактировать юнит (файл запуска) службы в /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service, добавив в него параметр с нужной меткой безопасности:
Description=RabbitMQ Messaging Server
After=network.target
[Service]
PDPLabel=3:0:0
Type=simple
User=rabbitmq
SyslogIdentifier=rabbitmq
LimitNOFILE=65536
ExecStart=/usr/sbin/rabbitmq-server
ExecStartPost=/usr/lib/rabbitmq/bin/rabbitmq-server-wait
ExecStop=/usr/sbin/rabbitmqctl stop
[Install]
WantedBy=multi-user.target
После выполнения редактирования юнита запуска службы обновить конфигурацию для загрузки внесённых изменений:
Создание файловых объектов с нужной меткой безопасности
Отредактировать файл запуска службы /etc/init.d/rabbitmq-server, исправив пути к файлам:
....
INIT_LOG_DIR=/opt/rabbitmq/log
PID_FILE=/opt/rabbitmq/run/pid
...
Отредактировать запускающий файл /usr/lib/rabbitmq/bin/rabbitmq-script-wrapper, исправив пути к файлам журналов:
/usr/lib/rabbitmq/bin/rabbitmq-server "$@" > "/opt/rabbitmq/log/startup_log" 2> "/opt/rabbitmq/log/startup_err"
Отредактировать файл переменных по умолчанию /usr/lib/rabbitmq/bin/rabbitmq-defaults. Изменить пути до файлов ENABLED_PLUGINS_FILE, CONF_ENV_FILE:
...
ENABLED_PLUGINS_FILE=${SYS_PREFIX}/opt/rabbitmq/etc/enabled_plugins
...
CONF_ENV_FILE=${SYS_PREFIX}/opt/rabbitmq/etc/rabbitmq-env.conf
...
Назначить метки безопасности на каталоги и находящиеся в них файловые объекты:
sudo pdpl-file -R 3:0:0:ccnr /opt/rabbitmq
sudo pdpl-file 3:0:0:ccnr /var/lib
sudo pdpl-file -R 3:0:0:ccnr /var/lib/rabbitmq
Запуск службы
Запустить службу: