Directum RX на Astra Linux и РЕД ОС: что подготовить до установки и на чём спотыкаются
Чем установка Directum RX на Astra Linux и РЕД ОС отличается от Ubuntu и Debian. Репозитории и Docker, мандатный контроль целостности и sudo, secdel на разделах с данными, SELinux и firewalld, дампы PostgreSQL с метками Astra и автоматизация через Ansible. Чек-лист до начала работ.
Коротко. На Astra Linux заранее проверьте МКЦ (
astra-mic-control status,pdp-id):sudoне поднимает уровень целостности, работать надо из сессии администратора с уровнем 63. Ещё до установки найдитеsecdelна разделах с данными и учтите метки MAC в дампах PostgreSQL из состава Astra. На РЕД ОС разберитесь с SELinux (restoreconпосле переноса файлов) и firewalld. На обеих системах нужно зеркало репозиториев, Docker из репозитория ОС нужной версии и проверка условий на семейство ОС в автоматизации.
Инструкция по установке Directum RX на Linux одинакова для всех дистрибутивов: поставить Docker, развернуть Directum Launcher, пройти шаги. На Ubuntu и Debian так и получается. На Astra Linux и РЕД ОС в ту же инструкцию вмешиваются механизмы защиты, свои репозитории и сборки пакетов, и установка, рассчитанная на день, растягивается на неделю переписки с безопасниками. Ниже то, на чём спотыкаются чаще всего, и что проверить до начала работ. Большую часть этого списка мы собрали сами, разворачивая сервисы и агенты мониторинга на обеих системах.
Симптом
- Команда от root через
sudoполучает отказ в доступе к системному файлу. - Служба, которая на Debian запускалась, на РЕД ОС падает с кодом
203/EXEC, хотя файл на месте и права верные. - Пакета, привычного по Debian, в репозитории нет, а интернета на сервере нет вовсе.
- Сценарий Ansible, проверенный на Debian, на Astra отрабатывает «зелёным», но половину шагов пропускает.
- Реплика PostgreSQL на одном сервере отстаёт, хотя железо такое же, как у соседнего.
- Дамп базы с Astra не восстанавливается на обычный PostgreSQL.
Почему так
Astra Linux и РЕД ОС построены на знакомых основах: Astra на Debian, РЕД ОС на семействе RHEL. Отличия появляются там, ради чего их выбирают: сертификация и встроенные механизмы защиты. Эти механизмы включены по умолчанию или включаются требованием безопасности заказчика, и инструкции, написанные для Ubuntu, о них ничего не знают.
Docker и репозитории
Directum RX на Linux работает в контейнерах, поэтому первым делом нужен Docker. По справке вендора:
| ОС | Пакет | Команда |
|---|---|---|
| Astra Linux SE 1.7.4+ и 1.8.1+ | docker.io из репозитория Astra |
sudo apt install docker.io |
| РЕД ОС 7.3 и 8.0 | docker-ce из репозитория РЕД ОС |
sudo dnf install docker-ce docker-ce-cli |
Версию Docker сверяйте с документом «Типовые требования к аппаратному и программному обеспечению» из комплекта поставки вашей версии RX. Ставить Docker со сторонних сайтов на сертифицированную ОС, как правило, не позволит безопасность заказчика, да и смысл сертифицированной сборки при этом теряется.
Если на РЕД ОС или Альт Сервер будут работать сервисы Directum Ario, вендор требует "live-restore": false
в /etc/docker/daemon.json.
Репозитории в закрытом контуре. Серверы RX обычно без интернета, поэтому нужно локальное зеркало
репозиториев ОС: основного, расширенного и обновлений безопасности. Доступ к репозиториям Astra привязан
к лицензии, и часть из них без неё закрыта. Заранее пройдитесь по списку пакетов, которые понадобятся
вокруг RX: агенты мониторинга, клиенты резервного копирования, утилиты. Часть привычного по Debian может
отсутствовать: например, autossh нет ни в основном, ни в расширенном репозитории Astra 1.8.
Astra Linux
Мандатный контроль целостности: sudo не помогает
В режимах «Воронеж» и «Смоленск» есть мандатный контроль целостности (МКЦ), и обычно он включён. У каждого процесса есть уровень
целостности, и системные файлы может менять только процесс с высоким уровнем. Уровень берётся от сессии,
в которой вошёл пользователь, и sudo его не повышает. Отсюда классическая картина: администратор вошёл
обычной учётной записью, выполняет sudo и получает отказ там, где на Debian всё работало.
Проверить до начала работ:
astra-mic-control status # ACTIVE, если МКЦ включён
pdp-id # уровень текущей сессии: ILevel=0 низкий, 63 высокий
Установку и обслуживание ведут из сессии администратора (группа astra-admin), вошедшего с высоким уровнем
целостности. Если подрядчик работает удалённо, это надо согласовать заранее: учётная запись с высоким уровнем
обычно выдаётся по отдельной заявке. Сценарии установки, которые сами себя проверяют, стоит научить смотреть
pdp-id и останавливаться с понятным сообщением, а не падать на середине.
Замкнутая программная среда
Если безопасность включила замкнутую программную среду (ЗПС), система запускает только исполняемые файлы с доверенной цифровой подписью. Всё, что ставится не из репозитория Astra, попадает под это ограничение: агенты мониторинга, утилиты резервного копирования, сторонние бинарники. Список такого ПО согласуйте до установки: в день запуска договариваться поздно.
secdel на разделах с данными
В Astra есть параметр монтирования secdel: при удалении и усечении файла освобождаемые блоки затираются.
Для пользовательских каталогов это разумная мера. На разделе с данными PostgreSQL каждое удаление сегмента
журнала превращается в синхронную запись, и реплика начинает отставать без видимой причины. Подробно сценарий
разобран в статье про рост pg_wal. Проверка:
findmnt -no TARGET,OPTIONS | grep secdel
Параметры монтирования должны совпадать на всех узлах кластера. Расхождение между узлами и даёт картину «одна реплика отстаёт, а другая нет».
PostgreSQL из состава Astra: метки в дампах
В Astra есть своя сборка PostgreSQL с поддержкой мандатных меток. Дамп из неё содержит команды, которых обычный
PostgreSQL не знает: MAC LABEL ON ..., MAC CCR ON ... и параметр таблиц WITH (MACS=FALSE). Ключ
pg_dump --no-security-labels их не убирает. Восстановление такого дампа на обычный PostgreSQL, например
при переезде на другую СУБД или при разборе копии у себя, падает на первой же команде.
Проверить, есть ли такие таблицы, можно до выгрузки:
SELECT count(*) FROM pg_class WHERE reloptions::text ILIKE '%macs%';
Если метки не нужны на новом месте, их вычищают из текстового дампа: удаляют строки MAC LABEL ON и MAC CCR ON
и параметр MACS в WITH. Делать это надо только в описании объектов и не трогать блоки данных COPY,
иначе можно повредить строки, где эти слова встречаются в данных. Проверять результат стоит восстановлением
на тестовый сервер и сравнением числа строк в таблицах.
Автоматизация: Ansible не считает Astra Debian'ом
Astra Linux определяется в Ansible как отдельный дистрибутив (ID=astra в /etc/os-release). В версиях, с которыми
мы работали, ansible_os_family для неё не равен Debian. Любое условие when: ansible_os_family == 'Debian'
на Astra молча пропускает задачу: сценарий завершается без ошибок, а нужные шаги не выполнены. Мы ловили так
пропущенную генерацию локалей (дальше initdb падал с No suitable locale found) и пропущенную установку
Python-зависимостей. Перед первым запуском на Astra стоит найти в своих ролях все условия на семейство ОС
и явно добавить в них Astra.
Ещё одна мелочь для тестовых стендов. systemd в Astra без модуля мандатного контроля завершается при старте
с сообщением parsec module missing, terminating to prevent data leakage. Поэтому образ Astra в контейнере
для проверки ролей не загрузится так же просто, как образ Debian.
РЕД ОС
SELinux: файл на месте, служба не запускается
В РЕД ОС работает SELinux, и обычно в режиме enforcing. У каждого файла есть метка контекста, и systemd
откажется запускать программу с неподходящей меткой. Типичный путь к ошибке: архив распаковали в /tmp или
домашний каталог, а потом перенесли в /opt командой mv. При переносе файл сохраняет старую метку, служба
падает с 203/EXEC, а права и путь при этом верные.
getenforce # Enforcing, Permissive или Disabled
ls -Z /opt/app/bin/ # метки файлов
ausearch -m avc -ts recent # что SELinux запретил за последние минуты
Исправление:
restorecon -Rv /opt/app # вернуть метки по правилам системы
# если программе нужна метка исполняемого файла, закрепить правило и применить его:
semanage fcontext -a -t bin_t '/opt/app/bin(/.*)?'
restorecon -Rv /opt/app/bin
chcon меняет метку сразу, но до первого restorecon. Правило через semanage переживает переразметку
файловой системы. Сама команда semanage входит в пакет policycoreutils-python-utils, на минимальной
установке его может не быть.
Каталоги, которые монтируются в контейнеры, тоже должны иметь подходящую метку. В Podman, а в Docker при
включённой поддержке SELinux, для этого к тому дописывают :Z (каталог одного контейнера) или :z (общий
для нескольких).
firewalld
На серверных установках РЕД ОС часто включён firewalld, и порты, которые на Debian были доступны сразу, здесь закрыты.
firewall-cmd --state
firewall-cmd --list-all
firewall-cmd --permanent --add-port=9100/tcp && firewall-cmd --reload
Обратная ловушка: порты, которые публикует Docker, открываются его собственными правилами, и обычным правилом
firewalld такой порт не закрыть. Ограничивать доступ к ним нужно в цепочке DOCKER-USER или не публиковать
порт наружу вовсе. Доступность проверяйте с другой машины, а не по списку правил.
Podman вместо Docker
RX по документации ставится на Docker. Но в компаниях, которые уходят на Podman, рядом с RX оказываются
сервисы на Podman: мониторинг, прокси, вспомогательные утилиты. Отличия, которые всплывают первыми:
podman compose и podman-compose понимают не все возможности Docker Compose, а контейнер без прав root не может
слушать порты ниже 1024. Ещё в наших проверках Podman выдавал пересозданному контейнеру новый адрес, и nginx,
запомнивший старый адрес при старте, начинал отвечать ошибкой 502, пока его не перезапустили.
Общее для обеих систем
- Время. Синхронизация с внутренним NTP настраивается до установки. При расхождении часов ломается вход по Kerberos (Clock skew too great), а журналы разных серверов не сходятся по времени.
- Отдельные диски. Данные PostgreSQL, хранилище файлов, журналы и данные Docker лучше держать на разных разделах. Переполнение журналов тогда не останавливает базу.
- Требования к версиям. Docker, PostgreSQL и Elasticsearch сверяются с «Типовыми требованиями» именно вашей версии RX. Сертифицированные ОС часто отстают по версиям пакетов от Ubuntu.
Чек-лист до начала работ
| Что проверить | Astra Linux | РЕД ОС |
|---|---|---|
| Зеркало репозиториев в контуре и нужные пакеты | ✓ | ✓ |
| Версия Docker по «Типовым требованиям» | docker.io |
docker-ce |
| Учётная запись с высоким уровнем целостности | ✓ | не нужно |
| ЗПС: список стороннего ПО согласован | ✓ | не нужно |
secdel на разделах с данными |
✓ | не нужно |
| Режим SELinux и метки каталогов приложений | не нужно | ✓ |
| firewalld: открытые порты | не нужно | ✓ |
| NTP, локали, отдельные диски | ✓ | ✓ |
| Условия на семейство ОС в Ansible | ✓ | ✓ |
Чего не делать
- Не отключать МКЦ или SELinux, «чтобы заработало». Для заказчика с требованием сертифицированной ОС это нарушение условий эксплуатации, и при проверке ИБ его найдут. Ошибку надо понять и исправить меткой или правилом.
- Не ставить Docker и пакеты из интернета в обход репозиториев ОС. Сертифицированная система с несертифицированными компонентами вызовет вопросы у безопасности.
- Не переносить приложения командой
mvиз временных каталогов на РЕД ОС. Копируйте или распаковывайте сразу на место, а после переноса делайтеrestorecon. - Не верить «зелёному» прогону Ansible на новой ОС. Проверьте, сколько задач было пропущено и почему.
Похожая картина у вас?
Разберём ваш контур за 30 минут бесплатного созвона: версия RX, состав сервисов, что болит сильнее всего.
Написать