Запуск процессов с привилегиями PARSEC
Выложена в открытый доступ утилита 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 на предмет наличия запускаемого бинарника в оном списке.
В остальном, все как обычно.
Как это всё прикрутить к собственному проекту?
- Добавьте в зависимости вашего пакета с init.d скриптом наш пакет (parsec-daemon).
- В скрипте используйте start-stop-parsec-daemon вместо start-stop-daemon .
- Укажите привилегии с помощью параметра —capability .
Пакеты можно собрать самостоятельно из исходников, а можно взять готовые для Astra Linux Special Edition 1.3/1.4 из нашего репозитория.
Рекомендация: если вы хотите таким образом адаптировать сторонние пакеты, то наилучшим способом будет создание пакета -parsec , в котором будет правильный LSB скрипт запуска. А postints/postrm скрипты будут отключать стандартный демон и работать с /etc/parsec/privsock.conf .
Пример
Конкретного примера не будет, смотрите нашу обвязку для RabbitMQ.
P.S. Наша версия start-stop-daemon войдет в версию 1.5 Astra Linux Special Edition.
Parsec привилегии astra linux
Привилегии PARSEC, так же, как и привилегии Linux, наследуются процессами от своих «родителей». Процессы, запущенные от имени суперпользователя, имеющего максимальный («Высокий») уровень целостности по умолчанию, независимо от явного назначения им привилегий, имеют возможность осуществлять большинство привилегированных действий.
Для настройки КСЗ могут использоваться как PARSEC-, так и Linux-привилегии.
PARSEC_CAP_AUDIT
0x00002 — Позволяет управлять политикой аудита.
PARSEC_CAP_BYPASS_KIOSK
0x08000 — Parsec 2.5.257 и выше. Позволяет игнорировать ограничения киоска. В Astra Linux Special Edition очередное обновление x.7 не используется.
PARSEC_CAP_BYPASS_XATTR
0x40000 — Позволяет процессу игнорировать подписи файлов.
Реализована в Astra Linux Special Edition очередное обновление x.7.
PARSEC_CAP_CAP
0x00400 — Позволяет процессу устанавливать любой непротиворечивый набор привилегий для себя.
PARSEC_CAP_CHMAC
0x00008 — Позволяет изменять метки безопасности файловых объектов.
PARSEC_CAP_FILE_CAP
0x00001 — Не используется.
Для изменения меток безопасности файловых объектов см. привилегию PARSEC_CAP_CHMAC.
Для изменения меток безопасности процессов см. PARSEC_CAP_SETMAC.
Для изменения привилегий процессов см. PARSEC_CAP_CAP.
PARSEC_CAP_IGNMACCAT
0x00020 — Позволяет игнорировать мандатную политику по неиерархическим категориям конфиденциальности.
См. также PARSEC_CAP_IGNMACLVL и PARSEC_CAP_IGNMACINT.
PARSEC_CAP_IGNMACINT
0x02000 — Позволяет игнорировать мандатную политику по уровням целостности.
См. также PARSEC_CAP_IGNMACCAT, PARSEC_CAP_IGNMACLVL, PARSEC_CAP_INHERIT_INTEGRITY.
PARSEC_CAP_IGNMACLVL
0x00010 — Позволяет игнорировать мандатную политику по иерархическим уровням конфиденциальности.
См. также PARSEC_CAP_IGNMACCAT и PARSEC_CAP_IGNMACINT.
PARSEC_CAP_INHERIT_INTEGRITY
0x20000 — При создании файловых объектов на них автоматически устанавливается максимально возможная целостность, однако не выше, чем целостность процесса-создателя и целостность контейнера, в котором создается файловый объект. Используется для установщика пакетов (dpkg).
См. также PARSEC_CAP_IGNMACINT.
PARSEC_CAP_IPC_OWNER
0x10000 — БЮЛЛЕТЕНЬ № 20181229SE16 (оперативное обновление 1), Parsec 2.5.265 и выше. Отменяет мандатные ограничения при работе с сущностями IPC, такими как shared memory, message queue и т.д. (Parsec-аналог Linux-привилегии CAP_IPC_OWNER).
PARSEC_CAP_MAC_SOCK
0x00800 — Позволяет изменять метки безопасности точек соединения (UNIX-сокетов).
Для сетевых сокетов см. PARSEC_CAP_PRIV_SOCK.
PARSEC_CAP_PRIV_SOCK
0x00100 — Позволяет создавать новые сетевые сокеты процесса в привилегированном режиме (метка ehole).
Привилегированный сокет позволяет осуществлять сетевое взаимодействие, игнорируя мандатную политику.
Для точек соединения (UNIX-сокетов) см. PARSEC_CAP_MAC_SOCK.
PARSEC_CAP_PROCFS
0x80000 — Позволяет игнорировать ограничения МРД и МКЦ на файловой системе /proc. Используется для систем контейнеризации и виртуализации. Реализована в Astra Linux Special Edition очередное обновление x.7.
PARSEC_CAP_READSEARCH
0x00200 — Позволяет игнорировать мандатную политику при чтении и поиске файловых объектов (но не при записи).
PARSEC_CAP_SETMAC
0x00004 — Позволяет изменять метку безопасности процессов. Привилегия не позволяет процессу повышать уровень целостности другого процесса, а только понижать.
Для изменения меток безопасности файловых объектов см. PARSEC_CAP_CHMAC.
Для изменения привилегий процессов см. PARSEC_CAP_CAP.
PARSEC_CAP_SIG
0x00040 — Позволяет посылать сигналы процессам, игнорируя мандатные права.
PARSEC_CAP_SUMAC
0x04000 — Parsec 2.5.251 и выше. Позволяет запускать процессы с другой классификационной меткой (с другим иерархическим уровнем конфиденциальности и другими неиерархическими категориями доступа).
PARSEC_CAP_UNSAFE_SETXATTR
0x01000 — Позволяет устанавливать мандатные атрибуты объектов файловой системы без учета мандатных атрибутов родительского объекта-контейнера. Привилегия используется для восстановления объектов файловой системы из резервных копий и только после установки значения «1» для параметра /parsecfs/unsecure_setxattr.
PARSEC_CAP_UPDATE_ATIME
0x00080 — В настоящее время не используется.
Привилегии PARSEC
Привилегии PARSEC, так же, как и привилегии Linux, наследуются процессами от своих «родителей». Процессы, запущенные от имени суперпользователя, имеющего максимальный («Высокий») уровень целостности по умолчанию, независимо от явного назначения им привилегий, имеют возможность осуществлять большинство привилегированных действий.
Для настройки КСЗ могут использоваться как PARSEC-, так и Linux-привилегии.
Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 и РУСБ.10015-10 (очередное обновление 1.7)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1 иисп. 2
- Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
Привилегии PARSEC и их описание приведены в таблице:
Пожалуйста, разместите таблицу или макрос, генерирующий таблицы, в макросе «Фильтр таблиц».
Таблица загружается. Пожалуйста, подождите.
Позволяет управлять политикой аудита.
Parsec 2.5.257 и выше. Позволяет игнорировать ограничения киоска. В Astra Linux Special Edition очередное обновление x.7 не используется.
Позволяет процессу устанавливать любой непротиворечивый набор привилегий для себя.
Позволяет изменять метки безопасности файловых объектов.
Не используется.
Для изменения меток безопасности файловых объектов см. привилегию PARSEC_CAP_CHMAC.
Для изменения меток безопасности процессов см. PARSEC_CAP_SETMAC.
Для изменения привилегий процессов см. PARSEC_CAP_CAP.
Позволяет игнорировать мандатную политику по неиерархическим категориям конфиденциальности.
См. также PARSEC_CAP_IGNMACLVL и PARSEC_CAP_IGNMACINT.
Позволяет игнорировать мандатную политику по уровням целостности.
Игнорируется при работе в расширенном режиме МКЦ (strict-mode, см. Изменения в документацию, связанные с обновлением № 2022-0819SE17 (оперативное обновление 1.7.2).
См. также PARSEC_CAP_IGNMACCAT, PARSEC_CAP_IGNMACLVL, PARSEC_CAP_INHERIT_INTEGRITY.
Позволяет игнорировать мандатную политику по иерархическим уровням конфиденциальности.
См. также PARSEC_CAP_IGNMACCAT и PARSEC_CAP_IGNMACINT.
При создании файловых объектов на них автоматически устанавливается максимально возможная целостность, однако не выше, чем целостность процесса-создателя и целостность контейнера, в котором создается файловый объект. Используется для установщика пакетов (dpkg).
См. также PARSEC_CAP_IGNMACINT.
БЮЛЛЕТЕНЬ № 20181229SE16 (оперативное обновление 1), Parsec 2.5.265 и выше. Отменяет мандатные ограничения при работе с сущностями IPC, такими как shared memory, message queue и т.д. (Parsec-аналог Linux-привилегии CAP_IPC_OWNER).
Позволяет изменять метки безопасности точек соединения (UNIX-сокетов).
Для сетевых сокетов см. PARSEC_CAP_PRIV_SOCK.
Позволяет создавать новые сетевые сокеты процесса в привилегированном режиме (метка ehole).
Привилегированный сокет позволяет осуществлять сетевое взаимодействие, игнорируя мандатную политику.
Для точек соединения (UNIX-сокетов) см. PARSEC_CAP_MAC_SOCK.
Позволяет игнорировать ограничения МРД и МКЦ на файловой системе /proc. Используется для систем контейнеризации и виртуализации.
Реализована в Astra Linux Special Edition очередное обновление x.7.
Позволяет игнорировать мандатную политику при чтении и поиске файловых объектов (но не при записи).
Позволяет изменять метку безопасности процессов. Привилегия не позволяет процессу повышать уровень целостности другого процесса, а только понижать.
Для изменения меток безопасности файловых объектов см. PARSEC_CAP_CHMAC.
Для изменения привилегий процессов см. PARSEC_CAP_CAP.
Позволяет посылать сигналы процессам, игнорируя мандатные права.
Parsec 2.5.251 и выше. Позволяет запускать процессы с другой классификационной меткой (с другим иерархическим уровнем конфиденциальности и другими неиерархическими категориями доступа).
Позволяет устанавливать мандатные атрибуты объектов файловой системы без учета мандатных атрибутов родительского объекта-контейнера. Привилегия используется для восстановления объектов файловой системы из резервных копий и только после установки значения «1» для параметра /parsecfs/unsecure_setxattr.
Позволяет изменять время доступа к файловым объектам. В настоящее время не используется.
БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) и выше — при работе в расширенном режиме МКЦ (strict-mode, см. Изменения в документацию, связанные с обновлением № 2022-0819SE17 (оперативное обновление 1.7.2) позволяет осуществлять в каталоге с установленным атрибутом ccnr действия (создание, удаление и др.) над вложенными файловыми объектами с классификационными метками не выше классификационной метки данного каталога. При этом при работе в strict-mode значение параметра ядра parsec.ccnr_relax игнорируется (см. Параметры модуля ядра Parsec, задаваемые в загрузчике).