Модуль 13. Мандатное (обязательное) управление доступом и контроль целостности

Введение

В этом модуле вы узнаете о том, что такое Мандатный контроль целостности и Мандатное управление доступом. Мы расскажем как эти технологии реализованы в Astra Linux Special Edition и как они работают в ALD Pro.

Первая модель мандатного управления доступом (от англ. Mandatory Access Control, MAC) была разработана в 70-е годы для возможности безопасной совместной работы с секретными документами на больших мейнфреймах. Модель MAC определяет доступ субъектов (процессов и потоков) к объектам (файлам, каталогам, сокетам и др.) на основе классификационных меток (или как их еще называют «меток конфиденциальности»), которыми может управлять только администратор системы. Аббревиатура MAC на русский язык переводится как МРД, т.е. из слова «управление» берут третью букву «Р» для благозвучности, поэтому в некоторых источниках модель иногда называют еще «мандатным разграничением доступа».

На основе модели МРД в дальнейшем была разработана модель мандатного контроля целостности (от англ. Mandatory Integrity Control, MIC), которая была предназначена для защиты операционной системы от возможности внедрения программных закладок и нарушения целостности программной среды. Модель MIC использовала те же принципы, но оперировала метками целостности, где под целостностью понималась степень доверия к субъекту или содержанию объекта. Аббревиатура MIC на русский язык переводится как МКЦ.

В операционной системе Astra Linux настройки мандатного доступа локальных пользователей находятся в текстовых базах данных macdb и micdb в каталоге /etc/parsec/. Классификационные метки и метки целостности объектов файловой системы хранятся в расширенных атрибутах и обобщенно называются метками безопасности. Для работы с метками безопасности используются такие утилиты как pdpl-file, pdp-ls и др.

Система Astra Linux может работать в одном из трех режимов защиты: обычный («Орел»), усиленный («Воронеж») и максимальный («Смоленск»). Выбрать режим можно как во время установки, так и при эксплуатации системы. Для защиты системы на уровне МКЦ достаточно режима «Воронеж», а для работы с МРД нужен режим «Смоленск», при этом система всегда будет ограничивать доступ к файлам с ненулевыми метками конфиденциальности, поэтому при отключении МРД командой «astra-mac-control disable» или понижении режима до «Орла» командой «astra-modeswitch set 0» вы только ограничите пользователей в том, что они не смогут входить в систему с меткой конфиденциальности выше нуля.

Администрирование мандатного контроля

Модели МКЦ/МРД называют «мандатными» или проще «обязательными», поскольку метками безопасности может управлять только администратор мандатного контроля (от лат. mandatum — поручение, распоряжение, приказание). Такой подход обеспечивает намного больше контроля в сравнении с обычной «дискреционной» или как ее еще называют «избирательной» моделью, согласно которой владельцы файловых объектов могут самостоятельно раздавать права доступа к своим файловым объектам (от лат. discretio — решение должностным лицом какого-либо вопроса по собственному усмотрению).

Функции МКЦ/МРД реализованы в общем модуле Парсек (Parsec), поэтому в ряде случаев они тесно связаны друг с другом. Например, администратором мандатного управления является суперпользователь root, который действует в системе под максимальным уровнем целостности max_ilev (63). Требование в виде высокой целостности для администрирования мандатного управления создает дополнительный барьер, без преодоления которого нарушитель не сможет получить доступ к конфиденциальным документам.

Обычного пользователя можно сделать администратором МРД, если назначить ему привилегию PARSEC_CAP_CHMAC (англ. change MAC – изменить MAC), которая дает право на управление метками безопасности, но следует учитывать несколько моментов:

  • Вы лишите систему дополнительного барьера защиты перед суперпользователем root с низким уровнем целостности, так как домашние каталоги таких пользователей будут иметь низкий уровень целостности и root сможет внедрить закладку в .bashrc, чтобы выполнить вредоносный код в момент входа пользователя в систему.

  • Если пользователь назначит объекту метку конфиденциальности, которая окажется выше его собственной, то он потеряет доступ к этому объекту. Пользователь сможет изменять метки конфиденциальности только тех объектов, которые будут ему доступны.

    Для обхода указанного ограничения администратору МРД можно дополнительно назначить следующие две привилегии:

    • Привилегия PARSEC_CAP_IGNMACLVL (англ. ignore MAC level — игнорировать уровень MAC) — позволит действовать в обход мандатного контроля уровней конфиденциальности.

    • Привилегия PARSEC_CAP_IGNMACCAT (англ. ignore MAC category — игнорировать категорию MAC) — позволит действовать в обход мандатного контроля категорий конфиденциальности.

  • Пользователю нужно будет использовать абсолютный путь к утилите /sbin/pdpl-file, т.к. у него в переменной окружения $PATH не будет указан каталог sbin.

Однако, права на администрирование меток целостности делегировать не получится. Привилегии CHMIC, аналогичной по действию с привилегией CHMAC, в системе не существует. Однако, если пользователю назначена привилегия CHMAC, то он может изменять метку целостности, но только в направлении понижения и только для тех объектов, уровень целостности которых равен или ниже целостности его собственной пользовательской сессии. Таким образом, полноценным администратором МКЦ является только тот пользователь, кто вошел в систему с максимальным уровнем целостности max_ilev (63) и может выполнять команды от имени суперпользователя root.

Одной из задач администрирования является восстановление объектов файловой системы из архивов с сохранением расширенных атрибутов. Для того, чтобы утилита восстановления данных могла назначать расширенные атрибуты в любом порядке без учета правил мандатного контроля, приложение нужно запускать с привилегией PARSEC_CAP_UNSAFE_SETXATTR, или из-под учетной записи администратора резервного копирования, которому назначена данная привилегия. Для того чтобы процесс мог воспользоваться указанной привилегией, в файл /parsecfs/unsecure_setxattr нужно временно записать значение 1. Подробнее об этом в разделе бизнес-сценариев.

Модель мандатного управления доступом (МРД)

Уровни конфиденциальности

Модель мандатного управления доступом предназначена для предотвращения утечки секретной информации. Она оперирует уровнями конфиденциальности, которые образуют строгую иерархию, поэтому ее называют также «многоуровневой политикой безопасности» (Multi-Level Security, MLS).

Для работы с конфиденциальной информацией авторы модели Дэвид Белл и Леонард ЛаПадула предложили использовать набор правил, которые можно обозначить аббревиатурой WURD (англ. write up, read down — запись вверх, чтение вниз). В соответствии с этими правилами субъекты имеют доступ на запись только к тем объектам, уровень конфиденциальности которых такой же как их собственный или выше, а доступ на чтение только к тем объектам, уровень конфиденциальности которых такой же как их собственный или ниже. Кстати, в честь авторов модель сокращенно называют BLP (Bell–LaPadula).

Например, если взять иерархию уровней секретности США (Top Secret > Secret > Confidential > Unclassified), то процесс, запущенный на уровне «Secret», не должен иметь возможность читать более конфиденциальную информацию из файлов с уровнем «Top Secret», и записывать информацию, скопированную из файлов с тем же уровнем «Secret», в файлы с уровнями «Confidential» и «Unclassified», что, казалось бы, должно полностью исключать риск разглашения конфиденциальных данных, см. рис. рис. 436.

../_images/aldpro_mod_13_img05.png

рис. 436 Права доступа для процесса на уровне Secret по модели Белла-ЛаПадулы

Однако, если у нарушителя будет возможность запустить два процесса на разных уровнях конфиденциальности, то чисто теоретически он сможет организовать передачу информации между ними по скрытым каналам связи, которые можно объединить в две категории:

  • Скрытые каналы по памяти — предполагают возможность передачи информации большими блоками данных параллельно. Например, в Astra Linux процессам запрещено читать имена файлов с более высокой меткой конфиденциальности, иначе передающий процесс мог бы просто создать группу файлов и записать в их имена секретную информацию, разбив ее на фрагменты длиной до 255 байт.

  • Скрытые каналы по времени — предполагают возможность передачи информации последовательно по несколько байт или даже бит. Например, в Astra Linux процессам запрещено читать информацию о размере файлов с более высокой меткой конфиденциальности, иначе передающий процесс мог бы транслировать секретную информацию по одному байту, просто изменяя размер какого-либо файла.

Модель Белла-ЛаПадулы формулирует общие принципы работы с секретной информацией, но ее нельзя использовать для построения безопасных средств защиты информации, так как она не учитывает скрытые каналы связи и особенности реализации современных операционных систем. Поэтому для Astra Linux была разработана собственная МРОСЛ ДП-модель, аббревиатура которой расшифровывается как мандатная (М) сущностно-ролевая (Р) модель безопасности управления доступом (Д) и информационными потоками (П) в операционных (О) системах (С) семейства Linux (Л).

МРОСЛ ДП-модель объединяет мандатное управление доступом (МРД), мандатный контроль целостности (МКЦ) и ролевое управление доступом (которое реализовано пока еще не в полном объеме и выражается только традиционным для ОС семейства Linux дискреционным управлением доступом). Кроме того, в рамках модели осуществляется управление доступом в штатной СУБД PostgreSQL, что в обеспечивает согласованность механизмов управления доступом в ОС и СУБД.

Возвращаясь к уровням секретности, можно добавить, что в Российской Федерации классификацией сведений по уровням секретности занимаются специальные комиссии, создаваемые по инициативе руководителей государственных органов и предприятий. Согласно статье 8 закона «О государственной тайне» определено три уровня (грифа) секретности:

  • Гриф «особой важности» (эквивалент Top Secret) — присваивают сведениям, разглашение которых может нанести ущерб интересам Российской Федерации в целом.

  • Гриф «совершенно секретно» (эквивалент Secret) — присваивают сведениям, разглашение которых может нанести ущерб интересам гос. органа или отрасли экономики РФ.

  • Гриф «секретно» (эквивалент Confidential) — присваивают всем прочим сведениям, разглашение которых может нанести ущерб предприятию, учреждению или организации в военной, внешнеполитической, экономической, научно-технической, разведывательной, контрразведывательной или оперативно-розыскной деятельности.

Дополнительно на предприятиях может использоваться гриф «для служебного пользования» (эквивалент For Official Use only, FOUO), который проставляется на документах, содержащих служебную информацию ограниченного распространения. Такие документы не попадают под действие закона о государственной тайне, и работа с ними регламентируется только локальными нормативными актами.

В системе Astra Linux уровень конфиденциальности представляет из себя целое число в диапазоне от 0 до 255 включительно с текстовым наименованием, поясняющим назначение этого уровня. Уровни конфиденциальности объектов и субъектов сравниваются по значениям в десятичной системе счисления, поэтому их еще называют линейными уровнями. При установке системы по умолчанию создается четыре уровня от 0 до 3, где 0 означает отсутствие конфиденциальности, см. рис. рис. 437.

../_images/aldpro_mod_13_img10.png

рис. 437 Уровни конфиденциальности в Astra Linux по умолчанию

Администратор может переименовывать созданные ранее уровни конфиденциальности и добавлять новые. Если значение нового уровня окажется больше 3, что является максимально разрешенным уровнем конфиденциальности по умолчанию, то для того чтобы пользователь мог войти в систему с этим уровнем, нужно будет изменить значение параметра sysmaclev в конфигурационном файле /usr/sbin/pdp-init-fs и перезагрузить операционную систему.

Присвоить объекту классификационную метку можно с помощью утилиты pdpl-file в рамках всей метки безопасности. Синтаксис команды следующий:

pdpl-file [Уровень_МРД]:[Уровень_МКЦ:[Категории_МРД:[Флаги]]] Имя_объекта

Где:

  • Уровень_МРД — уровень конфиденциальности, который может быть задан как именем (например, «Совершенно_секретно»), так и числом в обычной десятичной системе счисления (например, «2»). Если значение будет не задано, то по умолчанию назначается нулевой уровень МРД.

  • Уровень_МКЦ — уровень целостности, который может быть задан как именем (например, «Высокий»), так и числом в обычной десятичной системе счисления (например, «63»). Если значение будет не задано, то по умолчанию назначается нулевой уровень МКЦ.

  • Категории_МРД — список категорий конфиденциальности, которые можно перечислить как по именам через запятую (например, «Мотострелковые_войска,Танковые_войска»), так и задать одним числом в шестнадцатеричной системе счисления (например, 0x3). Если значение будет не задано, то по умолчанию метка безопасности будет без категорий конфиденциальности. Если нужно задать сразу все доступные категории (значение sysmaxcat), то можно использовать специальное значение «-1».

  • ФЛАГИ — позволяют назначить мандатные атрибуты, с помощью которых можно влиять на политику мандатного управления. Флаги можно перечислить как по именам через запятую (например, «ccnr,ccnri»), так и задать одним числом в десятичной системе счисления (например, «3»).

  • Имя_объекта — Абсолютный или относительный путь к файлу или каталогу.

Внутри меток безопасности уровень конфиденциальности задается не по имени, а по значению как 8-битное целое положительное число (uint8_t), поэтому администратор не может изменить нумерацию уровней в системе, т.к. это повлечет за собой необходимость изменения меток безопасности всех ранее созданных объектов. Чтобы упростить возможность добавления новых уровней в начало иерархии вместо значений 1, 2 и 3 можно использовать 10, 20 и 30 соответственно — в этом случае администратор в любой момент сможет перед уровнем «10: Секретно» добавить уровень «5: Для служебного пользования» без внесения изменений в расширенные атрибуты объектов файловой системы.

Категории конфиденциальности

Со временем модель MLS, в которой уровни конфиденциальности имеют строгую иерархию, была дополнена моделью многокатегорийной безопасности (англ. Multi Categories Security, MCS), в которой неиерархические категории конфиденциальности обеспечили возможность безопасной совместной работы с секретными документами разных департаментов на больших мейнфреймах.

Работу категорий и уровней конфиденциальности можно показать на примере многоквартирного дома, где категории будут подъездами, а уровни — этажами. Например, если пользователю разрешена работа с документами «IT» и «Finance» до уровня «Особой важности» включительно, но он выполнил вход в систему с категорией «IT» и уровнем «Секретно», то подняться на этаж «Совершенно секретно» или перепрыгнуть на балкон соседнего подъезда «Finance» у него уже не получится, см. рис. рис. 438.

../_images/aldpro_mod_13_img15.png

рис. 438 Представление категорий и уровней конфиденциальности в виде подъездов и этажей многоквартирного дома

В операционной системе Astra Linux категория конфиденциальности представляет из себя целое число в диапазоне от 0 до 63 включительно с текстовым наименованием, поясняющим назначение этой категории. По умолчанию в системе создано две категории, см. рис. рис. 439.

../_images/aldpro_mod_13_img20.png

рис. 439 Категории конфиденциальности в Astra Linux по умолчанию

Администратор может переименовывать созданные ранее категории конфиденциальности и добавлять новые. Значение параметра sysmaxcat в файле /usr/sbin/pdp-init-fs по умолчанию равно 0xffffffffffffffff, поэтому при добавлении новых категорий вносить какие-либо изменения в конфигурационный файл и, соответственно, перезагружать компьютер не требуется.

В метках безопасности набор категорий конфиденциальности задается 64-битным целым положительным числом (uint64_t) в шестнадцатеричном формате, где каждый бит соответствует отдельно взятой изолированной категории, например:

  • шестнадцатеричное число 0x1 означает, что в метке задана первая категория, разряд которой равен нулю (20 = 1);

  • шестнадцатеричное число 0x2 означает, что в метке задана вторая категория, разряд которой равен единице (21 = 2);

  • шестнадцатеричное число 0x3 означает, что в метке заданы и первая и вторая категория сразу (20 + 21 = 1 + 2 = 3)

  • и т.д.

Если пользователь выполнит вход в систему с несколькими категориями конфиденциальности, то прочитать информацию он сможет из файлов с любой из этих категорий, но записать получится только в тот файл, на который будут назначены обе категории сразу, что исключает возможность несанкционированного разглашения секретной информации обычными пользователями. Порядок сравнения категорий в классификационных метках отражен на рисунке рис. 440:

  • Классификационные метки считаются равными, если метка субъекта содержит те же категории, что и метка объекта.

  • Классификационная метка субъекта считается больше метки объекта, если она содержит все категории, которые определены в метке объекта, и еще какие-то дополнительные категории сверх того.

  • И, соответственно, классификационная метка субъекта считается меньше метки объекта, если метка объекта содержит все категории, которые определены в метке субъекта, и еще какие-то дополнительные категории сверх того.

  • И, наконец, классификационные метки считаются несопоставимыми, если метка объекта содержит категории, которых нет в метке субъекта, и одновременно с этим метка субъекта, содержит категории, которых нет в метке объекта.

../_images/aldpro_mod_13_img25.png

рис. 440 Порядок сравнения категорий в классификационных метках

Если в организации потребуется передать файлы из одной категории конфиденциальности в другую, то нужно будет выполнить ряд действий с правами администратора МРД, см. раздел «Рассекречивание документов».

Контейнеры объектов

Модель МРОСЛ ДП в отличии от классической модели Белла-ЛаПадулы учитывает прикладные особенности операционных систем, одной из которых являются контейнеры, например, каталоги файловой системы (не путайте с docker-контейнерами). Правила мандатного доступа учитывают классификационные метки, назначенные не только на объекты, но и на контейнеры, в которых эти объекты находятся (родительские контейнеры).

По умолчанию на каталоги распространяется политика CCR (англ. Container Clearance Required — требуются разрешения контейнера), в соответствии с которой в каталоге могут находиться только такие объекты, классификационная метка которых полностью совпадает с меткой каталога, поэтому при создании новых файлов и папок они наследуют классификационную метку родительского каталога. При необходимости эту политику можно инвертировать с помощью мандатного атрибута CCNR, о котором подробно будет рассказано далее.

Процессы

Пользователь может выполнить вход в систему с любой классификационной меткой, которая разрешена для его учетной записи. Параметры МКЦ для пользователя можно задать с помощью утилиты pdpl-user или в оснастке «Управление политикой безопасности», а значения сохраняются в текстовой базе /etc/parsec/macdb/<uid> в следующем формате:

Имя_пользователя : MIN_LVL : MIN_CAT : MAX_LVL : MAX_CAT

Где:

  • Имя_пользователя – текстовый идентификатор пользователя, например, localadmin.

  • MIN_LVL – минимально разрешенный уровень конфиденциальности;

  • MIN_CAT – минимально разрешенный набор категорий конфиденциальности;

  • MAX_LVL – максимально разрешенный уровень конфиденциальности;

  • MIN_CAT – максимально разрешенный набор категорий конфиденциальности.

../_images/aldpro_mod_13_img30.png

рис. 441 Параметры конфиденциальности учетной записи пользователя

Процессу графической оболочки fly-wm назначается классификационная метка, выбранная в момент входа, и далее все дочерние процессы автоматически наследуют это значение. Посмотреть мандатный контекст безопасности процесса можно с помощью утилиты pdpl-ps:

localadmin@astra:~$ sudo pdpl-ps $(pidof fly-wm)
1235 Документы_общего_пользования:Высокий:Нет:0x0!

Запустить процесс с другой меткой конфиденциальности может только администратор мандатного контроля, используя утилиту pdp-exec. Например, в одном окне запустим еще один процесс bash с меткой безопасности 2:0:0x3:0 и посмотрим pid этого процесса:

root@astra:~# sudo pdp-exec -u localadmin -l 2:0:0x3:0 bash
localadmin@astra:/root$ echo $$
1964

В другом окне терминала можно будет проверить, что фактическая метка безопасности этого процесса действительно соответствует желаемому значению:

root@astra:~# pdpl-ps 1964
1964 Совершенно_секретно:Низкий:Мотострелковые_войска,Танковые_войска:0x0!

Изменение политики МРД через атрибуты

Стандартные правила мандатного управления доступом можно изменить с помощью мандатных атрибутов, устанавливаемых на объекты и контейнеры. На каталоги можно установить мандатный атрибут CCNR.

Атрибут CCNR (англ. Container Clearance Negative Required — инверсия политики CCR) — позволяет хранить в каталогах объекты с различными метками конфиденциальности, но не выше, чем собственная метка родительского каталога. Новым объектам, которые создаются в каталоге с атрибутом CCNR, по умолчанию присваивается нулевая классификационная метка.

Атрибут CCNR может использоваться при создании структуры каталогов для хранения секретных документов, имеющих разные классификационные метки. По умолчанию этот атрибут устанавливается, например, на корень системного диска. Учитывая, что каталоги CCNR могут быть причиной появления скрытых каналов по времени, они недоступны на запись обычным пользователям. Например, в Astra Linux процессам с классификационной меткой по умолчанию запрещено создавать/удалять файлы в таких каталогах, иначе принимающий процесс мог бы считывать транслируемую ему информацию с помощью обычной утилиты pdp-ls, которая отвечает по-разному когда объект есть в файловой системе и когда он не существует.

Однако, в некоторых случаях все таки возникает потребность предоставить доступ на запись к каталогам с атрибутом CCNR, например, для корректной работы средств виртуализации. Сначала для этого был добавлен параметр ядра parsec.ccnr_relax, но так как он действовал на всю файловую систему сразу, позднее было решено заменить его привилегией PARSEC_CAP_CCNR_RELAX, которую можно назначать на конкретные процессы. Указанную привилегию реализовали с расширенным режимом МКЦ, хотя к контролю целостности эта функция не имеет прямого отношения.

На объекты можно установить следующие мандатные атрибуты:

  • Атрибут EHOLE (англ. Entity Hole — сущность «дырка») — может быть установлен на низкоцелостные файлы с нулевой классификационной меткой, что делает их доступными на запись для процессов с любой классификационной меткой.

    Данный атрибут допустимо назначать только на файлы устройств и сокетов, которые не позволяют считывать записанную в них информацию, например, /dev/null. Устанавливать атрибут EHOLE на обычные файлы недопустимо, так как это сделает возможным создание каналов утечки информации.

  • Атрибут WHOLE (англ. Write Hole — «дырка» на запись) — может быть установлен на файлы с максимальной классификационной меткой и делает их доступными на запись для процессов с любой классификационной меткой.

    По умолчанию в системе нет объектов, на которые установлен атрибут WHOLE. Данный атрибут может быть назначен на файлы журналов, в которые логируют свои события приложения, используемые пользователями с разным уровнем конфиденциальности, чтобы исключить возможность разглашения секретной информации, содержащейся в сообщениях об ошибках. Однако следует учитывать, что процессы смогут не только добавлять строки в такие файлы, но и удалять все содержимое, т.е. мандатный контроль не защитит вас от потери информации из этих журналов.

Чтобы получить полный список файлов, на которые установлен атрибут ehole или whole, воспользуйтесь следующей командой:

find / -exec pdp-ls -MXda {} \; 2> /dev/null | grep ':ehole'

Особенность работы МРД с домашними каталогами пользователей

Для того, чтобы пользователь, вошедший в систему с классификационной меткой, имел права на запись в своем домашнем каталоге, операционная система Astra Linux для каждой классификационной метки создает отдельный каталог в папке /home/.pdp/<username> и монтирует его в момент входа в систему. Факт монтирования каталога можно увидеть, например, в файле mountinfo:

localadmin@astra:~$ cat /proc/self/mountinfo | grep home
166 132 8:1 /home/localadmin /home/.pdp/localadmin/l0i0c0x0t0x0 rw,relatime master:1 - ext4 /dev/sda1 rw,errors=remount-ro
167 132 8:1 /home/.pdp/localadmin/l2i0c0x1t0x0 /home/localadmin rw,relatime master:1 - ext4 /dev/sda1 rw,errors=remount-ro

Учитывая эту особенность работы системы, пользователь, выполнивший вход с уровнем «Секретно», не сможет увидеть на рабочем столе файл, созданный из-под уровня «ДСП», не смотря на то, что уровень Секретно выше уровня ДСП, т.к. в этом случае пользователь будет обращаться к совершенно другому каталогу.

Имена домашних каталогов имеют вид «l2i0c0x2t0x0», где:

  • l2 – определяет уровень конфиденциальности (Level);

  • i0 – определяет уровень целостности (Integrity);

  • c0x2 – определяет категорию конфиденциальности (Category);

  • t0x0 – определяет категорию целостности (caTegory).

Перечень всех каталогов с значениями их меток безопасности можно получить с помощью утилиты pdp-ls, которую нужно вызвать с ключом -M (–mac):

localadmin@astra:~$ sudo pdp-ls -M /home/.pdp/localadmin/
итого 12
drwx--------- 2 localadmin localadmin Документы_общего_пользования:Низкий:Нет:0x0 l0i0c0x0t0x0
drwx------m-- 16 localadmin localadmin Секретно:Низкий:Мотострелковые_войска:0x0 l1i0c0x1t0x0
drwx------m-- 16 localadmin localadmin Совершенно_секретно:Низкий:Танковые_войска:0x0 l2i0c0x2t0x0

Следует обратить внимание еще на две особенности работы системы:

  • Уровень и категория целостности присутствует в именах каталогов, но эти значения фактически не используются и всегда равны «i0» и «t0x0» соответственно, т.е. особенность работы с домашними каталогами затрагивает только мандатное управление доступом.

    Примечание

    Именно по этой причине в режимах защиты «Смоленск» и «Воронеж» вход локального администратора под низким уровнем целостности сопровождается ошибками, т.к. некоторые файлы в его домашнем каталоге создаются с высоким уровнем МКЦ.

  • Каталог «l0i0c0x0t0x0», соответствующий нулевой метке безопасности, по факту не используется и остается пустым. Вместо него используется обычный каталог /home/localadmin. По этой причине пользователь не сможет получить доступ к своим личным файлам с нулевой меткой конфиденциальности, если выполнит вход с категорией или уровнем конфиденциальности (ненулевой классификационной меткой), т.к. в эту точку будет смонтирован специальный каталог.

Бизнес-сценарий использования МРД

Настройка уровней и категорий конфиденциальности

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

  1. Войдите в систему локальным администратором с высоким уровнем целостности, который имеет право выполнять команды от имени root с использованием утилиты sudo.

  2. Откройте оснастку Параметры системы ‣ Безопасность ‣ Политика безопасности.

  3. Откройте страницу Мандатные атрибуты.

  4. На вкладке Категории настройте, например, следующие записи:

  • 0 – Мотострелковые_войска

  • 1 – Танковые_войска

  • 2 – Ракетные_войска_и_артиллерия

  • 3 – Войска_ПВО_Сухопутных_войск

  • 4 – Специальные_войска_и_службы

../_images/aldpro_mod_13_img35.png

рис. 442 Настройка категорий конфиденциальности

  1. На вкладке Уровни конфиденциальности удалите созданные ранее уровни и создайте, например:

  • 0 – Документы_общего_пользования

  • 1 – Для_служебного_пользования

  • 2 – Секретно

  • 3 – Совершенно_секретно

  • 4 – Особой_важности

../_images/aldpro_mod_13_img40.png

рис. 443 Настройка уровней конфиденциальности

  1. В файле /usr/sbin/pdp-init-fs поднимите значение максимального уровня конфиденциальности sysmaxlev до 4:

localadmin@astra:~$ sudo cat /usr/sbin/pdp-init-fs
#!/bin/bash
mac_ena=`cat /parsecfs/mac_enabled 2> /dev/null`;
# max values for label parts
sysmaxlev=4
...
  1. Перезагрузите операционную систему компьютера, чтобы изменения вступили в силу.

Создание структуры каталогов для секретных документов

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

  1. Войдите в систему локальным администратором с высоким уровнем целостности, который имеет право выполнять команды от имени root с использованием утилиты sudo.

  2. Создайте в корне системного диска каталог «Документы», назначьте на него максимальный уровень конфиденциальности (4), все доступные в системе категории (-1) и атрибут ccnr, чтобы в этом каталоге можно было хранить объекты с любыми метками конфиденциальности:

sudo mkdir /Документы
sudo pdpl-file 4:0:-1:ccnr /Документы
  1. Создайте каталог «Мотострелковые_войска», назначьте на него максимальный уровень конфиденциальности (4), категорию «Мотострелковые_войска» (т.е. значение 0x1, что в двоичном виде соответствует числу 0b1) и атрибут ccnr, чтобы в этом каталоге можно было хранить секретные документы мотострелковых войск с разными уровнями конфиденциальности:

sudo mkdir /Документы/Мотострелковые_войска
sudo pdpl-file 4:0:0x1:ccnr /Документы/Мотострелковые_войска
  1. Создайте каталоги по уровням секретности, назначьте на них категорию «Мотострелковые_войска» 0x1 и соответствующий уровень конфиденциальности:

sudo mkdir /Документы/Мотострелковые_войска/Документы_общего_пользования
sudo pdpl-file 0:0:0x1:0 /Документы/Мотострелковые_войска/Документы_общего_пользования

sudo mkdir /Документы/Мотострелковые_войска/Для_служебного_пользования
sudo pdpl-file 1:0:0x1:0 /Документы/Мотострелковые_войска/Для_служебного_пользования

sudo mkdir /Документы/Мотострелковые_войска/Секретно
sudo pdpl-file 2:0:0x1:0 /Документы/Мотострелковые_войска/Секретно

sudo mkdir /Документы/Мотострелковые_войска/Совершенно_секретно
sudo pdpl-file 3:0:0x1:0 /Документы/Мотострелковые_войска/Совершенно_секретно

sudo mkdir /Документы/Мотострелковые_войска/Особой_важности
sudo pdpl-file 4:0:0x1:0 /Документы/Мотострелковые_войска/Особой_важности

Повторите действия для остальных категорий конфиденциальности.

  1. Настройте дискреционные права для пользователя localadmin:

sudo chmod -R 700 /Документы/
sudo setfacl --modify u:localadmin:rx /Документы/

sudo setfacl --recursive --modify u:localadmin:rwx,d:u:localadmin:rwx /Документы/Мотострелковые_войска/
sudo setfacl --modify u:localadmin:rx /Документы/Мотострелковые_войска/

Повторите действия для остальных категорий конфиденциальности.

Настройка учетных записей для работы с секретными документами

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

  1. Войдите в систему локальным администратором с высоким уровнем целостности, который имеет право выполнять команды от имени root с использованием утилиты sudo.

  2. Откройте оснастку Параметры системы ‣ Безопасность ‣ Политика безопасности.

  3. Откройте страницу Пользователи ‣ localadmin.

  4. На вкладке МРД настройте:

  • Максимальный уровень конфиденциальности «4:Особой_важности»

  • Максимальные категории конфиденциальности 0-4

../_images/aldpro_mod_13_img45.png

рис. 444 Настройка учетной записи localadmin

  1. Попробуйте выполнить вход в систему с уровнем конфиденциальности «Особой_важности» и категорией «Мотострелковые_войска».

Ограничение доступа к документам через механизм мандатного управления доступом

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

  1. Выполните вход в систему пользователем localadmin с уровнем конфиденциальности «Секретно» и категорией «Мотострелковые_войска».

  2. Проверьте, что в документах вы можете видеть только каталог «Мотострелковые_войска», а внутри него папки не выше уровня «Секретно»:

localadmin@astra:~$ ls -l /Документы/
итого 4
drwxr-xr-x 7 root root 4096 авг 20 10:46 Мотострелковые_войска
localadmin@astra:~$ ls -l /Документы/Мотострелковые_войска/
итого 12
drwxr-xr-x 2 root root 4096 авг 20 10:44 Для_служебного_пользования
drwxr-xr-x 2 root root 4096 авг 20 10:43 Документы_общего_пользования
drwxr-xr-x 2 root root 4096 авг 20 10:56 Секретно
  1. Проверьте, что вы можете создать файл в каталоге с тем же уровнем конфиденциальности:

localadmin@astra:~$ echo "Секретная информация" > /Документы/Мотострелковые_войска/Секретно/документ.txt
localadmin@astra:~$ cat /Документы/Мотострелковые_войска/Секретно/документ.txt
Секретная информация
  1. Проверьте, что вы не можете рассекретить информацию путем копирования файлов в каталоги с более низким уровнем конфиденциальности:

localadmin@astra:~$ cp /Документы/Мотострелковые_войска/Секретно/документ.txt /Документы/Мотострелковые_войска/Для_служебного_пользования/
cp: невозможно создать обычный файл '/Документы/Мотострелковые_войска/Для_служебного_пользования/документ.txt': Отказано в доступе

Попробуйте еще раз, используя операции чтения/записи:

localadmin@astra:~$ cat /Документы/Мотострелковые_войска/Секретно/документ.txt > /Документы/Мотострелковые_войска/Для_служебного_пользования/документ.txt
bash: /Документы/Мотострелковые_войска/Для_служебного_пользования/документ.txt: Отказано в доступе

Засекречивание документов

Изменять метки безопасности объектов файловой системы с помощью утилиты pdpl-file может только администратор МКЦ/МРД, но создать поток, приводящий к тому, что информация из файлов с низкой классификационной меткой попадет в файлы с высокой классификационной меткой может любой пользователь, т.к. это не приведет к разглашению секретной информации. Для этого достаточно будет просто скопировать файлы в соответствующий каталог.

localadmin@astra:~$ cp /usr/bin/ls /Документы/Мотострелковые_войска/Совершенно_секретно/
localadmin@astra:~$ cp /Документы/Мотострелковые_войска/Секретно/документ.txt /Документы/Мотострелковые_войска/Совершенно_секретно/
localadmin@astra:~$ pdp-ls -M /Документы/Мотострелковые_войска/Совершенно_секретно/*
-rwxr-x---+m-- 1 localadmin localadmin Совершенно_секретно:Низкий:Мотострелковые_войска:0x0
/Документы/Мотострелковые_войска/Совершенно_секретно/ls
-rw-rw----+m-- 1 localadmin localadmin Совершенно_секретно:Низкий:Мотострелковые_войска:0x0
/Документы/Мотострелковые_войска/Совершенно_секретно/документ.txt

Рассекречивание документов

Если требуется рассекретить информацию или передать ее в смежный департамент, требуется привлечь администратора. Допустим, нам нужно передать часть файлов в танковые войска.

  1. Сотрудник должен войти в систему с категорией «Мотострелковые_войска» и уровнем «Секретно», чтобы подготовить каталог с документами, которые подлежат передаче в смежный департамент. Например:

localadmin@astra:~$ mkdir /Документы/Мотострелковые_войска/Секретно/Передать_в_танковые_войска
localadmin@astra:~$ cp /Документы/Мотострелковые_войска/Секретно/документ.txt /Документы/Мотострелковые_войска/Секретно/Передать_в_танковые_войска/
localadmin@astra:~$ mkdir /Документы/Мотострелковые_войска/Секретно/Передать_в_танковые_войска/доп_каталог
localadmin@astra:~$ echo "Еще одна секретная информация" > /Документы/Мотострелковые_войска/Секретно/Передать_в_танковые_войска/доп_каталог/документ2.txt
  1. По заявке от сотрудников администратор на уровне дискреционных прав доступа блокирует возможность редактирования этого каталога:

sudo chmod -R 100 /Документы/Мотострелковые_войска/Секретно/Передать_в_танковые_войска
sudo setfacl --recursive --modify m::r,d:m:r /Документы/Мотострелковые_войска/Секретно/Передать_в_танковые_войска
  1. Сотрудники собирают комиссию и по итогам ее заседания направляют администратору заявку на передачу или рассекречивание документов.

  2. Далее администратор выполняет перемещение:

4.1 Сначала нужно перенести каталог в корень диска, т.к. на него назначены все категории, уровни и атрибут CCNR. Требуется именно перемещать, чтобы сохранились метки безопасности.

sudo mv /Документы/Мотострелковые_войска/Секретно/Передать_в_танковые_войска /

4.2 Затем на каталоги нужно установить атрибут CCNR и расширить классификационную метку, чтобы она включала классификационные метки источника и приемника. Такие настройки нужны, чтобы можно было изменить классификационные метки файлов. Так как новая метка больше текущей метки каталогов, изменять метки нужно сверху вниз с прямой сортировкой:

sudo pdpl-file --recursive 2:0:0x3:ccnr /Передать_в_танковые_войска

4.3 Затем нужно установить целевую метку, снимая атрибут CCNR с каталогов. Так как новая метка меньше текущей метки каталогов, изменять метки нужно снизу вверх с обратной сортировкой:

sudo pdpl-file --recursive --reverse 2:0:0x2:0 /Передать_в_танковые_войска
  1. В завершение остается переместить документы в каталог-приемник:

sudo mv /Передать_в_танковые_войска /Документы/Танковые_войска/Секретно
sudo ls -l /Документы/Танковые_войска/Секретно
...
d--xr-----+ 3 localadmin localadmin 4096 авг 20 18:18 Передать_в_танковые_войска
...

Использование внешних носителей

Если на предприятии введен режим секретности, то администраторам нужно четко понимать как этот механизм защиты работает не только с локальными дисками, но и с внешними носителями информации.

Использование внешних носителей в VirtualBox

Если вы используете среду виртуализации, то для работы с внешними накопителями вам нужно пробросить USB-устройство в виртуальную машину. В среде VirtualBox, например, для этого нужно выполнить следующие действия:

  1. Выключите виртуальную машину и откройте окно настроек.

  2. На вкладке USB включите «Контроллер USB 3.0 (xHCI)», затем подключите накопитель к компьютеру и добавьте его в фильтр устройств, выбрав из списка.

  3. Извлеките USB-накопитель и включите виртуальную машину. С подключенным накопителем виртуальная машина может не загрузиться.

  4. Подключите USB-накопитель к компьютеру и смонтируйте его внутри виртуальной машины.

../_images/aldpro_mod_13_img50.png

рис. 445 Настройка внешнего USB-устройства

Неучтенные носители информации

По умолчанию все USB-устройства считаются неучтенными, т.к. для них не созданы индивидуальные udev-правила, определяющие параметры их подключения в системе.

Запрет монтирования неучтенных носителей

В операционной системе Astra Linux обычные пользователи подключают USB-накопители из файлового менеджера fly-fm или через апплет из области уведомлений (fly-reflex-service). В техническом плане оба приложения используют команду mount, поэтому такие настройки являются временными и не сохраняются между загрузками системы.

Монтирование любых внешних носителей по умолчанию разрешается всем пользователям ALSE через участие в группе floppy (англ. дискета), что указано в udev-правиле /lib/udev/rules.d/91-groupfloppy.rules. Порядок такого монтирования определяется в файле /etc/fstab.pdac.

localadmin@astra:~$ cat /lib/udev/rules.d/91-group-floppy.rules
#
ACTION=="remove", GOTO="group_floppy_end"
SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394|mmc|pcmcia", GROUP="floppy"
SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394|mmc|pcmcia", ENV{ID_FS_TYPE}=="?*",
SYMLINK+="%k_$env{ID_FS_TYPE}", RUN+="/bin/ln -f /dev/%k /dev/%k_$env{ID_FS_TYPE}"
LABEL=="group_floppy_end"

Возможность монтирования любых внешних носителей создает угрозу утечки секретной информации, т.к. носители, отформатированные в EXT4, позволяют записывать на них в том числе и файлы с метками конфиденциальности. Поэтому в операционной системе Astra Linux есть утилита astra-mount-lock, которая позволяет запретить монтирование внешних носителей одной командой:

sudo astra-mount-lock enable

При выполнении команды в системе вносятся следующие два изменения:

  1. В файле /lib/udev/rules.d/91-group-floppy.rules группа floppy заменяется на astra-admin:

localadmin@astra:~$ cat /lib/udev/rules.d/91-group-floppy.rules
#
ACTION=="remove", GOTO="group_floppy_end"
SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394|mmc|pcmcia", GROUP="astra-admin"
SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394|mmc|pcmcia", ENV{ID_FS_TYPE}=="?*",
SYMLINK+="%k_$env{ID_FS_TYPE}", RUN+="/bin/ln -f /dev/%k /dev/%k_$env{ID_FS_TYPE}"
LABEL=="group_floppy_end"
  1. Создается udev-правило /usr/lib/udev/rules.d/73-astra-disable-unpreviledged-mtp-access.rules:

localadmin@astra:~$ cat /usr/lib/udev/rules.d/73-astra-disable-unpreviledged-mtp-access.rules
# disables unpreviledged access to MTP devices
ENV{ID_MTP_DEVICE}=="?*", GROUP="astra-admin", TAG-="uaccess"

После внесения указанных изменений обычные пользователи смогут монтировать только учтенные накопители, которые были зарегистрированы в системе администратором заранее. Для каждого зарегистрированного устройства создается индивидуальное udev-правило с параметрами монтирования.

Чтобы отключить блокировку неучтенных носителей администратору нужно будет выполнить ту же команду с параметром disable. При этом правило 73-astra-disable-unpreviledged-mtp-access.rules будет удалено, а в файле 91-group-floppy.rules группа astra-admin будет заменена обратно на floppy.

sudo astra-mount-lock disable

Неучтенные носители FAT и NTFS

Монтирование внешних носителей выполняется в точку /run/user/<user_id>/media/<device_id>, на которую устанавливаются права доступа rwxr-xr-x (755), а владельцами назначаются пользователь, от имени которого выполняется монтирование, и его первичная группа. Учитывая, что разметка FAT и NTFS не позволяет хранить дополнительную метаинформацию о правах доступа Linux, все вложенные файлы и папки наследуют права от точки монтирования.

В части мандатных прав на точку монтирования по умолчанию устанавливается нулевая классификационная метка, поэтому пользователь, вошедший в систему под какой-то категорией или уровнем конфиденциальности, сможет получить доступ к носителю только на чтение. Если требуется, чтобы пользователь мог использовать внешний носитель в режиме на запись при работе с секретными документами, это устройство нужно зарегистрировать в системе, т.е. сделать учтенным.

Неучтенные носители EXT4

Если носитель отформатирован в EXT4, то его можно использовать для хранения конфиденциальных документов, что может создавать угрозу утечки секретной информации. При введении на предприятии режима секретности настоятельно рекомендуется установить запрет на монтирование неучтенных устройств.

Подготовка носителя для хранения секретной информации включает следующие действия:

  1. Создайте точку монтирования в корне диска или любом другом каталоге с максимальной меткой конфиденциальности и атрибутом ccnr, например, в /run:

sudo mkdir /run/media
  1. Примонтируйте внешний носитель в эту точку. Например, если устройство было распознано как sdb, то для монтирования первого раздела нужно выполнить команду:

sudo mount /dev/sdb1 /run/media
  1. Теперь создайте каталоги для хранения документов и настройте метки безопасности.

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

sudo pdpl-file 4:0:-1:ccnr /run/media

После назначения метки безопасности на корень диска мы сможем создать каталоги для хранения секретных документов, как это было описано в разделе 2.2.

sudo mkdir /run/media/Мотострелковые_войска
sudo pdpl-file 4:0:0x1:ccnr /run/media/Мотострелковые_войска

sudo mkdir /run/media/Мотострелковые_войска/Документы_общего_пользования
sudo pdpl-file 0:0:0x1:0 /run/media/Мотострелковые_войска/Документы_общего_пользования

sudo mkdir /run/media/Мотострелковые_войска/Для_служебного_пользования
sudo pdpl-file 1:0:0x1:0 /run/media/Мотострелковые_войска/Для_служебного_пользования

sudo mkdir /run/media/Мотострелковые_войска/Секретно
sudo pdpl-file 2:0:0x1:0 /run/media/Мотострелковые_войска/Секретно

sudo mkdir /run/media/Мотострелковые_войска/Совершенно_секретно
sudo pdpl-file 3:0:0x1:0 /run/media/Мотострелковые_войска/Совершенно_секретно

sudo mkdir /run/media/Мотострелковые_войска/Особой_важности
sudo pdpl-file 4:0:0x1:0 /run/media/Мотострелковые_войска/Особой_важности
  1. Осталось только настроить дискреционные права.

Без настройки дискреционных прав доступа пользователь не сможет воспользоваться внешним носителем EXT4. Если устройство было отформатировано с помощью утилиты fly-admin-format, то на корень диска по умолчанию выставляются права 755 (rwxr-xr-x), а владельцами назначаются пользователь, из-под которого выполнялось форматирование, и его первичная группа. Каталоги, созданные нами из-под sudo будут принадлежать пользователю root.

Чтобы сделать внешний носитель доступным на запись для всех пользователей, установите права 775 (rwxrwxr-x) и в качестве владельца назначьте специальную группу floppy c gid=25, которая используется в Astra Linux для разрешения полуавтоматического монтирования дисков:

sudo chmod -R 775 /run/media/
sudo chown -R root:floppy /run/media/

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

sudo chmod -R 770 /run/media/
sudo chown -R kuznetsov:kuznetsov /run/media/

Теперь можно проверить носитель под разными уровнями секретности. Права доступа будут работать точно также, как на локальном диске.

Учтенные носители

Как уже было сказано ранее, внешние носители, зарегистрированные в системе заранее, называются учтенными. Для каждого из них создается индивидуальное udev-правило, с помощью которого можно не только разрешить монтирование этого устройства конкретному пользователю, но и определить дополнительные параметры монтирования.

Учтенные носители FAT

Для регистрации устройства нужно открыть графическую оснастку Параметры системы ‣ Безопасность ‣ Политика безопасности, выбрать в дереве узел Устройства и правила и нажать кнопку «+», чтобы создать новый элемент.

../_images/aldpro_mod_13_img55.png

рис. 446 Окно для добавления внешнего устройства до его подключения к компьютеру

Далее нужно подключить USB-накопитель к компьютеру, приложение распознает это событие и отобразит параметры устройства, чтобы вы могли выбрать свойства, по которым нужно выполнять идентификацию носителя.

../_images/aldpro_mod_13_img60.png

рис. 447 Окно для добавления внешнего устройства после его подключения к компьютеру

Для каждого зарегистрированного носителя создается отдельное udev-правило, поэтому крайне важно однозначно идентифицировать физическое устройство. Лучше всего для этого подходит свойство ID_SERIAL, которое включает серийный номер, емкость носителя и информацию о производителе, например, «JetFlash_Transcend_32GB_08XBQDCPX22PL4WH-0:0». Полный перечень всех свойств можно получить с помощью утилиты udevadm:

localadmin@astra:~$ sudo udevadm info -a -n /dev/sdb1

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

   looking at device '/devices/pci0000:00/0000:00:0c.0/usb2/2-1/2- 1:1.0/host3/target3:0:0/3:0:0:0/block/sdb/sdb1':
     KERNEL=="sdb1"
     SUBSYSTEM=="block"
     DRIVER==""
     ATTR{size}=="59713542"
     ...

Имя устройства, под которым носитель был распознан в системе, можно узнать с помощью утилиты fdisk:

localadmin@astra:~$ sudo fdisk -l
...
Диск /dev/sdb: 28,5 GiB, 30579621888 байт, 59725824 секторов
Disk model: Transcend 32GB
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xa12438b8

Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sdb1                63 59713604 59713542   28,5G       b W95 FAT32

Назовем регистрационную запись по имени владельца устройства localadmin-usb-drive и на вкладке «Общие» укажем следующие параметры монтирования:

  • Дискреционные права, которые будут назначены на файлы /dev/sdb*, соответствующие этому устройству:

    • Пользователь: localadmin, Чтение, Запись

    • Группа: localadmin, Чтение

    • Остальные: нет

  • Свойства для идентификации устройства:

    • Тип: ENV

    • Ключ: ID_SERIAL

    • Операция: ==

    • Значение: «JetFlash_Transcend_32GB_08XBQDCPX22PL4WH-0:0»

../_images/aldpro_mod_13_img65.png

рис. 448 Общие параметры зарегистрированного устройства

На вкладке «МРД» укажем следующие параметры:

  • Уровень: «2:Секретно»

  • Категории: «0:Мотострелковые_войска»

../_images/aldpro_mod_13_img70.png

рис. 449 Параметры мандатного управления доступом зарегистрированного устройства

Мандатные права доступа, указанные на этой вкладке, будут установлены на точку монтирования внешнего носителя информации /run/user/<user_id>/media/<device_id>.

При сохранении регистрационной записи устройства будет создано следующее udev-правило:

localadmin@astra:~$ cat /etc/udev/rules.d/99zz_PDAC_LOCAL_localadmin-usb-drive.rules
#Parsec DevAC udev rule 4 device "not descripted"
ENV{ID_SERIAL}=="JetFlash_Transcend_32GB_08XBQDCPX22PL4WH-0:0", OWNER="localadmin",
GROUP="localadmin", MODE="640", PDPL="2:0:0x1:0x0!", AUDIT="o:0x0:0x0",
GOTO="BLOCK_DEV"
GOTO="END"
LABEL="BLOCK_DEV"
SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="?*", SYMLINK+="%k_$env{ID_FS_TYPE}",
RUN+="/bin/ln -f /dev/%k /dev/%k_$env{ID_FS_TYPE}"
LABEL="END"

Примечание

если у вас есть какие-то общие фильтры, которые вы хотели бы использовать сразу для нескольких устройств (например, производитель устройства, тип подключения и т.д.), то вы можете определить их с помощью правил и добавить к регистрационным записям на соответствующей вкладке.

Теперь, даже если запрет на монтирование незарегистрированных внешних устройств не включен, этот носитель сможет монтировать только localadmin. Если пользователь выполнит вход в систему с такой же меткой конфиденциальности, как у зарегистрированного устройства, то файлы будут доступны на чтение/запись. Если метка пользователя окажется выше, то файлы будут доступны только для чтения.

Учтенные носители NTFS

Для работы с носителями NTFS используется дополнительное программное обеспечение ntfs-3g и fuse, в котором еще нет поддержки мандатного управления доступом, поэтому при регистрации таких носителей с ними можно работать только на нулевой классификационной метке. В остальном механизм работает точно так же, как в случае с носителями FAT.

Учтенные носители EXT4

Регистрация носителей EXT4 позволяет разрешить их монтирование в системе, даже если включен запрет на использование внешних устройств с помощью утилиты astra-mount-lock. Дискреционные права доступа, указанные в регистрационной записи, будут установлены на файлы устройства /dev/sdb*, что позволит выполнить монтирование только тому пользователю, который указан в качестве владельца или является участником группы-владельца. Но права на точку монтирования /run/user/<user_id>/media/<device_id> и все вложенные файлы и папки будут определяться той метаинформацией, которая записана на самом устройстве.

Тоже самое и в отношении мандатных прав: настройки, указанные в регистрационной записи, для устройства, отформатированного в EXT4, не будут иметь никакого значения. Файлы и папки будут иметь те метки безопасности, которые сохранены в расширенных атрибутах этих объектов.

Резюме

Сведем указанную выше информацию в общую таблицу.

табл. 37 Возможность монтирования внешних носителей в Astra Linux

Тип носителя

Тип файловой системы

Возможности монтирования

Неучтенный носитель

vfat/ntfs

Пользователь сможет примонтировать неучтенный накопитель FAT или NTFS, если не включен запрет на монтирование неучтенных устройств.

На все файлы и папки будут установлены дискреционные права rwxr-xr-x (755), а владельцами назначены пользователь, от имени которого выполнено монтирование, и его первичная группа.

На уровне мандатного контроля всем файлам и папкам будет назначена нулевая классификационная метка.

ext4, а так же ext2/ext3/xfs

Пользователь сможет примонтировать неучтенный накопитель EXT, если не включен запрет на монтирование неучтенных устройств.

Все файлы и папки будут иметь такие дискреционные права и метки безопасности, какие определены на самом носителе информации.

Учтенный носитель для другого пользователя

любая

Монтирование устройства запрещено

Учтенный носитель для текущего пользователя

vfat

Пользователь сможет примонтировать учтенный накопитель FAT, если он указан владельцем на вкладке «Общие» в регистрационной записи устройства, или входит в состав участников группы-владельца.

На все файлы и папки будут установлены дискреционные права, указанные в

На уровне мандатного контроля всем объектам будет назначена метка, определенноя на вкладке «МРД».

ntfs

Пользователь сможет примонтировать учтенный накопитель NTFS при выполнении двух условий:

  • Пользователь должен быть указан владельцем на вкладке «Общие» в регистрационной записи устройства или входить в состав участников группы-владельца.

  • Пользователь должен выполнить вход с нулевой меткой конфиденциальности, а в регистрационной записи устройства на вкладке «МРД» должна быть установлена нулевая классификационная метка.

Дискреционные и мандатные права будут определяться также, как для учтенного носителя FAT:

  • На файлы и папки будут установленны дискреционные права, указанные в регистрационной записи устройства.

  • На уровне мандатного контроля всем объектам будет назначена нулевая метка, как определено на вкладке «МРД».

ext4, а так же ext2/ext3/xfs

Пользователь сможет примонтировать учтенный накопитель EXT, если он указан владельцем на вкладке «Общие» в регистрационной записи устройства, или входит в состав участников группы-владельца.

Все файлы и папки будут иметь такие дискреционные и мандатные права доступа, какие определены на самом носителе информации.

Архивирование и восстановление

Администратор может создать архив с сохранением меток безопасности при помощи утилиты tar с ключом –xattrs. Например, чтобы заархивировать все домашние каталоги пользователей, включая объекты с метками конфиденциальности, нужно выполнить следующую команду:

sudo tar --xattrs --acls -cvzf /opt/home.tgz /home/

где:

  • –xattrs — включает поддержку расширенных атрибутов;

  • –acls — включает поддержку POSIX ACL;

  • -c (create) — указывает, что нужно создать архив;

  • -v (verboze) — включает детальное отображение информации;

  • -z (gzip) — указывает, что нужно не только архивировать файлы, но и сжимать их с применением алгоритма gzip;

  • -f (file) — указывает, что далее будет передано имя файла архива;

  • /opt/home.tgz — задает имя и место расположения архива (при этом следует учитывать, что файл не будет защищен механизмом мандатного управления доступом);

  • /home/ — указывает архивируемый каталог.

Перед восстановлением файлов из архива необходимо разрешить процессам использовать привилегию PARSEC_CAP_UNSAFE_SETXATTR. Для этого нужно записать значение «1» в файл /parsecfs/unsecure_setxattr:

echo 1 | sudo tee /parsecfs/unsecure_setxattr

Теперь для восстановления файлов из архива с сохранением расширенных атрибутов нужно выполнить следующую команду:

где:

  • execaps — утилита позволяет запустить процесс с назначением привилегии PARSEC;

  • -с — параметр позволяет определить назначаемую привилегию;

  • 0x1000 — числовое значение привилегии PARSEC_CAP_UNSAFE_SETXATTR (вывести полный список привилегий с их кодами можно с помощью команды sudo usercaps -M);

  • tar — название запускаемой утилиты;

  • –xattrs — включает поддержку расширенных атрибутов;

  • –acls — включает поддержку POSIX ACL;

  • –xattrs-include=security.{PDPL,AUDIT,DEF_AUDIT} — определяет шаблон включения для ключей xattr (мандатные атрибуты, атрибуты аудита и атрибуты аудита по умолчанию);

  • -x (extract) — указывает, что нужно извлечь файлы из архива;

  • -v (verboze) — включает детальное отображение информации;

  • -f (file) — указывает, что далее будет передано имя файла архива;

  • /opt/home.tgz — задает имя и место расположения архива;

  • / — задает путь для извлечения файлов.

После восстановления файлов нужно вернуть значение переменной unsecure_setxattr в исходное состояние:

echo 0 | sudo tee /parsecfs/unsecure_setxattr

Модель мандатного контроля целостности (МКЦ)

Неиерархические уровни (категории) целостности

Модель мандатного контроля целостности предназначена для защиты операционной системы от несанкционированного изменения системных файлов, в том числе внедрения программных закладок. Модель оперирует уровнями целостности, под которыми понимается степень доверия к объектам и субъектам системы.

Если модель МРД следует политике WURD, то классическая модель МКЦ, которую по имени автора называют еще моделью Кена Биба, поступает с точностью до наоборот «no write up & no read down» (англ. никакой записи вверх и никакого чтения вниз). В соответствии с этим подходом субъекты НЕ должны иметь доступ на запись к тем объектам, уровень целостности которых окажется выше их собственного уровня, и НЕ должны иметь доступ на чтение тех объектов, уровень которых окажется ниже.

../_images/aldpro_mod_13_img75.png

рис. 450 Права доступа по модели Биба

В Astra Linux с версии 1.8.x появился атрибут SSI, который позволяет ограничить доступ на чтение, но в версии 1.7.x используется более простая политика, которая запрещает только запись вверх, но не накладывает никаких ограничений на чтение файлов.

Минимальный уровень целостности имеет значение 0 и называется «низким», он предназначен для повседневной работы обычных пользователей. Максимальный уровень целостности max_ilev имеет значение 63 по умолчанию и называется «высоким», он предназначен для администрирования системы. Наименования «низкий» и «высокий» применительно к значениям 0 и 63 могут ввести в заблуждение, так как при сопоставлении неиерархических уровней (категорий) целостности значения сравниваются не в десятичной системе счисления, а по битовым маскам, так же как в случае категорий МРД. Запись в объект будет разрешена только в том случае, если набор бит уровня целостности субъекта SL (англ. Subject Level) будет «включать» в себя все биты уровня объекта OL (англ. Object Level), т.е. SL & OL == SL. По этой причине уровень 32 (0b00100000) не выше и не ниже уровня 31 (0b00011111), так как эти значения являются несравнимыми.

Назначение первых шести изолированных уровней (категорий) целостности, которые могут быть назначены системным процессам и файлам, представлено в следующей таблице.

табл. 38 Назначение изолированных уровней целостности

Разряд (порядковый номер бита)

Значение в десятичной системе счисления

Значение в двоичной системе счисления

Назначение уровня

0

1

0b00000001

Сетевые службы

1

2

0b00000010

Виртуализация

2

4

0b00000100

Специальное ПО

3

8

0b00001000

Графический сервер

4

16

0b00010000

СУБД

5

32

0b00100000

Не используется

Уровень «63: высокий» в двоичной системе счисления представляет из себя число 0b00111111, в котором установлены шесть первых бит, и повышение максимального уровня МКЦ предполагает включение дополнительных разрядов, поэтому для этого параметра допустимы значения 63, 127, 255 и т.д. Уровень целостности в метке безопасности передается 32-битным числом, поэтому максимальное значение может быть увеличено до 4 294 967 295 (0хFFFF FFFF).

Для того чтобы изменить максимальный уровень МКЦ, нужно выполнить следующие действия:

  1. В файле /etc/parsec/micdb/1000 поднять максимальный уровень МКЦ локального администратора. По умолчанию «localadmin:3f», значение является числом в шестнадцатеричной системе счисления. Если планируется использовать уровень 127, то нужно вписать «localadmin:7f».

  2. В файле /etc/default/grub изменить значение переменной parsec.max_ilev в параметре GRUB_CMDLINE_LINUX_DEFAULT. По умолчанию 63, значение является числом в десятичной системе счисления.

  3. Выполнить команду «update-grub», чтобы обновить конфигурацию загрузчика, а затем перезагрузить систему, чтобы изменения вступили в силу. Значение файла /sys/module/parsec/parameters/max_ilev, которое загружается в переменную sysmaxilev (англ. System Maximum Integrity Level) в конфигурационном файле /usr/sbin/pdp-init-fs, обновится автоматически.

  4. Выполнить команду «set-fs-ilev» (англ. Set FileSystem Integrity Level), чтобы обновить метки целостности объектов файловой системы в соответствии с настройками конфигурационного файла /etc/parsec/fs-ilev.conf с учетом нового значения максимального уровня МКЦ.

Иерархические уровни целостности

В операционной системе Astra Linux, начиная с редакции 1.8, появились иерархические (линейные) уровни целостности, сопоставление которых выполняется не по битовым маскам, а по значениям в десятичной системе счисления, т.е. линейный уровень 32 выше уровня 31.

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

Настоящий документ посвящен вопросам администрирования мандатного контроля в редакциях 1.7.x, поэтому мы не будем подробно рассматривать особенности линейных уровней целостности. Данный раздел был добавлен только для того, чтобы упростить работу с дополнительными источниками информации.

Контейнеры объектов

Модель мандатного контроля целостности тоже учитывает метки, назначенные на родительские контейнеры, но в отличии от МРД на каталоги по умолчанию распространяется инвертированная политика CCNRI (англ. Container Clearance Negative Required Integrity), в соответствии с которой:

  • в каталоге могут находиться объекты с любым уровнем целостности, но не выше уровня целостности родительского каталога;

  • создать объект в каталоге может только тот пользователь, уровень целостности которого не ниже уровня целостности родительского каталога, при этом новым объектам по умолчанию присваивается низкий уровень целостности.

Процессы

В консоли Astra Linux пользователь может выполнить вход с любым уровнем целостности в диапазоне от нуля до максимального значения. Однако, обычным пользователям такое многообразие не требуется, поэтому в графическом приложении для входа fly-greet выбор ограничен двумя значениями «0: низкий» и «63: высокий».

Если пользователь выполнит вход в систему с высоким уровнем целостности, то рабочий стол будет окрашен в красный цвет, чтобы напоминать пользователю о том, что этот режим предназначен только для администрирования, а не повседневной работы. Учитывая, что высокий уровень целостности предназначен только для администрирования, пользователю запрещено входить в систему одновременно с высоким уровнем целостности и уровнем/категорией конфиденциальности.

Максимальный уровень целостности, разрешенный для пользователя, можно задать с помощью утилиты pdpl-user или в оснастке «Управление политикой безопасности», а значение сохраняется в текстовой базе /etc/parsec/micdb/<uid> в следующем формате:

Имя_пользователя : MAX_ILVL

Где:

  • Имя_пользователя – текстовый идентификатор пользователя, например, localadmin.

  • MAX_ILVL – максимально разрешенный уровень целостности.

../_images/aldpro_mod_13_img80.png

рис. 451 Максимальный уровень целостности учетной записи пользователя

Процессу графической оболочки fly-wm назначается уровень целостности, выбранный в момент входа, и далее все дочерние процессы автоматически наследуют это значение. Посмотреть мандатный контекст безопасности процесса можно с помощью утилиты pdpl-ps:

localadmin@astra:~$ sudo pdpl-ps $(pidof fly-wm)
1235 Документы_общего_пользования:Высокий:Нет:0x0!

Запустить процесс с другой меткой целостности может администратор мандатного контроля, используя утилиту pdp-exec. Например, в одном окне запустим еще один процесс bash с меткой безопасности 2:0:0x3:0 и посмотрим pid этого процесса:

root@astra:~# sudo pdp-exec -u localadmin -l 0:15:0:0 bash
localadmin@astra:/root$ echo $$
2109

В другом окне терминала можно будет проверить, что фактическая метка безопасности этого процесса действительно соответствует желаемому значению:

localadmin@astra:~$ sudo pdpl-ps 2109
2109 Документы_общего_пользования:15:Нет:0x0!

Расширенный режим

Расширенный режим МКЦ или «strict mode» появился в операционной системе Astra Linux с обновлений 1.7.2, 4.7.2 и 7.7. Этот режим является дальнейшим развитием механизмов мандатного контроля и предлагает более строгий набор правил для усиления защиты.

Расширенный режим затрагивает сразу все функции мандатного контроля, но т.к. основные изменения касаются все-таки МКЦ, то в названии акцент сделан именно на этой функции. Например, привилегия PARSEC_CAP_CCNR_RELAX, имеющая отношение к МРД, работает только в расширенном режиме МКЦ.

Включение расширенного режима МКЦ может нарушить работу стороннего программного обеспечения, поэтому перед его включением администратору нужно в тестовой среде провести всестороннее тестирование используемого ПО и необходимости его дополнительной настройки. Текущее состояние режима можно узнать с помощью утилиты astra-strictmode-control:

localadmin@astra:~$ sudo astra-strictmode-control status
АКТИВНО

Чтобы включить расширенный режим, нужно вызвать утилиту с параметром enable и перезагрузить систему:

localadmin@astra:~$ sudo astra-strictmode-control enable
localadmin@astra:~$ sudo reboot

При включении расширенного режима МКЦ в системе будут выполнены следующие настройки:

  1. В файле /etc/default/grub` в параметре GRUB_CMDLINE_LINUX_DEFAULT переменной parsec.strict_mode будет присвоено значение 1. По умолчанию переменная не определена.

  2. Будет выполнена команда «update-grub» для обновления конфигурации загрузчика.

  3. Будет выполнено назначение меток целостности на объекты файловой системы, в том числе на уже существующие домашние каталоги пользователей.

Включая расширенный режим МКЦ, следует понимать, что вернуться назад в обычный режим МКЦ с помощью штатной утилиты astra-strictmode-control не получится. Чтобы сделать это вручную, нужно выполнить следующую последовательность команд:

  1. Выключить МКЦ полностью командой sudo astra-mic-control disable

  2. В файле /etc/default/grub в параметре GRUB_CMDLINE_LINUX_DEFAULT удалить определение переменной parsec.strict_mode.

  3. Выполнить команду «update-grub» для обновления конфигурации загрузчика и перезагрузить систему.

  4. Выполнить утилиту unset-fs-ilev, чтобы сбросить все метки целостности. Утилита оставлена для обратной совместимости и представляет из себя обычный bash-скрипт, который вызывает утилиту set-fs-ilev с параметром zero и утилиту pdp-init-fs.

  5. Включить обычный МКЦ командой sudo astra-mic-control enable и перезагрузить компьютер ещё раз.

Следует указать несколько особенностей работы в расширенном режиме МКЦ:

  • Пользователь не может выбрать уровень целостности при входе в систему. Если он входит без уровня/категории конфиденциальности, то ему назначается максимально разрешенный уровень МКЦ. Поэтому при каждой перезагрузке ОС домашним каталогам всех пользователей, имеющим ненулевой уровень целостности, назначается этот уровень.

  • Процесс с высоким уровнем целостности не сможет напрямую запустить исполняемый код из файла с низким уровнем целостности.

  • Новым объектам назначается ненулевой уровень целостности как в обычном режиме, а уровень целостности родительского каталога.

  • Начинает работать мандатный атрибут irelax, но игнорируется привилегия PARSEC_CAP_IGNMACINT.

Изменение политики через мандатные атрибуты

На каталоги можно установить несколько атрибутов, но они не повлияют на работу механизмов мандатного контроля целостности:

  • Атрибут CCNRI (англ. Container Clearance Negative Required Integrity) — устарел. Его оставили для обратной совместимости, поэтому администратор может назначить этот атрибут на каталог, но получит предупреждение и поведение системы по факту не изменится, т.к. политика CCNRI действует по умолчанию. Следует также добавить, что в современных версиях операционной системы установить ранее используемую политику CCRI невозможно.

  • Атрибут СCNRA (англ. Container Clearance Negative Required All) — устарел. Он представлял из себя сумму атрибутов CCNR+CCNRI, поэтому с отказом от атрибута CCNRI отпала необходимость и в атрибуте CCNRA. При назначении атрибута CCNRA на каталог по факту устанавливается только атрибут CCNR.

  • Атрибут IRELAX (англ. Integrity Relax) — изменяет политику только в расширенном режиме МКЦ, о котором подробнее будет далее.

    Атрибут определяет, что каталог будет доступен на запись для процессов с любым уровнем целостности, а новым объектам будет присваиваться уровень целостности процесса, но не выше уровня целостности каталога, т.е. это будет результат логического умножения (конъюнкции) двух значений.

На объекты можно установить следующий мандатный атрибут:

  • Атрибут SILEV (англ. System Integrity Level – уровень целостности системных объектов) — назначается на системные исполняемые файлы, что позволяет запускать процессы с уровнем целостности файла, а не субъекта, который этот процесс запускает. Атрибут SILEV назначается в исключительных случаях, например, на утилиту passwd, которой нужно иметь возможность изменить высокоцелостный файл shadow, при том что пользователи вызывают утилиту из своих низкоцелостных сессий.

localadmin@astra:~$ pdp-ls -M /usr/bin/passwd
-rwsr-xr-xm-- 1 root root Документы_общего_пользования:Высокий:Нет:silev /usr/bin/passwd

Следует обратить внимание, что утилита passwd не редактирует файл /etc/shadow, а пересоздает его, поэтому в обычном режиме МКЦ у нового файла будет низкий уровень целостности, и он выпадет из-под защиты механизмов мандатного контроля до тех пор, пока администратор не восстановит правильные значения с помощью утилиты set-fs-ilev.

Для решения этой проблемы можно было бы создать задание cron, которое бы периодически восстанавливало уровень целостности таких файлов, но в этом случае все равно оставался бы период времени, в течение которого файл имел бы неправильное значение целостности, поэтому для системного решения проблемы был создан расширенный режим МКЦ.

С версии Astra Linux 1.8.x стали доступны два дополнительных атрибута:

  • Атрибут IINH (англ. Integrity Inherit) — изменяет политику только в расширенном режиме МКЦ, о котором было выше.

    Атрибут определяет, что каталог будет доступен на запись только для тех процессов, уровень целостности которых окажется не ниже уровня целостности каталога. Новые объекты наследуют уровень целостности родительского каталога, включая атрибут IINH.

  • Атрибут SSI (англ. System Secret Integrity) — присваивается каталогам и файлам для ограничения доступа на чтение и выполнение. При наличии данного атрибута у сущности доступ к ней на чтение и выполнение разрешается только субъектам (процессам) с метками целостности не ниже, чем у данной сущности. При этом если исполняемому бинарному файлу также присвоен атрибут silev, то ограничение доступа на выполнения к данному файлу не применяется.

Если свести всю информацию вместе, то получим два алгоритма, см. рис. рис. 452 и рис. 453.

../_images/aldpro_mod_13_img85.png

рис. 452 Правила МКЦ при создании объектов

../_images/aldpro_mod_13_img90.png

рис. 453 Правила МКЦ при изменении объектов

Бизнес-сценарий использования МКЦ

Использование МКЦ в операционных системах Astra Linux 1.7.x не возлагает на ИТ-специалистов каких-то специфических задач системного администрирования, т.к. неиерархический уровень целостности, реализованный в этих версиях, является в первую очередь инструментом разработчиков и позволяет им разнести службы по разным «песочницам» с помощью категорий, чтобы повысить общий уровень безопасности системы.

Поэтому сейчас системным администраторам достаточно понимать только общие принципы этого механизма, чтобы при необходимости выполнить дополнительные указания разработчиков или произвести отладку работы системы. Но ситуация должна начать меняться с переходом на ОС Astra Linux 1.8.x, в которой появился линейный уровень целостности, который позволяет обычным пользователям запускать прикладные приложения на различных уровнях доверия.

Функции мандатного контроля в домене

Настройки мандатного доступа доменных пользователей

Настройка через веб-интерфейс FreeIPA

Служба каталога FreeIPA из состава Astra Linux позволяет централизованно управлять настройками мандатного доступа доменных пользователей. В каталоге эта информация хранится в следующих атрибутах учетной записи:

  • x-ald-user-mac — минимально и максимально разрешенные классификационные метки пользователя;

  • x-ald-user-mic-level — максимально разрешенный уровень (категории) целостности;

  • x-ald-user-caps – назначенные привилегии.

Из каталога эта информация извлекается службой SSSD и кешируется в базе данных /var/lib/sss/db/cache_<domain>.ldb вместе с остальной информацией о пользователе. В момент входа пользователя в систему эту информацию используют PAM-модули pam_parsec_mac.so, pam_parsec_cap.so, pam_parsec_aud.so и pam_parsec_xauth.so.

../_images/aldpro_mod_13_img95.png

рис. 454 Настройки доменных пользователей в интерфейсе FreeIPA

Для того чтобы иметь возможность назначать пользователям уровни и категории конфиденциальности, их нужно предварительно настроить в интерфейсе FreeIPA на странице Политика ‣ Политики Parsec. При этом следует учитывать следующие моменты:

  • При создании категорий конфиденциальности на портале управления FreeIPA вы указываете не разряд, а значение категории, т.е. нужно вводить значения 0x1, 0x2, 0x4, 0x8 и т.д. Интерфейс поддерживает проверку нескольких начальных значений, поэтому у вас не получится определить категорию с значением 0x3, соответствующее двум первым категориям сразу, но если у вас будет значительно больше категорий, то корректность вводимых значений вы должны будете проверять самостоятельно.

  • Уровни и категории МКЦ/МРД будут отображаться на рабочих станциях в момент входа доменных пользователей в систему и при использовании таких утилит как pdp-ls, если текущий пользователь работает из-под доменной учетной записи.

  • Настройки в интерфейсе FreeIPA не позволяют повысить максимальный уровень целостности/конфиденциальности на рабочих станциях, поэтому до появления ALD Pro 3.0.0 эти параметры приходилось изменять вручную.

  • Для удобной администрирования МКЦ/МРД на серверах и рабочих станциях администраторам нужно синхронизировать не только максимальные значения, но и текстовые метки уровней и категорий. Иначе администратор МРД, являясь высокоцелостным root, будет работать с локальными названиями уровней и категорий, а доменные пользователи будут видеть значения из домена.

Настройка через веб-интерфейс ALD Pro

В ALD Pro начиная с версии 3.0.0 также появилась возможность настраивать мандатный доступ доменных пользователей через веб-интерфейс. Для этого в карточке пользователя следует открыть вкладку МРД:

../_images/aldpro_mod_13_img96.png

рис. 455 Настройки доменных пользователей в интерфейсе ALD Pro

Кроме того, в ALD Pro существуют групповые политики семейства «Мандатные атрибуты» и «Мандатный контроль целостности (МКЦ)», которые позволяют управлять настройками МКЦ/МРД на рабочих станциях в домене, см. рис. 456:

../_images/aldpro_mod_13_img97.png

рис. 456 Групповые политики МКЦ/МРД ALD Pro

Применение съемных носителей в домене

Регистрация устройства в веб-интерфейсе FreeIPA

Регистрация съемных носителей в домене FreeIPA осуществляется из web-интерфейса в разделе Политика ‣ Политика Parsec ‣ Учтенные устройства. Чтобы зарегистрировать новое устройство, нужно нажать на кнопку + Добавить и ввести следующие параметры:

  • Название учтённого устройства – параметр задает краткое наименование, однозначно идентифицирующее регистрационную запись устройства в системе.

  • Описание устройства – параметр позволяет определить расширенное описание, которое упростит работу с регистрационной записью устройства в будущем.

  • Владелец устройства и Группа устройства – параметр определяет владельцев, которые будут назначены на файлы /dev/sdb*, соответствующие этому устройству в системе.

  • Атрибуты устройства – параметр определяет строку, которая задает значения свойств, используемых для однозначной идентификации устройства при его подключении к компьютеру, например:

    ENV{ID_SERIAL}=="JetFlash_Transcend_32GB_08XBQDCPX22PL4WH-0:0"

Примечание

чтобы правильно определить строку фильтра, следует воспользоваться локальным инструментом регистрации устройства.

  • Правила учёта включены — параметр позволяет отключить регистрационную запись без ее удаления из системы. Обратите внимание, что по умолчанию этот флажок выключен и его нужно активировать.

../_images/aldpro_mod_13_img100.png

рис. 457 Регистрация устройства в веб-интерфейсе FreeIPA

Регистрация устройства в веб-интерфейсе ALD Pro

В ALD Pro начиная с версии 3.0.0 также появилась возможность регистрировать съемные носители через веб-интерфейс. Для этого надо перейти в раздел Управление доменом ‣ МРД ‣ Учтенные устройства и нажать на кнопку + Создать:

../_images/aldpro_mod_13_img101.png

рис. 458 Регистрация устройства в веб-интерфейсе ALD Pro

Параметры аналогичны тем, что указываются при регистрации носителя через интерфейс FreeIPA.

Из каталога эта информация извлекается службой SSSD и кешируется в базе данных /var/lib/sss/db/cache_<domain>.ldb. Например, правило admin-usb-drive можно найти в базе по DN «name=secuser-usb-drive,cn=devices,cn=ald.company.lan,cn=sysdb». Для того, чтобы служба udev смогла их использовать, служба SSSD создает файлы с соответствующими правилами в каталоге /run/udev/rules.d.

admin@pc-1:~$ sudo ls /run/udev/rules.d/
99zz_PDAC_sss_secuser@ald.company.lan_310400000_7238_secuser-usb-drive.rules

admin@pc-1:~$ sudo cat /run/udev/rules.d/99zz_PDAC_sss_secuser@ald.company.lan_310400000_7238_secuser-usbdrive.rules
#Parsec DevAC udev rule 4 device "secuser-usb-drive"
ENV{ID_SERIAL}=="JetFlash_Transcend_32GB_08XBQDCPX22PL4WH-0:0", OWNER="secuser", GROUP="admins",
MODE="640", PDPL="1:0:0x0:0x0!:", AUDIT="o:0x0:0x0", GOTO="BLOCK_DEV"
GOTO="END"
LABEL="BLOCK_DEV"
SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="?*", SYMLINK+="%k_$env{ID_FS_TYPE}", RUN+="/bin/ln -f /dev/%k /dev/%k_$env{ID_FS_TYPE}"
LABEL="END"

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

  • Права доступа к устройству — параметр определяет, с какими правами доступа устройство будет смонтировано в системе при его подключении к компьютеру, по умолчанию «640» (user = rw, group = r). Вводить значение можно в текстовом формате «rwxrwxrwx» или как трехразрядное восьмеричное число «777». В каталоге значение сохраняется в атрибуте x-ald-devac-mode в десятичной системе счисления, но бэкенд отдает число в восьмеричной системе, и веб- интерфейс в крайних версиях FreeIPA по ошибке выполняет повторное преобразование в восьмеричную систему, поэтому вместо значения «640» мы видим «1200». В ALSE 1.7.5 UU1 ошибка уже исправлена.

  • Уровень и Категории конфиденциальности устройства — параметры определяют значение классификационной метки, с которой устройство будет смонтировано в системе при его подключении к компьютеру. Параметры актуальны для носителей с системой FAT. Для устройств с системой EXT4 используются классификационные метки, которые сохраняются в расширенных атрибутах объектов файловой системы.

Файловый сервер Samba

Файловый сервер Samba из состава Astra Linux позволяет предоставить доступ к файлам по сети с учетом классификационных меток. Для этого клиент и сервер должны работать под управлением операционной системы Astra Linux в режиме безопасности «Смоленск». Механизм работает следующим образом:

  • Для подключения к SMB-ресурсу клиентское приложение cifs.mount открывает исходящий сетевой сокет, которому назначается классификационная метка, унаследованная от пользовательской сессии.

  • При отправке пакетов сетевой стек операционной системы Astra Linux автоматически добавляет классификационную метку сокета во все исходящие IP-пакеты.

  • При получении запроса операционная система Astra Linux на файловом сервере открывает входящий сетевой сокет, которому по умолчанию назначается классификационная метка из полученного IP-пакета.

  • Сетевой стек операционной системы Astra Linux пересылает входящие пакеты службе Samba, которая запускает процесс пользовательской сессии smbd из-под суперпользователя root с высоким уровнем целостности и назначает ему классификационную метку входящего сокета.

    В части проверки прав доступа следует учитывать следующие моменты:

    • Доступ на уровне дискреционных прав служба Samba контролирует самостоятельно с помощью модулей виртуальной файловой системы (англ. Virtual File System, VFS). Проверки операционной системы игнорируются, т.к. процесс smbd действует от имени суперпользователя root.

    • Доступ на уровне МРД контролируется модулем Парсек, так как процесс smbd запускается с классификационной меткой из входящего сетевого сокета. Если метка сетевого сокета окажется выше или несравнима с максимально разрешенной для пользователя классификационной меткой, то пользовательской сессии будет назначена нулевая классификационная метка, поэтому нарушитель не сможет получить прав больше, чем это определено в домене, даже если полностью завладеет рабочей станцией.

    • Доступ на уровне МКЦ контролируется модулем Парсек, но удаленный пользователь получает доступ на запись к файлам с любыми метками, так как процесс smbd всегда запускается с высоким уровнем целостности.

Примечание

Обратите внимание, что для обычного режима МКЦ довольно нетипично, что процессы имеют одновременно и высокий уровень целостности и ненулевую классификационную метку, так как при интерактивном входе в систему пользователь должен выбрать что-то одно.

Настройка общей папки на сервере

Даже если вы полностью контролируете компьютерную сеть на физическому уровне, для безопасной работы с секретными документами по сети на файловом сервере Samba нужно обязательно включить шифрование. Для этого в конце секции «global» нужно установить параметру «smb encrypt» значение «required»:

[global]
...
smb encrypt = required

Примечание

Для использования функции МРД на файловом сервере Samba в начало секции с настройками общей папки обычно рекомендуют добавить параметры «use socket mac label=YES» и «server signing = mandatory». Но в крайних редакциях Samba служба всегда использует мандатную метку сокета вне зависимости от значения параметра «use socket mac label», а для обеспечения безопасности функция шифрования намного эффективнее, чем просто подписи пакетов, поэтому данные настройки не являются обязательными.

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

[secret]
path = /home/secret
writable = yes
browseable = yes
valid users = secuser

Где:

  • Название секции [secret] — определяет название общей папки.

  • Параметр «path = /home/secret» — задает путь к общей папке на диске.

  • Параметр «writable = yes» — определяет, что файлы общей папки будут доступны пользователю на запись, если он не будет включен в список «read list».

  • Параметр «browseable = yes» — указывает, что общая папка должна быть видна при просмотре всех общих ресурсов файлового сервера.

  • Параметр «valid users = secuser» — определяет список пользователей, которым разрешено выполнять подключение к этому общему ресурсу.

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

  • Создаем каталог общей папки и назначаем ему максимальную классификационную метку с мандатным атрибутом ccnr, чтобы в нем можно было хранить объекты с любыми классификационными метками:

sudo mkdir /home/secret
sudo pdpl-file 3:0:-1:ccnr /home/secret
  • Создаем каталоги для документов разных уровней секретности:

sudo mkdir /home/secret/lvl1
sudo pdpl-file 1:0:0:0 /home/secret/lvl1
sudo mkdir /home/secret/lvl2
sudo pdpl-file 2:0:0:0 /home/secret/lvl2
sudo mkdir /home/secret/lvl3
sudo pdpl-file 3:0:0:0 /home/secret/lvl3
  • Назначаем дискреционные права доступа:

chown -R secuser:secuser /home/secret
chmod -R 640 /home/secret

Монтирование вручную утилитой mount

Если пользователь выполнит вход с классификационной меткой выше нуля, то монтирование общих папок из файлового менеджера с помощью FUSE будет недоступно, поэтому потребуется установить пакет cifs-utils и дать пользователю права на подключение к общей папке с помощью утилиты mount:

  • Установим необходимые пакеты на клиентский компьютер pc-1:

    sudo apt install -y cifs-utils
    
  • Создадим точку для монтирования общей папки:

    sudo mkdir /media/secuser
    sudo chown secuser:secuser /media/secuser
    
  • Проверим возможность монтирования общей папки из-под учетной записи администратора, кому разрешено использовать sudo:

    sudo mount -t cifs -o sec=krb5,cruid=$UID,uid=$UID,gid=$GROUPS,file_mode=0770,dir_mode=0770 //fs- 1.ald.company.lan/secret /media/secret
    

    Где:

    • -t — параметр определяет тип файловой системы.

    • -o — параметр позволяет задать набор опций для подключения общей папки.

      • sec=krb5 — параметр указывает, что при подключении к серверу клиент должен будет использовать аутентификацию по протоколу Kerberos V5 без цифровых подписей (англ. integrity). Подписи не требуются, т.к. сервер будет требовать шифрование.

      • cruid — позволяет указать пользователя, чтобы при подключении к серверу использовать правильное хранилище Kerberos-ключей (англ. credential user identity).

      При монтировании папки из-под sudo пользователем по умолчанию будет root, поэтому данный параметр нужно задать явно. Для подстановки POSIX- идентификатора текущего пользователя используется переменная окружения $UID

      • uid, gid, file_mode и dir_mode — определяют владельцев и дискреционные права доступа, под которыми файлы и папки будут отображаться в примонтированной файловой системе. Служба cifsd по умолчанию использует эффективные идентификаторы процесса, который ее запустил, поэтому при монтировании из-под sudo значения uid/gid нужно задать явно.

    • //fs-1.ald.company.lan/secret — путь к общей папке на файловом сервере.

    • /media/secuser — точка монтирования общей папки в системе.

  • Размонтируем папку:

    sudo umount /media/secret
    

    Но так как у обычных пользователей нет прав суперпользователей, разрешим им монтировать общую папку с помощью записи в fstab. Этот способ не создает угрозу для безопасности, т.к. права на редактирование файла fstab есть только у суперпользователя, поэтому никто, кроме администратора, не сможет изменить параметры монтирования.

  • Добавим в fstab строку, которая разрешит пользователю самостоятельно монтировать папку /media/secuser без привилегий суперпользователя:

    admin@pc-1:~$ cat /etc/fstab
    ...
    #общая папка                   точка монтирования тип  параметры
    //fs-1.ald.company.lan/secret /media/secuser      cifs noauto,user,sec=krb5,file_mode=0770,dir_mode=0770
    

    Где:

    • //fs-1.ald.company.lan/secret — путь к общей папке на файловом сервере.

    • /media/secuser — точка монтирования общей папки в системе.

    • cifs — тип сетевой файловой системы, который использует службу cifsd из состава пакета cifs-utils.

    • noauto — параметр указывает, что диск не требуется монтировать автоматически при загрузке системы, что не имеет смысла, т.к. аутентификация будет выполняться по протоколу Kerberos V5 с использованием билетов из связки ключей текущего пользователя.

    • user — параметр указывает, что монтировать папку cможет обычный пользователь, без прав суперпользователя. Для того, чтобы любой пользователь мог размонтировать ее, можно использовать users вместо user.

    Примечание

    Если общий ресурс не использует классификационные метки, то вместо параметра user можно воспользоваться параметром multiuser, который позволяет использовать одну и ту же точку монтирования для нескольких пользователей сразу. В этом случае SMB-клиент создает одно общее подключение, а файловый сервер Samba авторизует входящие запросы, в зависимости от того, от какого из пользователей они поступают. Для работы с МРД такой способ подключения не подходит, т.к. каждое подключение имеет собственную метку конфиденциальности.

    • sec=krb5 — параметр указывает, что при подключении к серверу клиент должен использовать аутентификацию по протоколу Kerberos V5 без цифровых подписей (англ. integrity). Подписи не требуются, т.к. сервер будет требовать шифрование.

    • file_mode и dir_mode — определяют дискреционные права доступа, под которыми файлы и папки будут отображаться в примонтированной файловой системе.

Войдем в систему пользователем secuser, выполним монтирование общей папки:

secuser@pc-1:~$ mount /media/secuser/

Проверим, что классификационные метки получены с файлового сервера корректно, дискреционные права доступа установлены в соответствии с правилом монтирования в fstab, а владельцами установлены текущий пользователь и его первичная группа.

secuser@pc-1:~$ pdp-ls -M /media/secuser/
итого 0
drwxrwx------ 2 secuser secuser Уровень_0:Низкий:Нет:0x0 lvl0
drwxrwx---m-- 2 secuser secuser Уровень_1:Низкий:Нет:0x0 lvl1

Проверим, что механизм мандатного управления доступом работает в штатном режиме:

secuser@pc-1:~$ pdp-id
Уровень конф.=1(Уровень_1), Уровень целостности:0(Низкий), Категории=0x0(Нет) Роли=()

secuser@pc-1:~$ echo "test" > /media/secuser/lvl1/test.txt

secuser@pc-1:~$ echo "test" > /media/secuser/lvl0/test.txt
bash: /media/secuser/lvl0/test.txt: Отказано в доступе

Проверим параметры монтирования общей папки на стороне клиента:

admin@file-1:~$ sudo smbstatus

Samba version 4.13.13-Debian
PID    Username    Group      Machine      Protocol                   Version       Encryption       Signing
----------------------------------------------------------------------------------------------------------------------------------------
3474   secuser     secuser    10.0.1.51    (ipv4:10.0.1.51:51466)     SMB3_11       AES-128-GCM      AES-128-CMAC

Service  pid    Machine     Connected at                   Encryption     Signing
---------------------------------------------------------------------------------------------
IPC$     3474   10.0.1.51   Пн сен 22 12:21:01 2025 MSK    AES-128-GCM    AES-128-CMAC
secret   3474   10.0.1.51   Пн сен 22 12:21:01 2025 MSK    AES-128-GCM    AES-128-CMAC

Внимание

Если общую папку монтирует пользователь с ненулевой классификационной меткой, то даже высокоцелостный пользователь root не сможет увидеть факт монтирования и получить доступ к любым файлам этой директории.

Автоматическое монтирование через pam_mount

Можно настроить автоматическое монтирование общей папки при входе пользователя в систему с помощью пакета libpam-mount, но следует учитывать что это может создать значительную задержку входа. Выполним соответствующие настройки:

  • Установим необходимые пакеты:

    sudo apt install -y libpam-mount
    
  • Для автоматического монтирования общей папки нужно внести следующие настройки в конфигурационный файл pam_mount.conf.xml

    secuser@pc-1:~$ sudo cat /etc/security/pam_mount.conf.xml
    <pam_mount>
    ...
             <!-- Volume definitions -->
             <volume
                fstype="cifs"
                server="fs-1.ald.company.lan"
                path="secret"
                mountpoint="/media/%(USER)"
       options="sec=krb5,cruid=%(USERUID),uid=%(USERUID),gid=%(USERGID),file_mode=0644,dir_mode=0755"
             />
    ...
    

    Где:

    • fstype=»cifs» – задает тип файловой системы.

    • server=»fs-1.ald.company.lan» – адрес файлового сервера.

    • path=»secret» – имя общей папки на файловом сервере.

    • mountpoint=»/media/%(USER)» – точка монтирования общей папки в системе, где подстрока «%(USER)» является шаблоном для подстановки имени текущего пользователя, выполняющего вход в систему. Если каталог отсутствует, он будет создан модулем pam_mount автоматически.

    • options – параметры монтирования общей папки:

      • sec=krb5i — параметр указывает, что при подключении к серверу клиент должен использовать аутентификацию по протоколу Kerberos V5 без цифровых подписей (англ. integrity). Подписи не требуются, т.к. сервер будет требовать шифрование.

      • cruid=%(USERUID) — позволяет указать пользователя, чтобы при подключении к серверу использовать правильное хранилище Kerberos- ключей (англ. credential user identity). По умолчанию служба cifs-utils использует uid процесса, который выполняет монтирование, поэтому в конфигурационном файле модуля pam_mount, который действует от имени root, этот параметр нужно задать явно.

      • uid, gid, file_mode и dir_mode — определяют владельцев и дискреционные права доступа, под которыми файлы и папки будут отображаться в примонтированной файловой системе. Служба cifsd по умолчанию использует эффективные идентификаторы процесса, который ее запустил, поэтому для модуля pam_mount значения uid/gid нужно задать явно, т.к. его программный код вызывается из-под суперпользователя root.

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

Практика и тестирование

Заключение

Дополнительные источники информации

Обратная связь

Если остались вопросы, то их всегда можно задать в специальной теме.