Проблема
Использование Astra Linux Special Edition в информационных системах персональных данных (ИСПДн), государственных информационных системах (ГИС) и на объектах критической информационной инфраструктуры (КИИ) накладывает на системного администратора жёсткие требования по применению встроенных механизмов защиты. Недостаточно просто развернуть домен ALD и настроить дискреционный доступ. Регуляторы (ФСТЭК, ФСБ) требуют обязательного применения мандатного контроля целостности (МКЦ) и, для высоких классов защищённости, функционирования в режиме замкнутой программной среды (ЗПС). Проблема в том, что включение этих механизмов без должной подготовки может сделать систему неработоспособной. Неподписанные бинарники перестанут запускаться. Неверно назначенные мандатные метки заблокируют доступ к критичным файлам. Неразбериха с уровнями секретности парализует рабочие процессы. Администрирование Astra Linux в защищённом исполнении требует методичного подхода, который мы и разберём в этой статье.
Решение
Настроим МКЦ для разграничения доступа по уровням и категориям. Затем включим замкнутую программную среду с подписью исполняемых файлов. Все операции выполним штатными утилитами Astra Linux: parsec, astra-mkctrl, zps, pdp, опираясь на официальную документацию из комплекта поставки ОС и технические руководства разработчика. Алгоритм построен для Astra Linux Special Edition 1.7 (Смоленск) и применим как для серверов, так и для рабочих станций. Последовательность важна. Сначала настраиваем метки и убеждаемся в работоспособности, затем включаем ЗПС. Иначе подписание файлов может быть заблокировано неверными уровнями целостности.
Пошаговая инструкция
Шаг 1. Проверка текущего режима работы и установленных пакетов
Убедитесь, что система работает с ядром, поддерживающим модуль Parsec (Parsec Privileged Access Management).
text
uname -r
# Вывод должен содержать суффикс 'parsec' или 'hardened'
dpkg -l | grep parsec
# Если пакет отсутствует, установите:
sudo apt install parsec parsec-tests -y
Проверьте статус сервисов.
text
sudo systemctl status parsec
Служба должна быть активна и запущена. Без неё МКЦ не функционирует.
Шаг 2. Настройка мандатных меток: уровни и категории
Мандатный контроль в Astra Linux оперирует иерархическими уровнями и неиерархическими категориями. Уровни нумеруются от 0 до 255 (где меньше соответствует ниже). Категории задаются битовой маской. Комбинация уровня и категории определяет метку субъекта (пользователя) и объекта (файла). Основное правило. Субъект может читать объект только если его уровень не ниже уровня объекта, а категории субъекта включают категории объекта (доминирование).
Создадим две метки. «Низкая (0)» и «Высокая (2)», и применим их.
text
# Просмотр текущих меток пользователей
cat /etc/parsec/user
# Назначим пользователю jdoe низкую метку (уровень 0, категорий нет)
sudo usermod -Z "0:" jdoe
# Создадим тестовый каталог и файлы для проверки
sudo mkdir -p /data/low /data/high
echo "Low integrity" | sudo tee /data/low/low.txt
echo "High integrity" | sudo tee /data/high/high.txt
# Установим низкую метку на /data/low (уровень 0)
sudo setfparsec -l 0 /data/low/low.txt
# Установим высокую метку на /data/high (уровень 2)
sudo setfparsec -l 2 /data/high/high.txt
Проверим, что пользователь с низким уровнем не может прочитать высокий файл.
text
# Переключимся в сессию пользователя jdoe (или выполним su - jdoe)
su - jdoe
cat /data/low/low.txt # Должен прочитать
cat /data/high/high.txt # Должен получить "Permission denied"
Для настройки категорий используется параметр -c <маска>. Например, метка «Уровень 1, категории 0x03».
text
sudo setfparsec -l 1 -c 3 /data/shared/file.txt
Подробное описание синтаксиса меток приведено в руководстве Parsec Administration Guide.
Шаг 3. Настройка мандатного контроля целостности для системных служб
Чтобы системные демоны (веб-сервер, СУБД) могли работать с файлами, имеющими разные уровни, необходимо настроить их собственные метки.
text
# Пример для PostgreSQL. Задаём метку пользователю postgres (уровень 2, все категории)
sudo usermod -Z "2:0-63" postgres
# Проверяем метку пользователя
sudo pdp -u postgres
После изменения меток пользователей рекомендуется перезагрузить сервисы, чтобы они подхватили новый контекст.
Шаг 4. Включение замкнутой программной среды (ЗПС)
Замкнутая программная среда предотвращает запуск программ, не прошедших проверку целостности или не подписанных администратором. В основе лежит модуль ядра zps.
Установите пакеты.
text
sudo apt install zps zps-utils -y
Включите замкнутую среду в режиме проверки (режим «обучения»).
text
sudo zps-enable -m permissive
В этом режиме запуск неподписанных файлов будет разрешён, но информация о них запишется в журнал. Проанализируйте лог.
text
sudo journalctl -u zps -f
Через некоторое время, когда вы убедитесь, что все легитимные программы проходят проверку, переключитесь в режим «принудительный».
text
sudo zps-enable -m enforcing
Теперь попытка запустить неподписанный бинарный файл приведёт к отказу в выполнении.
Шаг 5. Подпись исполняемых файлов
Подпись производится утилитой zps-sign. Используйте ключ администратора (/etc/zps/admin.key), который создаётся при установке ZPS.
text
# Подписать один файл
sudo zps-sign /usr/local/bin/my_script.sh
# Рекурсивно подписать все файлы в каталоге
sudo zps-sign -r /opt/myapp/
# Проверить подпись файла
sudo zps-check /usr/local/bin/my_script.sh
Для автоматической подписи файлов, установленных из пакетов, используйте интеграцию с APT. В Astra Linux стандартные репозиторные пакеты уже подписаны. Проблемы возникают, как правило, с самописными скриптами и сторонним софтом, скачанным не из репозиториев Astra.
Шаг 6. Проверка целостности системы под ЗПС
После переключения в enforcing режим выполните тест.
text
# Создайте простой скрипт без подписи
echo "#!/bin/bash" > /tmp/test.sh
echo "echo 'Should not run'" >> /tmp/test.sh
chmod +x /tmp/test.sh
# Попробуйте выполнить
/tmp/test.sh
# Результат: Permission denied (даже если права доступа 755)
Устранение распространённых проблем
СимптомВероятная причинаРешениеПосле включения ЗПС система не загружается или зависаетКритически важный системный файл не подписан (например, обновлённый initramfs после обновления ядра)Загрузитесь в recovery режиме, добавьте в параметры ядра zps=permissive или zps=off. Выполните sudo zps-sign -r /boot, затем обновите initramfs: sudo update-initramfs -u.Пользователь не может прочитать файл, хотя его метка доминирует над меткой файлаКатегории не включены. Метка пользователя «2:», файла «2:0». Пустая категория доминирует над любой? (особенность Parsec)Уточните политику. В Astra Linux доминирование по категориям требует, чтобы пользователь имел не меньший набор (надмножество). Пустая категория не доминирует над ненулевой. Явно задайте категории через sudo usermod -Z "2:0-63".После usermod -Z пользователь не может войти в систему (ошибка PAM)Метка пользователя не согласована с меткой его домашней директорииПроверьте метку домашнего каталога: sudo getfparsec /home/jdoe. Приведите метку каталога в соответствие с меткой пользователя: sudo setfparsec -l X -c Y /home/jdoe, где X и Y из метки пользователя.При попытке подписать файл zps-sign выдаёт ошибку «Signing key not found»Отсутствует административный ключ ZPSСгенерируйте ключ: sudo zps-genkey -a. Ключ сохранится в /etc/zps/admin.key и /etc/zps/admin.crt.В режиме permissive журнал ZPS заполнен, но неясно, какие файлы нужно подписатьСлишком много записей, фильтрация не настроенаВыполните sudo zps-stat для агрегированной статистики неподписанных запусков. Используйте sudo zps-sign -r для каталогов с наибольшим количеством срабатываний.
Администрирование Astra Linux в части мандатного доступа и замкнутой программной среды это не разовая акция, а непрерывный процесс поддержания системы в защищённом состоянии. Включение МКЦ и ЗПС, выполненное по описанной методике, позволяет пройти процедуру оценки соответствия (аттестации) без замечаний и гарантирует защиту от модификации исполняемых файлов и несанкционированного доступа к конфиденциальным данным. Рекомендуется документировать все назначенные метки в виде таблицы и регулярно проверять целостность подписанных файлов с помощью zps-check в планировщике задач. После освоения базовых механизмов следующим шагом может стать настройка мандатного контроля в домене ALD и разграничение прав на основе меток в политиках SSSD.