МКЦ — это про целостность, а не про секретность

МКЦ — мандатный контроль целостности, механизм подсистемы безопасности 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, когда вы пытаетесь сменить обои или тему из сессии с высоким уровнем целостности. Это не сбой и не блокировка, которую нужно «снимать», — это сама суть МКЦ: высокоцелостная сессия защищена от изменения своего окружения, в том числе файлов оформления. Иначе процесс с обычным уровнем мог бы подменить файлы, которые административная сессия потом использует.

Что делать, если оформление поменять всё-таки нужно:

  1. Выйдите из сессии.
  2. Войдите с обычным уровнем целостности — на экране входа Astra предлагает выбор уровня (вид этого элемента зависит от версии и настроек системы; по умолчанию вход без повышенного уровня — это уровень 0).
  3. В обычной сессии смена обоев и темы доступна штатно.

Если вы администрируете парк и с этим сообщением приходят пользователи — сигнал стоит прочитать иначе: людям выданы высокоцелостные сессии для повседневной работы. Правильное состояние — обычная работа на уровне 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). Обычный файл, созданный в домашнем каталоге даже из высокой сессии, получает метку «Низкий» — случайно пометить свои документы высоким уровнем сложнее, чем кажется.