МКЦ — это про целостность, а не про секретность
МКЦ — мандатный контроль целостности, механизм подсистемы безопасности PARSEC в Astra Linux Special Edition. Каждому процессу и каждому файлу назначается уровень целостности — число от 0 до 63. Правило одно и простое: процесс не может изменять объекты с уровнем целостности выше собственного.
Зачем это нужно. Классическая модель «root может всё» означает, что одна скомпрометированная программа с правами root переписывает любой системный файл. Под МКЦ это не так: если процесс работает на низком уровне целостности, то даже с правами root он не тронет файлы, помеченные высоким уровнем, — ядро откажет. Системные файлы Astra помечены высоким уровнем, поэтому целостность системы защищена отдельным механизмом, который не сводится к обычным правам доступа.
Посмотреть уровень своей сессии:
$ pdp-id
Уровень конф.=0(Уровень_0), Уровень целостности=63(Высокий), ...
$ pdp-id -i
63
Уровень 63 называется «Высокий» — с ним по умолчанию работает администратор. Обычные пользовательские сессии живут на уровне 0.
Метки файлов показывает pdp-ls (обратите внимание на букву m в правах — признак мандатной метки):
$ pdp-ls -M /usr/bin/fly-dm
-rwxr-xr-xm-- 1 root root Уровень_0:Высокий:Нет:0x0 /usr/bin/fly-dm
МКЦ — это не МРД
Эти два механизма постоянно путают, потому что оба «мандатные» и оба из PARSEC. Разница принципиальная:
- МКЦ — контроль целостности: защищает систему от изменения. Про то, кто может писать.
- МРД — мандатное разграничение доступа: защищает конфиденциальность данных через уровни секретности. Про то, кто может читать.
Механизмы независимые: МКЦ может быть активен при полностью выключенном МРД — это типовая конфигурация. Проверить легко по параметрам ядра:
$ cat /proc/cmdline | tr ' ' '\n' | grep parsec
parsec.mac=0
parsec.max_ilev=63
Здесь parsec.mac=0 — МРД выключен, а parsec.max_ilev=63 — МКЦ работает с максимальным уровнем 63.
Включён ли МКЦ: astra-mic-control
Состояние МКЦ проверяется штатной утилитой (лежит в /usr/sbin, нужен sudo):
$ sudo astra-mic-control status
АКТИВНО
Та же утилита с аргументами enable / disable включает и выключает механизм (потребуется перезагрузка). На системах, где МКЦ выключен, status ответит «НЕАКТИВНО».
«У вашей сессии высокий уровень МКЦ — изменение оформления недоступно»
Это сообщение показывает рабочий стол Fly, когда вы пытаетесь сменить обои или тему из сессии с высоким уровнем целостности. Это не сбой и не блокировка, которую нужно «снимать», — это сама суть МКЦ: высокоцелостная сессия защищена от изменения своего окружения, в том числе файлов оформления. Иначе процесс с обычным уровнем мог бы подменить файлы, которые административная сессия потом использует.
Что делать, если оформление поменять всё-таки нужно:
- Выйдите из сессии.
- Войдите с обычным уровнем целостности — на экране входа Astra предлагает выбор уровня (вид этого элемента зависит от версии и настроек системы; по умолчанию вход без повышенного уровня — это уровень 0).
- В обычной сессии смена обоев и темы доступна штатно.
Если вы администрируете парк и с этим сообщением приходят пользователи — сигнал стоит прочитать иначе: людям выданы высокоцелостные сессии для повседневной работы. Правильное состояние — обычная работа на уровне 0, высокий уровень только для административных задач; тогда и вопрос про оформление исчезает сам.
Общий принцип тот же, что с правами root в любом Linux: повседневная работа — на обычном уровне, высокий уровень целостности — только для административных задач, где он действительно нужен.
Root и высокий уровень — разные оси
Классические права доступа и метки МКЦ — независимые механизмы, и это главный источник путаницы. sudo даёт права root, но не меняет уровень целостности сессии: процесс с правами root и уровнем целостности 0 всё так же не может писать в объекты с уровнем «Высокий» — ядро откажет, какие бы права у процесса ни были.
Поэтому если на Astra под sudo не получается изменить файл, который «по правам» доступен, — первым делом сравните уровни: pdp-id -i для своей сессии и pdp-ls -M <файл> для файла. В типовой конфигурации несовпадение уровней и есть причина отказа: искать «сломанные права» дальше обычно не нужно. (В сложных схемах к уровню добавляются ещё и категории целостности, но принцип тот же.)
Можно ли просто выключить МКЦ?
Технически да: sudo astra-mic-control disable и перезагрузка. Практически смотрите на назначение машины. На аттестованных и регулируемых системах МКЦ входит в профиль защиты, и его отключение — не техническое действие, а организационное решение с согласованием. На тестовой или домашней машине выключить можно, но полезнее один раз понять модель уровней: она объясняет большинство «странных» отказов доступа на Astra и перестаёт мешать, как только перестаёшь работать в высокой сессии без необходимости.
Подводный камень: «Отказано в доступе» при правильных правах
Запрещённое МКЦ действие выглядит как обычная ошибка прав — и в этом главная ловушка. Вот root с полными правами пытается создать каталог в /etc, работая с целостностью 0:
# mkdir /etc/test-dir
mkdir: cannot create directory '/etc/test-dir': Permission denied
«Отказано в доступе» — и всё: отдельного сообщения «это МКЦ» система не показывает, поэтому такие отказы и принимают за сломанные права. Тот же самый вызов из сессии с целостностью 63 проходит без вопросов.
Диагностика занимает две команды: pdp-id -i покажет уровень вашей сессии, pdp-ls -M <объект> — метку объекта. Если уровень сессии ниже метки, причина найдена.
Обратная сторона, о которой тоже полезно знать: высокая метка новым файлам достаётся не от сессии, а от каталога со специальным флагом наследования (он стоит, например, на /etc — в выводе pdp-ls виден как iinh). Обычный файл, созданный в домашнем каталоге даже из высокой сессии, получает метку «Низкий» — случайно пометить свои документы высоким уровнем сложнее, чем кажется.