Astra linux parsec настройка

Обновлено: 01.07.2024

start-stop-parsec-daemon это пропатченная версия обычного start-stop-daemon для Astra Linux Special Edition. В отличии от стандартной версии умеет запускать процессы с привилегиями и мандатной меткой PARSEC под любым пользователем.

Обновление 11 сентября 2015: start-stop-parsec-daemon версии 0.1 вошёл в состав Astra Linux Special Edition 1.5.

Как и оригинальное ПО, распространяется на условиях стандартной общественной лицензии GNU (GPL) версии 2.

Полный текст лиценции находится в файле COPYING.

Для чего это нужно

Штатные возможности Astra Linux Special Edition не позволяют запускать процессы со сменой UID/GID и при этом ставить привилегии PARSEC. Невозможно, например, запускать немодифицированные программы с привилегией PRIVSOCK (возможность подключения пользователей с ненулевой мандатной меткой) с UID/GID отличными от 0 (root).

Столь плачевное положение возможно имеет причиной: а) забывчивость Русбитеха; б) вера в то, что все привилегированные процессы должны запускаться от рута. Как бы то ни было, вся обвязка связанная с запуском процессов с привилегиями PARSEC, полна тлена и баш-скриптов и порой приводит к потере работоспособности скриптов запуска.

Посему мы это все решили прекратить и сделать свой start-stop-daemon с PARSEC привилегиями и мандатными метками, но без скриптов.

Как это работает

Пакет устанавливает команду start-stop-parsec-daemon , полностью совместимую со штатным start-stop-daemon , но позволяющую указывать:

  • привилегии PARSEC с помощью параметра --capability ( -l );
  • мандатную метку с помощью параметра --mac ( -M );

Для совместимости со штатным механизмом Астры privsock, если указана привилегия 0x100 (PRIVSOCK), то команда дополнительно сверяется с файлом /etc/parsec/privsock.conf на предмет наличия запускаемого бинарника в оном списке.

В остальном, все как обычно.

Как это всё прикрутить к собственному проекту?

Добавьте в зависимости вашего пакета с init.d скриптом наш пакет (parsec-daemon).

В скрипте используйте start-stop-parsec-daemon вместо start-stop-daemon .

Укажите привилегии и/или метки с помощью параметров.

Рекомендация: если вы хотите таким образом адаптировать сторонние пакеты, то наилучшим способом будет создание пакета <пакет>-parsec, в котором будет правильный LSB скрипт запуска. А postints/postrm скрипты будут отключать стандартный демон и работать с /etc/parsec/privsock.conf .

Конкретного примера не будет, смотрите нашу обвязку RabbitMQ.

Project Statistics

Sourcerank 3
Repository Size 154 KB
Stars 0
Forks 3
Watchers 3
Open issues 0
Dependencies 0
Contributors 2
Tags 1
Created Feb 4, 2015
Last updated May 18, 2019
Last pushed Jul 10, 2018

Top Contributors See all

Recent Tags See all

Something wrong with this page? Make a suggestion

Last synced: 2019-05-18 07:37:40 UTC

Login to resync this repository

Libraries.io helps you find new open source packages, modules and frameworks and keep track of ones you depend upon.

Copyright © 2021 Tidelift, Inc
Code is Open Source under AGPLv3 license
Data is available under CC-BY-SA 4.0 license

PARSEC-привилегии так же, как и Linux-привилегии, наследуются процессами от своих «родителей». Процессы, запущенные от имени суперпользователя, имеющего максимальный («Высокий») уровень целостности по умолчанию, независимо от явного назначения им привилегий, имеют возможность осуществлять большинство привилегированных действий.

Для настройки КСЗ могут использоваться как PARSEC-, так и Linux-привилегии.

Данная статья применима к:

Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)

Astra Linux Special Edition РУСБ.10015-16 исп. 1

Astra Linux Special Edition РУСБ.10015-16 исп. 2

Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)

PARSEC-привилегии и их описание приведены в таблице:

Позволяет управлять политикой аудита.

Позволяет игнорировать ограничения киоска.

Позволяет процессу устанавливать любой непротиворечивый набор привилегий для себя.

Позволяет изменять метки безопасности файловых объектов.

Не используется.
Для изменения меток безопасности файловых объектов см. привилегию PARSEC_CAP_CHMAC.
Для изменения меток безопасности процессов см. PARSEC_CAP_SETMAC.
Для изменения привилегий процессов см. PARSEC_CAP_CAP.

Позволяет игнорировать мандатную политику по категориям доступа.
См. также PARSEC_CAP_IGNMACLVL и PARSEC_CAP_IGNMACINT.

Позволяет игнорировать мандатную политику по уровням целостности.
См. также PARSEC_CAP_IGNMACCAT, PARSEC_CAP_IGNMACLVL, PARSEC_CAP_INHERIT_INTEGRITY.

Позволяет игнорировать мандатную политику по уровням конфиденциальности.
См. также PARSEC_CAP_IGNMACCAT и PARSEC_CAP_IGNMACINT.

При создании файловых объектов на них автоматически устанавливается максимально возможная целостность,
однако не выше, чем целостность процесса-создателя и целостность контейнера, в котором создается файловый объект. Используется для установщика пакетов (dpkg).
См. также PARSEC_CAP_IGNMACINT.

Отменяет мандатные ограничения при работе с сущностями IPC, такими как shared memory, message queue и т.д.
(Parsec-аналог Linux-привилегии CAP_IPC_OWNER.)

Позволяет изменять метки безопасности точек соединения (UNIX-сокетов).
Для сетевых сокетов см. PARSEC_CAP_PRIV_SOCK.

Позволяет создавать новые сетевые сокеты процесса в привилегированном режиме (метка ehole).
Привилегированный сокет позволяет осуществлять сетевое взаимодействие, игнорируя мандатную политику.
Для точек соединения (UNIX-сокетов) см. PARSEC_CAP_MAC_SOCK.

Позволяет игнорировать мандатную политику при чтении и поиске файловых объектов (но не при записи).

Позволяет изменять метку безопасности процессов. Привилегия не позволяет процессу повышать уровень целостности другого процесса, а только понижать.
Для изменения меток безопасности файловых объектов см. PARSEC_CAP_CHMAC.
Для изменения привилегий процессов см. PARSEC_CAP_CAP.

Позволяет посылать сигналы процессам, игнорируя мандатные права.

Позволяет запускать процессы с другой классификационной меткой (с другим иерархическим уровнем конфиденциальности и другими неиерархическими категориями доступа).

Позволяет устанавливать мандатные атрибуты объектов файловой системы без учета мандатных атрибутов родительского объекта-контейнера. Привилегия используется для восстановления объектов файловой системы из резервных копий и только после установки значения «1» для параметра /parsecfs/unsecure_setxattr.

Выложена в открытый доступ утилита start-stop-parsec-daemon, пропатченная версия обычного start-stop-daemon для Astra Linux Special Edition. В отличии от стандартной версии умеет запускать процессы с привилегиями PARSEC под любым пользователем.

Зачем нужна?

Штатные возможности Astra Linux Special Edition не позволяют запускать процессы (демоны) со сменой UID/GID и при этом ставить привилегии PARSEC. Невозможно, например, запускать немодифицированные программы с привилегией PRIVSOCK (возможность подключения пользователей с ненулевой мандатной меткой) с UID/GID отличными от 0 (root).

Столь плачевное положение возможно имеет причиной: а) забывчивость Русбитеха; б) вера в то, что все привилегированные процессы должны запускаться от рута. Как бы то ни было, вся обвязка связанная с запуском процессов с привилегиями PARSEC, полна тлена и баш-скриптов и порой приводит к потере работоспособности скриптов запуска.

Посему мы это все решили прекратить и сделать свой start-stop-daemon с PARSEC привилегиями, но без скриптов.

Как это работает

Пакет устанавливает команду start-stop-parsec-daemon , полностью совместимую со штатным start-stop-daemon , но позволяющую указывать привилегии PARSEC с помощью параметра --capability . Для совместимости со штатным механизмом Астры privsock, если указана привилегия 0x100 (PRIVSOCK), то команда дополнительно сверяется с файлом /etc/parsec/privsock.conf на предмет наличия запускаемого бинарника в оном списке.

В остальном, все как обычно.

Как это всё прикрутить к собственному проекту?

  1. Добавьте в зависимости вашего пакета с init. d скриптом наш пакет (parsec-daemon).
  2. В скрипте используйте start-stop-parsec-daemon вместо start-stop-daemon .
  3. Укажите привилегии с помощью параметра --capability .

Пакеты можно собрать самостоятельно из исходников, а можно взять готовые для Astra Linux Special Edition 1.3/1.4 из нашего репозитория.

Рекомендация: если вы хотите таким образом адаптировать сторонние пакеты, то наилучшим способом будет создание пакета <пакет>-parsec , в котором будет правильный LSB скрипт запуска. А postints/postrm скрипты будут отключать стандартный демон и работать с /etc/parsec/privsock.conf .

Пример

Конкретного примера не будет, смотрите нашу обвязку для RabbitMQ.

Наша версия start-stop-daemon войдет в версию 1.5 Astra Linux Special Edition.

Похожие статьи

Astra Linux Special Edition 1.7: цены

Astra Linux Special Edition 1.7: цены

22 октября вышла новая версия 1.7 ОС СН Astra Linux Special Edition. Сейчас рассмотрим цены и условия лицензирования. (далее…)

Astra Linux Special Edition 1.7: лицензирование и сертификация, защита

Astra Linux Special Edition 1.7: лицензирование и сертификация, защита

22 октября вышла версия 1.7 отечественной операционной системы Astra Linux Special Edition. В этой статье рассмотрим изменения в схеме лицензирования, сертификации и сделаем обзор новинок защиты. Обзор состава новой версии.

Astra Linux Special Edition 1.7: состав

Astra Linux Special Edition 1.7: состав

Astra Linux Special Edition 1.7 22 октября 2021 года вышла новая версия дистрибутива Astra Linux Special Edition 1.7. Основные новинки сосредоточены вокруг нового уровня сертификации, новой схемы лицензирования и расширения.

2 Comments

Спасибо большое за Ваш пакет!

Господа, а вот скажите мне как художник художнику.

Нужно мне использовать астровский apache (1.5 Смоленск) как frontend (или reverse proxy) к сервису, работающему на другом хосте.
Причем, apache работает в среде ALD с набором мандатных меток, а сервис — вообще вне мандатного контекста.

При этом web-юзеры работают в ALD и заходят с различными мандатными метками.
Если метка ненулевая, имеем Service unavailable. То есть apache не может достучаться до backend.
С нулевой меткой все работает.

Прописывал apache в privsock, запускал его через execaps -c 0×100.
Проверял эффективные capabilities через pscaps — все выставляется правильно.

Но с ненулевыми мандатными метками — не работает.

Предполагаю багу. Но все же есть еще надежда на мою криворукость.
Need help.


  • По умолчанию, после установки ОС:
    • включен режим МКЦ ОС:
      • установлен параметр ядра `max_ilev = 63`
      • все процессы, начиная от init до менеджера входа fly-dm, имеют уровень целостности 63 (если в конфигурации юнита явно не указано иное).
      • Графический сервер Xorg по умолчанию работает не от имени суперпользователя root (uid 0), а от пользователя, и работает на выделенном уровне МКЦ 8.

      • Администратор, созданный при установке ОС, получает 63-й «красный» уровень МКЦ,
      • Пользователи получают нулевой «синий» уровень МКЦ
      • Администраторы из группы astra-admin автоматически получают 63-й «красный» уровень МКЦ
      • Пользователи получают нулевой «синий» уровень МКЦ.

      для сетевых сервисов: - 1

      для подсистем виртуализации (для гостевых систем, отличных от ОССН Смоленск и контейнеров LXC на нулевом уровне): 2,

      для внешнего СПО: 4

        X-сервер в общем случае (если есть поддержка KMS в ядре) по умолчанию работает от имени пользователя fly-dm под выделенным уровнем МКЦ 8.

      • На контейнеры (каталоги) больше нельзя устанавливать флаги ehole.
        Допускается только установка флагов

      Можно использовать псевдоним CCNRA (соответствует одновременно установленным флагам ccnr и ccnri).

      • Флаг ehole доступен, как и ранее, для установки на файлах, и, дополнительно, введен новый флаг

      дающий разрешение записывать в файл «снизу вверх» (чтение по обычным правилам МРД).
      Новый флаг whole также нельзя устанавливать на контейнерах.

      • Запись в каталог с высокой целостностью и установленным флагом ccnri
        не может быть выполнена процессом с более низким уровнем целостности чем у контейнера (каталога).
      • Пользователь не может производить запись в контейнер (каталог)
        с установленным больше нуля уровнем МКЦ и с установленным флагом ccnri,
        если он не вошел в систему на уровне МКЦ равном или большем уровню МКЦ контейнера,
        или не обладает привилегией parsec_cap_ignmacint.
      • Пользователь не может производить запись в контейнер (каталог)
        с установленной (ненулевой) меткой конфиденциальности и с установленным флагом ccnr
        информации, отличной от уровня конфиденциальности контейнера,
        если он не зашел под уровнем конфиденциальности равным уровню конфиденциальности контейнера (каталога),
        или не обладает привилегиями parsec_cap_ignmaccat и parsec_cap_ignmaclvl.
      • Eсли в загрузчике указать параметр ядра

      то непривилегированный пользователь получит возможность производить запись файлов с разным уровнем конфиденциальности в контейнер (каталог) с установленным флагом ccnr.

      • Сравнение уровней целостности проводится по битовой маске:

      запись в объект (или остановка процесса или юнита) разрешена,
      если набор бит уровня МКЦ субъекта
      "включает" в себя (операция сравнения &) набор бит уровня МКЦ объекта.

      • В системе определен набор из восьми ненулевых изолированных уровней МКЦ:

      000 0b00000000 - Нулевой уровень. "Низкий", или "Low"
      001 0b00000001 - Уровень задействован как "Сетевые сервисы"
      002 0b00000010 - Уровень задействован как "Виртуализация"
      004 0b00000100 - Уровень задействован как "Специальное ПО"
      008 0b00001000 - Уровень задействован как "Графический сервер"
      016 0b00010000 - Свободен, может быть использован для сетевых сервисов.
      032 0b00100000 - Свободен, может быть использован для сетевых сервисов.
      064 0b01000000 - Зарезервирован, и может быть использован при поднятии max_ilev.
      128 0b10000000 - Зарезервирован, и может быть использован при поднятии max_ilev.

      • Уровень МКЦ после установки контроля целостности на ФС по умолчанию будет равен 63 (0b00111111), и запись в объекты ФС возможна только для процессов с уровнями

      63 0b00111111
      127 0b01111111
      191 0b10111111
      255 0b11111111

      • Механизм одновременной работы с разными уровнями sumac теперь доступен только для тех пользователей,
        которым задана привилегия parsec_cap_sumac.

      • В ОС реализована возможность назначения уровня целостности и конфиденциальности для systmed-служб.
        Для этого в unit-файле службы <name>.service нужно добавить параметр PDPLabel с нужной мандатной меткой в разделе [Service] :

      Формат метки аналогичен принятому в системе Parsec (pdpl-file --help) , за исключением поля типа метки: метка процесса не может иметь флагов ccnr/ccnri/ehole/whole .

      При этом, при задании уровней мандатных привилегий рекомендуется использовать числовые обозначения,
      так как при разрешении имён могут оказаться задействованы сетевые ресурсы (например, LDAP-каталоги),
      что может приводить к сложно диагностируемым ошибкам конфигурации.

      После редактирования unit-файла вызовите:

      systemctl daemon-reload; systemctl restart <name>.service

      Для проверки реально полученной метки процесса определите pid процесса:

      systemctl status <name>.service

      и по определённому pid процесса узнайте метку

      • Добавлена Parsec-привилегия PARSEC_CAP_SUMAC , позволяющая запускать процессы другим уровнем конфиденциальности.

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

        Привилегия PARSEC_CAP_UNSAFE_SETXATTR , позволяющая устанавливать мандатные атрибуты объектов ФС без учета мандатных атрибутов родительского объекта-контейнера.
        Привилегия используется для восстановления объектов ФС из резервных копий, и действует только после установки значения 1 для параметра /parsecfs/unsecure_setxattr

      Читайте также: