Права доступа в Astra Linux: DAC, ACL и мандатные метки PARSEC

Права доступа в Astra Linux: DAC, ACL и мандатные метки PARSEC Полезное

Права доступа в Astra Linux — это правила, которые определяют, какой пользователь и какая программа могут читать, изменять и запускать конкретный файл или каталог. В системе работают две модели одновременно: дискреционная (стандартная для любого Linux, на основе владельца и битов rwx) и мандатная (метки конфиденциальности и целостности, доступная в сертифицированной редакции Special Edition).

Ниже разберем обе модели: как читать и менять права через chmod и chown, чем мандатная метка отличается от обычных прав и какими командами Astra ей управляют. Примеры с chmod/chown подходят для любого дистрибутива Linux, мандатные — для Astra Linux Special Edition.

Две модели доступа и редакции Astra Linux

Astra Linux — российская операционная система на базе Debian. Исторически у нее выделяли несколько линеек и уровней защищенности, но состав линейки, названия редакций и условия лицензирования менялись от версии к версии. Поэтому ниже я опираюсь на общий принцип, а конкретную редакцию, ее название и доступные механизмы всегда стоит сверять с актуальной продуктовой страницей и документацией вендора под вашу сборку.

Ключевое для темы прав доступа — различать два типа редакций по наличию мандатной подсистемы.

  • Редакции без сертифицированной подсистемы безопасности. В них работают только стандартные механизмы Linux, то есть дискреционные права; мандатного разграничения нет. Была ли такая редакция общедоступной и как она называлась в вашей версии — проверяйте по текущей продуктовой странице, не полагаясь на прежние названия.
  • Astra Linux Special Edition — редакция с подсистемой безопасности PARSEC и сертификатами ФСТЭК России. Именно она добавляет мандатное разграничение поверх обычных прав. Все продуктовые команды и утверждения ниже относятся к Astra Linux Special Edition и требуют проверки на вашей целевой версии.

У Special Edition исторически выделяли уровни защищенности (в части версий им давали кодовые имена). Как правило, мандатное разграничение доступа по конфиденциальности в полном объеме относят к более высокому уровню, а мандатный контроль целостности и замкнутую программную среду — к уровню пониже. Точное соответствие «уровень — механизм», сами названия уровней и их наполнение зависят от версии и лицензии, поэтому их обязательно сверяют с официальной документацией под вашу сборку.

Разница между моделями кратко:

Признак Дискреционная (DAC) Мандатная (MAC)
Кто назначает права владелец объекта администратор безопасности, через метку
На чем основана владелец, группа, биты rwx уровень конфиденциальности и категории
Где доступна любой Linux, все редакции Astra Astra Linux Special Edition (PARSEC)
Основные команды chmod, chown, chgrp pdpl-file, pdp-ls, pdpl-user

Важное правило: модели не заменяют, а дополняют друг друга. Доступ к объекту разрешается, только если запрос проходит и дискреционную, и мандатную проверку. Если хотя бы одна модель запрещает операцию, она не выполнится.

Дискреционные права доступа (DAC)

Дискреционная модель — классическая система прав Unix, которой уже несколько десятилетий. У каждого файла и каталога есть два владельца: пользователь-владелец и группа-владелец. Права описываются для трех классов:

  • владелец (user, u);
  • группа (group, g);
  • остальные (others, o).

Для каждого класса задаются три бита: r (чтение), w (запись) и x (выполнение). Смысл этих битов отличается для файла и для каталога — это часто путают.

Право Для файла Для каталога
r читать содержимое файла видеть список имен внутри каталога
w изменять содержимое файла создавать, удалять и переименовывать файлы внутри
x запускать файл на выполнение входить в каталог и обращаться к его файлам

Посмотреть текущие права помогает команда ls -l. В начале строки она печатает десять символов, например -rw-r-----. Первый символ — тип объекта (- файл, d каталог, l ссылка), а дальше идут три тройки битов: для владельца, группы и остальных. Прочерк на месте буквы означает, что права нет.

Обычные rwx-биты не копируются из родительского каталога напрямую: режим нового файла ограничивает umask, а не права папки. При этом наследуемые механизмы в Linux все же есть — SGID на каталоге влияет на группу новых объектов внутри него, а default ACL может наследовать расширенные права. То есть биты не «достаются» от папки автоматически, но отдельные атрибуты и ACL наследоваться могут.

Управление правами: chmod и chown

Права меняют командой chmod, а владельца — командами chown (пользователь и группа) и chgrp (только группа). У chmod два режима записи.

В числовом (абсолютном) режиме права задаются тремя цифрами — по одной на владельца, группу и остальных. Цифра — это сумма: r дает 4, w дает 2, x дает 1. Например, 640 означает rw- владельцу (4+2), r-- группе (4) и --- остальным (0).

touch otchet.txt
chmod 640 otchet.txt   # 6=rw- владельцу, 4=r-- группе, 0=--- остальным
ls -l otchet.txt       # -rw-r----- ... otchet.txt

В символьном (относительном) режиме указывают класс (u, g, o или a для всех), оператор (+ добавить, - убрать, = задать точно) и сами биты. Это удобно, когда нужно поменять одно право, не трогая остальные.

touch data.log
chmod u=rw,g=r,o= data.log              # владельцу rw, группе r, остальным ничего
chmod g+r data.log                      # дать группе чтение файла данных
chmod g-w data.log                      # снять у группы запись
chown "$(id -un)":"$(id -gn)" data.log  # сменить владельца и группу (обычно нужен root)
ls -l data.log

Бит выполнения x для файла с данными бессмыслен — его вешают на каталог (право входить в него) или на исполняемый скрипт с shebang. Например:

printf '#!/bin/sh\necho deploy\n' > deploy.sh
chmod g+x deploy.sh   # разрешить группе запускать скрипт
ls -l deploy.sh

Смена владельца в реальной системе почти всегда требует прав root, поэтому chown запускают через sudo. У chmod есть опция -R для рекурсивного обхода, но применять один и тот же числовой режим ко всей ветке опасно. Команда вида chmod -R 750 proekt навесит бит выполнения на все обычные файлы (для данных он не нужен и создает лишние права), а если снять x у файлов режимом 640, то заодно закроется вход в подкаталоги — модель прав ломается в обе стороны.

Правильнее разнести права: каталогам — 750, файлам — 640, отбирая их по типу через find:

mkdir -p proekt/sub
find proekt -type d -exec chmod 750 {} +   # каталогам: rwx владельцу, r-x группе
find proekt -type f -exec chmod 640 {} +   # файлам: rw- владельцу, r-- группе
ls -ld proekt

Если нужен именно один вызов, используйте символический режим с заглавной X — она ставит бит выполнения только каталогам и файлам, у которых он уже есть:

mkdir -p proekt/sub && touch proekt/data.txt   # тестовое дерево
chmod -R u=rwX,g=rX,o= proekt   # X - execute только каталогам и уже исполняемым файлам

Отдельно стоит знать про специальные биты: setuid и setgid запускают файл с правами владельца или группы файла, а sticky-бит на каталоге (как у /tmp) ограничивает удаление и переименование файлов внутри: сделать это может владелец файла, владелец каталога или процесс с соответствующей привилегией. Их назначают тем же chmod с дополнительной цифрой впереди, например chmod 1777 /tmp.

Мандатное разграничение доступа в Astra Linux

Дискреционной модели недостаточно там, где нужно строго изолировать данные по грифам секретности: владелец файла сам решает, кому дать доступ, и может ошибиться. Мандатная модель убирает этот произвол — правила задает не владелец, а политика безопасности системы. В Astra Linux Special Edition ее реализует подсистема PARSEC.

Работают два независимых мандатных механизма.

Мандатное разграничение доступа (МРД) по конфиденциальности. Каждому субъекту (пользователю, процессу) и каждому объекту (файлу, каталогу) присваивается метка. Она включает иерархический уровень конфиденциальности и неиерархические категории (набор значений уровней зависит от версии и настройки, поэтому конкретные цифры проверяйте под свою сборку). Как упрощенный вход мандатную политику описывают правилом «не читать выше, не писать ниже»: пользователь с меньшим уровнем не прочитает более секретный файл, а процесс с высоким уровнем не запишет данные в объект с низким. Это именно упрощение: точное решение о доступе зависит от мандатных меток субъекта и объекта, их категорий и предоставленных полномочий, поэтому правила для своей версии проверяйте по документации.

Мандатный контроль целостности (МКЦ) — отдельный механизм с метками целостности. Он ограничивает изменение системных объектов и защищает их от несанкционированной модификации, в том числе вредоносным кодом: процесс с низким уровнем целостности не изменит объект с высоким. В текущих версиях метка целостности содержит и иерархический уровень, и неиерархическую категорию. Модель целостности между релизами меняли, поэтому если важно, как именно она устроена и с какого релиза, сверяйтесь с release notes и документацией на вашу версию — я не утверждаю, что одна модель полностью заменила другую в конкретном номере версии.

Дополняет их замкнутая программная среда (ЗПС). Она контролирует целостность и аутентичность программных объектов с использованием подписей и хэшей, чтобы не запускался посторонний или подмененный код; конкретная область контроля зависит от конфигурации.

Мандатная проверка не отменяется дискреционной: разрешение по DAC (владелец и биты rwx) не дает доступа, если его запрещает мандатная политика — запрос должен пройти все активные проверки. Внутренний порядок хуков я не фиксирую, важен итог: хватает одного запрета, чтобы операция не выполнилась. Обычные chmod и chown мандатными метками не управляют — для них есть свои утилиты.

Мандатные метки на практике: команды Astra

Все команды ниже относятся к Astra Linux Special Edition; синтаксис, форматы меток и вывод зависят от версии, поэтому перед изменениями проверяйте man соответствующей утилиты на своей сборке. Метка безопасности записывается как уровень конфиденциальности и набор категорий (плюс уровень целостности). Не считайте метку корневого или любого системного каталога универсальной константой: она зависит от версии, профиля установки и настройки, поэтому реальное значение сначала смотрят командой, а не берут из памяти.

Для работы с метками в Astra Linux Special Edition используют отдельные утилиты: pdp-ls показывает метки (аналог ls), pdpl-file задает и просматривает метку файла, pdpl-user управляет мандатными атрибутами пользователя. Ниже — иллюстративный сеанс; конкретные значения приведены как пример и на вашей версии будут другими:

# посмотреть мандатные метки объектов (аналог ls)
# вывод зависит от версии и профиля стенда; пример со стенда Special Edition:
pdp-ls -M /home/user
# 0        /home/user/public.txt
# 1:0:0    /home/user/secret.txt

# сначала прочитать текущую метку файла и зафиксировать исходное значение
pdpl-file /home/user/secret.txt

# только после этого менять метку (форматы зависят от версии - см. man pdpl-file)
sudo pdpl-file 1:0:0 /home/user/secret.txt

pdpl-user задает мандатные атрибуты пользователя; параметр -i принимает уровень целостности, а следом идет логин. Число ниже — иллюстративный пример уровня целостности, не рекомендация; перед применением сверьте аргументы и допустимые значения через man pdpl-user на целевой версии:

# -i <уровень целостности> <логин>; 63 - пример значения, проверьте man pdpl-user
sudo pdpl-user -i 63 username

Помимо командной строки, в Astra Linux есть графические средства (файловый менеджер и панель управления), где метку можно выставить через свойства объекта — результат тот же, что и у утилит pdpl-*.

Выводы

  • В Astra Linux одновременно действуют две модели доступа: дискреционная (rwx) и мандатная (метки). Доступ разрешается, только если запрос проходит обе проверки.
  • Дискреционные права есть во всех редакциях: владелец и группа, биты r/w/x, управление через chmod, chown, chgrp. Смысл битов различается для файла и каталога.
  • Мандатное разграничение доступно в Astra Linux Special Edition через подсистему PARSEC: МРД по конфиденциальности, МКЦ по целостности и замкнутая программная среда.
  • Метками управляют отдельные утилиты (pdp-ls, pdpl-file, pdpl-user), а не chmod/chown.
  • Точные уровни, соответствие «редакция — механизм» и синтаксис команд зависят от версии — сверяйте с официальной документацией под вашу сборку.

Где применяется и как освоить

Освойте тему на практике

Права доступа — базовый навык администратора Astra Linux: без него не настроить безопасную работу пользователей, сервисов и разделяемых каталогов, а на аттестованных объектах без мандатных меток не пройти требования регуляторов. Разобраться в дискреционной и мандатной моделях, командах PARSEC и настройке под требования ФСТЭК системно помогает курс Расширенное администрирование Astra Linux.

Освойте тему на практике

Посмотреть формат обучения и разобрать реальные задачи вживую можно на бесплатных открытых уроках Otus — там же удобно задать вопросы преподавателю.

Смежные темы: Установка Linux с флешки, Скрипты для системных администраторов, Настройка firewall в Linux через iptables.

FAQ

Чем мандатная модель отличается от обычных прав rwx?
Обычные права назначает владелец файла, и он же может их ослабить. Мандатную метку задает политика безопасности системы, владелец обойти ее не может — поэтому мандатная модель строже и применяется для защиты данных по грифам.

В любой ли редакции Astra Linux есть мандатное разграничение?
Нет. Сертифицированная мандатная подсистема PARSEC входит в Astra Linux Special Edition. В редакциях без этой подсистемы доступны только стандартные дискреционные права Linux. Названия и состав редакций менялись между версиями, поэтому наличие мандатной подсистемы в конкретной сборке проверяйте по актуальной продуктовой странице вендора.

Меняет ли chmod мандатную метку файла?
Нет. chmod и chown управляют только дискреционными правами и владельцем. Мандатные метки задают отдельные утилиты pdpl-file и pdpl-user (или графические средства системы).

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)