# Управление грифами конфиденциальности. (*nix) В защищённой операционной системе Astra могут одновременно выполняться программы с разными метками конфиденциальности. Привычный для пользователя рабочего стола обмен данными через **буфер обмена** между такими программами по умолчанию невозможен из-за принятых мер МРД. В частности, при необходимости работать с меткой конфиденциальности, отличающейся от метки текущей сессии, надо открывать отдельную сессию с отдельным Х сервером. Так же можно разрешить использовать специальный механизм (**sumac**), позволяющий запустить графическую программу с более высокой меткой конфиденциальности из текущей сессии, но при этом программа будет работать со своим отдельным вложенным Х сервером Xephyr. Команда **sumac** используется для запуска процесса с заданными мандатными уровнем и категорией в отдельной графической сессии с использованием виртуального графического сервера Xephyr. **Буфер обмена** - промежуточное хранилище данных, предоставляемое программным обеспечением и предназначенное для переноса или копирования информации между приложениями или частями одного приложения через операции вырезать, копировать, вставить. КСЗ обеспечивает реализацию следующих функций ОС по защите информации от НСД: * идентификацию и аутентификацию; * дискреционное управление доступом; * мандатное управление доступом; * регистрацию событий безопасности; * ограничение программной среды; * изоляцию процессов; * защиту памяти; * контроль целостности; * обеспечение надежного функционирования; * фильтрацию сетевого потока; * маркировку документов; * защиту среды виртуализации; * контроль подключения съемных машинных носителей информации. Для организации контроля **буфера обмена** между сессиями используются 2 механизма: * xfixes расширение X сервера для асинхронного мониторинга буфера обмена сессии; * inotify механизм ядра для асинхронного мониторинга файловой системы. Каждый менеджер окон (он же менеджер буферов обмена) в каждой сессии подписывается на получение уведомлений об изменении буфера обмена своей графической сессии. Затем, по мере изменений в буфере обмена, он получает уведомления и сохраняет содержимое буфера обмена в файле $HOME/.fly/clipboard. Таким образом, изменения буфера обмена постоянно отображаются в файле $HOME/.fly/clipboard. Данные механизм позволяет без проблем копировать и вставлять текстовую информацию, такую как, например, текст или URL файлов и каталогов. Так, находясь в сессии с нулевым уровнем конфиденциальности, пользователь может скопировать информацию привычным образом: ctrl+c или ctrl+insert или через контекстное меню с пунктом «Копировать». Затем, переключившись в сессию с более высоким уровнем конфиденциальности (**Мандатный контекст**), сразу же вставить эту информацию: сtrl+v или shift+insert, а также через контекстное меню с пунктом «Вставить». **Мандатный контекст** – это разграничение доступа субъектов к объектам, основанное на назначении метки конфиденциальности для информации, содержащейся в объектах, и выдаче официальных разрешений субъектам на обращение к информации такого уровня конфиденциальности. Мандатный контекст включает в себя: * Метку безопасности; классификационной метки, которая определяется: Субъекты или сущности, которым явно не присвоен никакой мандатный контекст, считаются имеющими минимальный (нулевой) мандатный контекст, то есть мандатный контекст, в котором все мандатные атрибуты имеют минимальные допустимые значения. * иерархическим уровнем конфиденциальности; * неиерархической категорией конфиденциальности; ## Основные способы разграничения доступа Дискреционное управление доступом Эта модель в том или ином виде реализована почти во всех современных *nix-системах. В англоязычных ресурсах можно встретить название DAC (Discretionary Access Control). Суть ее заключается в управлении доступом субъектов к объектам на основе списков управления доступом. Дискреционное управление доступом в ОС проекта GNU/Linux основано на понятии владения (использовании права доступа владения) файлом, процессом, каталогом (сущностями и субъект-сессиями). Так, с каждым файлом или каталогом связана учётная запись пользователя — их владельца (owner). Процесс, который функционирует от имени такой учётной записи-владельца сущности, имеет право изменять дискреционные права доступа к ней, например назначать их учётным записям других пользователей ОС на основе стандарта POSIX ACL. Однако зачастую настраивать права доступа для каждой учетной записи бывает затруднительно и поэтому пользователей объединяют в группы, которым тоже можно назначить права доступа. * Дополнительные мандатные атрибуты управления доступом. Существует 2 вида атрибутов minimal POSIX ACL и Extended POSIX ACL. ### Minimal POSIX ACL. Список контроля на уровне inode файла В метаданных каждого объекта (в inode файла/директории) содержится список разрешений на доступ к нему для разных категорий субъектов. Атрибуты **Minimal ACL** поддерживают три базовых класса субъектов доступа к файлу (класс All объединяет все три класса): 1.**User access** (u) – доступ для владельца файла; 2.**Group access** (g) – доступ для группы, владеющей файлом; 3.**Other access** (o) – доступ для остальных пользователей (кроме пользователя root). 4.**All access** (a) – доступ для всех субъектов доступа (u, g, o). Для каждого из этих классов определены три типа разрешений: На *чтение* содержимого файла (read) – символ «r». На *запись* внутри файла или изменения его содержимого (write) – символ «w». На *исполнение* файла (если это бинарный исполняемый файл или файл сценария интерпретатора (execute)) – символ «x». Список разрешений Minimal ACL представлен в inode файла (директории) девятью байтами (символами). Каждый байт определяет одно из разрешений (символы r, w, x) или их отсутствие (символ «-»). Байты разрешений сгруппированы в следующие классы: ![](YGCC11.jpg) Теперь рассмотрим способы смены прав доступа на практике: Для того, чтобы посмотреть атрибуты отдельного файла или директории в символьном виде можно воспользоваться командой: **ls –l <имя_файла>** Пример вывода команды: ![](YGCC12.jpg) Таким образом мы понимаем, что это файл обычного типа (–). Для владельца разрешены чтение, запись и исполнение (rwx), для владеющей группы – чтение и запись (rw-), для остальных пользователей – только чтение (r--). Для директорий трактовка типов разрешений иная: **r** – разрешение на «**открытие**» директории, то есть на **чтение списка файлов**, которые содержит эта директория. **w** – разрешение **на модификацию этого списка файлов** (создание/удаление/переименование/перемещение) файлов этой директории. **x** – разрешение на «**исполнение**» директории, то есть на возможность **перейти в нее**. Чтобы изменить расширения для определенного файла используется команда **chmod** с соответствующими аргументами: ![](YGCC13.jpg) Система полномочий в Linux имеет очень важное значение, поскольку благодаря ей можно разделять привилегии между пользователями, ограничить доступ к нежелательным файлам или возможностям, контролировать доступные действия для сервисов и многое другое. Эта команда имеет типичный для команд linux синтаксис, сначала команда, затем опции, а в конце файл или папка, к которой ее нужно применить: **$ chmod опции права /путь/к/файлу** Сначала рассмотрим какими бывают права доступа linux и как они устанавливаются. Пред этим рекомендую прочитать статью про права, ссылка на которую есть выше. Есть три основных вида прав: * **r** - чтение; * **w** - запись; * **x** - выполнение; * **s** - выполнение от имени суперпользователя (дополнительный); Также есть три категории пользователей, для которых вы можете установить эти права на файл linux: * **u** - владелец файла; * **g** - группа файла; * **o** - все остальные пользователи; Синтаксис настройки прав такой: группа_пользователей/действие/вид_прав В качестве действий могут использоваться знаки "**+**" - включить или "**-**" - отключить. Рассмотрим несколько примеров: * **u+x** - разрешить выполнение для владельца; * **ugo+x** - разрешить выполнение для всех; * **ug+w** - разрешить запись для владельца и группы; * **o-x** - запретить выполнение для остальных пользователей; * **ugo+rwx** - разрешить все для всех; Но права можно записывать не только таким способом. Есть еще восьмеричный формат записи, он более сложен для понимания, но пишется короче и проще. Я не буду рассказывать как считать эти цифры, просто запомните какая цифра за что отвечает, так проще: * **0** - никаких прав; * **1** - только выполнение; * **2** - только запись; * **3** - выполнение и запись; * **4** - только чтение; * **5** - чтение и выполнение; * **6** - чтение и запись; * **7** - чтение запись и выполнение. Права на папку linux такие же, как и для файла. Во время установки прав сначала укажите цифру прав для владельца, затем для группы, а потом для остальных. Например: * **744** - разрешить все для владельца, а остальным только чтение; * **755** - все для владельца, остальным только чтение и выполнение; * **764** - все для владельца, чтение и запись для группы, и только чтение для остальных; * **777** - всем разрешено все. Каждая из цифр не зависит от предыдущих, вы вбираете именно то, что вам нужно. Теперь давайте рассмотрим несколько опций команды, которые нам понадобятся во время работы: * **-c** - выводить информацию обо всех изменениях; * **-f** - не выводить сообщения об ошибках; * **-v** - выводить максимум информации; * **--preserve-root** - не выполнять рекурсивные операции для корня "/"; * **--reference** - взять маску прав из указанного файла; * **-R** - включить поддержку рекурсии; * **--version** - вывести версию утилиты; Теперь, когда вы знаете опции и как настраиваются права доступа chmod, давайте рассмотрим несколько примеров как работает команда chmod linux. Например: **chmod o=r test.file** – установка разрешения «чтение» для остальных пользователей (не владельцев объекта), вне зависимости какие разрешения были установлены ранее **chmod g+rw test.file** – добавление разрешений «чтение» и «запись» для группы, владеющей файлом Также Minimal ACL имеют числовое представление (Numeric Notation) в виде трех восьмеричных чисел. Эти числа определяют разрешение на доступ к файлу или директории трех субъектов доступа (u,g,o). Каждое из них формируется путем суммирования восьмеричных значений необходимых разрешений: - чтение = 4; - запись = 2; - выполнение =1. Например, полный доступ (rwx) – это: 4+2+1=7 Таким образом, можно задать разрешения для файла следующим образом: **chmod 0740 test.file**, что будет соответствовать атрибутам -rwxr----- В ряде случаев в ходе пользовательского сеанса возникает необходимость смены разрешений при доступе файлам и директориям Например для файла /etc/shadow любой пользователь может записать в него хеш своего пароля ![](YGCC14.jpg) Такая смена разрешений называется изменение режима доступа. Она реализуется установкой специальных флагов в зарезервированном десятом байте списка Minimal POSIX ACL или заменой ими байтов разрешений **Флаг -t (sticky bit)**. Устанавливается в разрешениях директорий и разрешает манипулирование файлами внутри этих директорий **только их владельцам**. **Флаг -s (флаг режимов SUID и SGID)**. Устанавливается вместо разрешения «**x**» у владельца (режим **SUID**) и/или владеющей группы (режим **SGID**) и разрешает исполнение этого файла с разрешениями его **владельца и/или владеющей группы**, а не с разрешениями пользователя, запустившего файл. ### Extended POSIX ACL (EA). Расширенные списки контроля доступа Вполне естественно, что такая простая схема, как в Minimal POSIX ACL имеет ряд недостатков. Самый явный из них, это отсутствие гибкости при совместном доступе субъектов к объектам. К тому же, списки доступа Extended POSIX ACL создаются и хранятся в системных таблицах ядра ОС. Основой Extended POSIX ACL является понятие «именованный пользователь (группа)» (named user (group), что позволяет нам выдавать отдельный набор разрешений для конкретных пользователей или групп. ![](YGCC15.jpg) Для работы с Extended POSIX ACL используются следующие команды: Просмотр: системный вызов **getfacl <имя файла>** Вывод: ![](YGCC16.jpg) Установка: системный вызов setfacl Вывод: ![](YGCC17.jpg) Пример: ![](YGCC18.jpg) ### Вывод Для выделения секретного документа из общего информационного списка а так же на носителях информации ограниченного доступа необходимы грифы конфиденциальности использования которого необходимо для выполнения данных операций. Были рассмотрены 2 типа разграничения доступа, которые охватывают контекст безопасности. ####

Список литературы

http://rus-linux.net/MyLDP/BOOKS/Linux_Foundations/32/ch32.html https://codeby.school/blog/informacionnaya-bezopasnost/razgranichenie-dostupa-v-linux-znakomstvo-s-astra-linux https://tebestudent.ru/polezno-znat/kursovye-raboty/vyvod-v-kursovoy-rabote/#kak_pisat_vyvod_v_kursovoy_rabote https://wiki.astralinux.ru/pages/viewpage.action?pageId=48763550 https://habr.com/ru/company/astralinux/blog/701596/