Содержание

Skip to end of metadata
Go to start of metadata

Данная статья применима к:

  • ОС СН Смоленск 1.6
  • ОС СН Ленинград 8.1

Рекурсивная смена классификационной метки на файлах и каталогах

Общие сведения

В операционной системе специального назначения "Astra Linux Special Edition" релиз "Смоленск" (далее ОС СН) начиная с версии 1.6 и позднее невозможна рекурсивная смена классификационной метки на поддереве файловой системы.
Например, ошибка возникает при попытке установить на файловом объекте (файле или каталоге) классификационную метку, превышающую классификационную метку каталога, содержащего данный файловый объект.

Пример

При стандартной установке ОС корневой каталог файловой системы имеет максимально возможную в ОС метку безопасности (по умолчанию это 3:Высокий:0xffffffffffffffff, т.е "уровень конфиденциальности 3" , уровень целостности "Высокий" и "все категории конфиденциальности") ,  а также специальный флаг - ccnr, позволяющий записывать в этот каталог файлы с меньшими классификационными метками. Проверить мандатные атрибуты корневого каталога можно командой pdp-ls:

pdp-ls -laMd /

drwxr-xr-xm-- 24 root root Уровень_3:Высокий:Категория_1,Категория_2,0xfffffffffffffffc:CCNRA /

Для примера создадим в корне файловой системы новый каталог /mydir0:
sudo mkdir /mydir0



Классификационная метка этого каталога - нулевая (метка безопасности 0:0:0), и не превышает классификационную метку корневого каталога. Проверить это можно командой:
pdp-ls -laMd /mydir0

drwxr-xr-x--- 2 root root Уровень_0:Низкий:Нет:0x0 /mydir0

Обратите внимание: для получения мандатных атрибутов с помощью команды pdp-ls привилегии суперпользователя в данном случае НЕ ПОНАДОБИЛИСЬ.

Создание каталога с такой классификационной меткой разрешается флагом ccnr на родительском (в данном случае - на корневом) каталоге.

Установим на каталог уровень конфиденциальности 1. Команда:

sudo pdpl-file 1 /mydir0


Выполнение этого действия также возможно благодаря наличию флага ccnr на родительском (корневом) каталоге.
Проверим получившиеся мандатные атрибуты каталога /mydir0:
sudo pdp-ls -laMd /mydir0

drwxr-xr-xm-- 2 root root Уровень_1:Низкий:Нет:0x0 /mydir0

Обратите внимание: теперь для получения мандатных атрибутов с помощью команды pdp-ls ТРЕБУЮТСЯ привилегии суперпользователя.


Теперь создадим ещё один каталог /mydir1 и в нём создадим файл /mydir1/file:

sudo mkdir /mydir1 && sudo touch /mydir1/file



Убедимся, что мандатные атрибуты созданных объектов нулевые:

pdp-ls -laMd /mydir1 /mydir1/*

drwxr-xr-x--- 2 root root Уровень_0:Низкий:Нет:0x0 /mydir1
-rw-r--r----- 1 root root Уровень_0:Низкий:Нет:0x0 /mydir1/file


Попробуем рекурсивно поменять классификационную метку на файле и каталоге:

sudo pdpl-file -R 1 /mydir1

sudo pdpl-file -R 1 /mydir1
pdpl-file: /mydir1: Отказано в доступе

Операция рекурсивной замены завершается отказом в доступе. Данное поведение обусловлено положениями ДП-модели контроля доступа, разработанной специалистами академии ФСБ России и реализованной в ОС СН, начиная с версии 1.4. Механизм мандатного контроля доступа реализован, как и механизм дискреционного контроля доступа, в ядре ОС. При этом, принятие решения о запрете или разрешении доступа субъекта к объекту принимается на основе типа операции (чтение/запись/исполнение) и мандатных контекстов безопасности субъекта и объекта. Подробнее про правила принятия решений и сравнение мандатных атрибутов см. Уровень конфиденциальности, категории конфиденциальности и целостность: что есть что, и как с этим работать?, а также Метка безопасности: структура и состав.

Поскольку создание файла в каталоге является операцией записи, классификационные метки каталога и файла должны совпадать. Т.е. в каталоге с классификационной меткой 0:0 при отсутствии специальных флагов (см. ниже) могут быть размещены только файлы с классификационной меткой 0:0. При изменении классификационной метки каталога (как в примере выше) правомерность такого изменения проверяется для каждого объекта файловой системы в отдельности. В примере выше нельзя сменить классификационную метку на каталог /mydir1 на 1:0, т.к. этот каталог содержит файл с классификационной меткой 0:0. В тоже время нельзя сменить классификационную метку файла /mydir1/file на 1:0, т.к. файл содержится в каталоге (т.е. объекте-контейнере) с классификационной меткой 0:0.

Порядок установки мандатных атрибутов

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

  • Тип классификационной метки ehole применяется к объектам-контейнерам и простым объектам для игнорирования мандатных правил разграничения доступа к ним;
  • Тип классификационной метки ccnr применяется к объектам-контейнерам и определяет, что объект-контейнер может содержать объекты с различными классификационными метками, но не превышающими классификационную метку этого объекта-контейнера;

Ненулевой тип метки безопасности может быть установлен только привилегированным процессом. Перечисленные типы могут использоваться совместно. Таким образом, объект-контейнер может иметь тип:  ccnr,ehole.

Для того чтобы сменить классификационную метку на поддереве файловой системы следует выполнить следующее:

  1. Установить на все каталоги этого поддерева, начиная с верхнего, классификационную метку с требуемыми уровнем конфиденциальности, набором категорий конфиденциальности и с флагом ccnr;
  2. Установить на все файлы поддерева классификационную метку с требуемым уровнем конфиденуцальности и набором категорий конфиденциальности;
  3. Снять (если он не нужна) c каталогов флаг ccnr.

Пример

Для примера установим ненулевую классификационную метку на созданный ранее каталог /mydir1.

  1. Меняем классификационную метку каталога, и устанавливаем флаг ccnr:

    sudo pdpl-file 1:0:0:ccnr /mydir1


    Обратите внимание, что синтаксис команды pdpl-file для задания флага ccnr требует указать все мандатные атрибуты (параметр 1:0:0:ccnr - уровень конфиденциальности 1, уровень целостности и категории - нули, и сам флаг ccnr).

  2. Проверим метку каталога /mydir1:

    sudo pdp-ls -laMd /mydir1

    drwxr-xr-xm-- 2 root root Уровень_1:Низкий:Нет:ccnr /mydir1

  3. Меняем классификационную метку файла:

    sudo pdpl-file 1 /mydir1/file


    В данном случае достаточно указать только уровень конфиденциальности 1.

  4. Убираем флаг ccnr:

    sudo pdpl-file 1:0:0:0 /mydir1


    И проверяем результат:
    drwxr-xr-xm-- 2 root root Уровень_1:Низкий:Нет:0x0 /mydir1

При наличии нескольких вложенных каталогов флаг ccnr придётся ставить на каждую из них.

Пример сценария

Пример bash-сценария для рекурсивной смены метки безопасности.
ВНИМАНИЕ! Сценарий приведен именно для примера. Можете использовать его, но без гарантий.

#! /bin/bash
usage()
{
    cat << EOF
    Usage: $0 mac_label [path...]
    EOF
}

set_label() { local root_lbl=$(pdp-ls -Mdn / | awk '{print $5}') local max_lev=$(echo $root_lbl | cut -d':' -f1) local max_ilev=$(echo $root_lbl | cut -d':' -f2) find $2 -type d -exec pdpl-file ${max_lev}:${max_ilev}:-1:ccnr '{}' \; find $2 -type f -exec pdpl-file $1 '{}' \; find $2 -type d | tac | xargs pdp-flbl $1 return 0 } if [[ -z $1 ]]; then
    usage
    exit 1
fi

mac_label="$1" 
shift

if [[ -z $1 ]]; then
    set_label $mac_label $PWD
    exit 0
fi

while [[ -n $@ ]]; do
    set_label $mac_label $1
    shift
done

exit 0

Для упрощения адаптации пользователей к особенностям реализации мандатного контроля целостности, при установке обновления значение мандатного атрибута ccnri принудительно фиксируется во включенном состоянии для всех каталогов файловой системы. Мандатный атрибут ccnri определяет, что контейнер может содержать сущности с различными уровнями целостности, но не большими, чем его собственный уровень целостности и применяется только к контейнерам  (каталогам файловой системы).
В связи с этим для упрощения изложения далее в данной статье мандатный атрибут "уровень целостности" не рассматривается, и все операции описываются применительно к классификационным меткам, содержащим только уровень конфиденциальности и категории конфиденциальности. При этом значения меток безопасности (содержащах мандатный атрибут уровень целостности) обозначаются тремя цифрами (например, 0:0:0 - уровень конфиденциальности, уровень целостности и категории конфиденциальности), а значения классификационных меток - двумя (0:0 - уровень конфиденциальности и категории конфиденциальности)