Предисловие
В данной статье рассматривается запуск сервиса RabbitMQ с ненулевой мандатной меткой (для примера используется мандатная метка с уровнем конфиденциальности 3, категориями доступа 0 и уровнем целостности 0, т.е. 3:0:0).
При этом сервис работает на одном и только одном уровне конфиденциальности, работа одного экземпляра сервиса одновременно на нескольких уровнях конфиденциальности невозможна, так как это противоречит требованиям мандатного разграничения доступа.
Однако, при необходимости, можно запустить несколько экземпляров сервиса, каждый из которых будет работать на своём изолированном уровне.
Установка пакета
Пакет rabbitmq-server, устанавливающий службу RabbitMQ, не входит в состав стандартного дистрибутива ОС СН Atra Linux SE Смоленск 1.6, поэтому для установки службы нужно подключить репозиторий Debian.
После подключения репозитория пакет может быть rabbitmq-server установлен с помощью графического менеджера пакетов или из командной строки командами
Настройка пакета
Настройка плагинов:
Добавление пользователя для RabbitMQ, задание пароля, назначение прав
rabbitmqctl set_user_tags user administrator && \
rabbitmqctl set_permissions -p / user ".*" ".*" ".*"
Для выполнения дальнейших настроек остановить службу:
Создать каталоги для работы с ненулевой мандатной меткой и назначить их владельцем автоматически созданного при установке пакета пользователя rabbitmq:
Использование продвинутых редакторов может привести к тому, что ссылки будут заменены на копии файлов, после чего служба полностью потеряет работоспособность.
Отредактировать конфигурационный файл /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
...
Назначить уровень мандатных меток на директории и файлы
pdpl-file -R 3:0:0:CCNR /opt/rabbitmq
pdpl-file 3:0:0:CCNR /usr
pdpl-file 3:0:0:CCNR /usr/lib
pdpl-file -R 3:0:0:CCNR /usr/lib/rabbitmq
pdpl-file 3:0:0:CCNR /var/lib
pdpl-file R 3:0:0:CCNR /var/lib/rabbitmq
Запустить службу: