sudo выполнен, права на файл выглядят правильными, но запись в /etc всё равно заканчивается Permission denied? Или Fly сообщает, что изменение оформления недоступно из-за высокого уровня МКЦ? Оба симптома связаны с уровнями целостности, которые проверяются отдельно от обычных прав Linux.
МКЦ — это про целостность, а не про секретность
МКЦ — мандатный контроль целостности, механизм подсистемы безопасности PARSEC в Astra Linux Special Edition. Процессам и объектам файловой системы назначаются уровни целостности от 0 до 63. Главное правило записи: процесс не может изменять объект с уровнем целостности выше собственного.
Это базовая модель. В расширенном режиме МКЦ к ней добавляются категории целостности и атрибуты вроде ssi, iinh и irelax, которые уточняют правила чтения, исполнения и наследования меток.
Зачем это нужно. Классическая модель «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, когда вы пытаетесь сменить обои или тему из сессии с высоким уровнем целостности. Это не сбой: Fly намеренно ограничивает пользовательскую настройку в административной сессии. Высокий уровень предназначен для изменения защищённых системных объектов, а не для повседневной работы.
Что делать, если оформление поменять всё-таки нужно:
- Выйдите из сессии.
- Войдите с обычным уровнем целостности — на экране входа Astra предлагает выбор уровня (вид этого элемента зависит от версии и настроек системы; по умолчанию вход без повышенного уровня — это уровень 0).
- В обычной сессии смена обоев и темы доступна штатно.
Если с этим сообщением регулярно приходят пользователи, проверьте их сценарий входа: для повседневной работы обычно достаточно уровня 0, а высокий уровень нужен привилегированному пользователю на время настройки системы. Такой порядок рекомендует и электронная справка Astra 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 <объект> — метку объекта. Если уровень сессии ниже метки, причина найдена.
Обратная сторона, о которой тоже полезно знать: в расширенном режиме высокая метка может наследоваться от каталога со специальным атрибутом iinh. Без такого атрибута создаваемый файл обычно получает нулевой уровень целостности. Поэтому итоговую метку лучше не угадывать по уровню сессии, а сразу проверять командой pdp-ls -M.