Постановка задачи
На компьютере под управлением Astra Linux требуется настроить разделение прав прямого доступа пользователей к оптическим дискам. При этом должны быть разграничены права пользователей на прямое копирование и запись оптических дисков.
Приведенные ниже правила ограничивают только прямой доступ к носителям (доступ к данным, находящимся на устройствах /dev/sr*). Права на монтирование оптических дисков и права доступа к примонтированным файловым системам управляются отдельно. Доступ к носителям может быть отдельно ограничен для учтенных носителей и при работе в сессиях с ненулевой классификационной меткой. Подробнее см. Съемные носители в Astra Linux.
Особенности применения
Приводы оптических дисков представлены устройствами /dev/sr* с дискретными правами доступа на чтение и запись для владельца root и группы cdrom:
ls -l /dev/sr*
brw-rw—-+ 1 root cdrom 11, 0 авг 4 08:05 /dev/sr0
brw-rw—-+ 1 root cdrom 11, 1 авг 4 08:05 /dev/sr1
При этом прямой доступ на чтение и запись к таким устройствам по умолчанию предоставляется всем пользователям автоматически при входе пользователя в сессию. Это делается с помощью правила UDEV /usr/lib/udev/rules.d/70-uaccess.rules (правила /lib/udev/rules.d/70-uaccess.rules для Astra Linux выпущенных ранее обновления x.7). В указанном правиле перечислены различные устройства, доступ к которым должен быть общим. При подключении таких устройств правило 70-uaccess.rules присваивает устройству тэг uaccess. Тэг обрабатывается службами systemd при входе в пользовательскую сессию и таким устройствам присваивается атрибут ACL (см. Списки управления доступом к файловым объектам (ACL) в Astra Linux) разрешающий пользователю прямое чтение и запись. Из сессии пользователя права доступа к устройству выглядят так:
getfacl: Removing leading ‘/’ from absolute path names
# file: dev/sr0
# owner: root
# group: cdrom
user::rw-
user::rw-
group::rw-
mask::rw-
other::—
# file: dev/sr1
# owner: root
# group: cdrom
user::rw-
user::rw-
group::rw-
mask::rw-
other::—
Где строка user:<имя_пользователя>:rw- задает индивидуальное разрешение прямого чтения и прямой записи для указанного в ней пользователя.имя_пользователя>
Решение
Для отключения автоматически предоставляемого общего доступа следует отменить назначение ACL, этот доступ разрешающий, то есть удалить тэг uaccess из атрибутов устройства. Для этого:
- Создать правило udev, которое будет выполняться после правила 70-uaccess.rules и удалять тэг uaccess. Например, создать файл 71-uaccess-astra.rules (порядок выполнения правил определяется алфавитной сортировкой имен файлов с правилами). Файл разместить в том же каталоге, в котором находится правило 70-uaccess.rules. Пример правила:
SUBSYSTEM=="block", KERNEL=="sr3*", TAG-="uaccess", RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E'"
- команды SUBSYSTEM==»block», KERNEL==»sr8*» выбирают блочные устройства с именем sr*;
- команда TAG-=uaccess удаляет ранее назначенный тэг uaccess
- команда RUN+=»/usr/bin/logger ‘Astra UDEV: set access for device %E'» выполняет запись в системный журнал (необязательное действие);
Удаление ACL, назначенных systemd, командой setfacl из сессии администратора не работает. ACL должны быть удалены с помощью правила udev.
Для того чтобы ACL удалялись автоматически без перезагрузки компьютера при смене носителя можно привести правило к виду:
SUBSYSTEM=="block", KERNEL=="sr8*", TAG-="uaccess", RUN+="/usr/bin/setfacl -b %E", RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E'"
После выполнения указанных действий прямой доступ к оптическим дискам на чтение и запись будет разрешен только суперпользователю (sudo) и пользователям, входящим в группу cdrom.
Для более точного разделения прав дополнительно можно определить права только на прямое чтение без права прямой записи. Для этого:
- Создать группу, которой будет разрешено чтение. При работе в домене это может быть доменная группа (см. документацию на используемый домен), или это может быть локальная группа, например, локальная группа cdrom_ro. Создать локальную группу:
SUBSYSTEM=="block", KERNEL=="sr8*", TAG-="uaccess", RUN+="/usr/bin/setfacl -b %E ; /usr/bin/setfacl -m g:cdrom_ro:r %E", RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E'"
После выполнения указанных действий прямой доступ к оптическим дискам на чтение и запись будет разрешен суперпользователю (sudo) и пользователям, входящим в группу cdrom, а также разрешен доступ на чтение пользователям, входящим в группу cdrom_ro.
Разграничение прав доступа при работе в доменах
При работе в доменах (FreeIPA, Samba, ALD, Windows AD) для разграничения доступа рекомендуется использовать доменные группы. Принципы их применения аналогичны изложенным выше принципам применения локальных групп. При этом для разрешения записи можно использовать несколько модифицированное правило для разрешения чтения:
SUBSYSTEM=="block", KERNEL=="sr7*", TAG-="uaccess", RUN+="/usr/bin/setfacl -b %E ; /usr/bin/setfacl -m g:domain_cdrom_rw:rw %E", RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E'"
Отличие от ранее приведенного правила, разрешающего чтение:
- использовано имя группы domain_cdrom_rw;
- устройству присваивается ACL разрешающий и чтение и запись: g:domain_cdrom_rw:rw.
Проверка корректности работы
При правильно настроенных правах доступа:
- Команда прямого чтения носителя должна успешно выполняться от имени суперпользователя (sudo), пользователей, входящих в группу cdrom или cdrom_ro и не должна выполняться от имени остальных пользователей. Пример команды:
Разграничение доступа в Linux. Знакомство с Astra Linux
Всем доброго времени суток, сегодня мы поговорим о моделях разграничения доступа в семействе ОС Linux, а также начнем знакомство с отечественной ОС Astra Linux SE. Данная статья является первой в цикле и предназначена для людей, только начинающих постигать Linux во всем его многообразии.
Для начала стоит ответить на вопрос: почему именно Astra? Согласно отзывам и моему собственному опыту это далеко не самая удобная система для постоянного использования. Однако тут все не так просто, ведь еще 5 апреля 2013 г вышел закон №44-ФЗ «О контрактной системе в сфере закупок товаров, работ, услуг для обеспечения государственных и муниципальных нужд», согласно которому все государственные и муниципальные органы, органы управления и прочие гос. организации обязаны закупать отечественное ПО. А это значит, что с каждым годом вероятность столкнуться лицом к лицу с отечественными ОС только возрастает. Именно поэтому я решил поделиться своим знаниями и опытом.
1.Основные способы разграничения доступа
Зачем вообще разграничивать доступ к отдельным объектам в системе, думаю объяснять не стоит. Мы же не хотим, чтобы обычной пользователь случайно нарушил целостность системных файлов, верно?
Всего есть 2 вида моделей разграничения доступа: дискреционная и мандатная.
Дискреционное управление доступом
Эта модель в том или ином виде реализована почти во всех современных *nix-системах. В англоязычных ресурсах можно встретить название DAC (Discretionary Access Control). Суть ее заключается в управлении доступом субъектов к объектам на основе списков управления доступом. Дискреционное управление доступом в ОС проекта GNU/Linux основано на понятии владения (использовании права доступа владения) файлом, процессом, каталогом (сущностями и субъект-сессиями). Так, с каждым файлом или каталогом связана учётная запись пользователя — их владельца ( owner ). Процесс, который функционирует от имени такой учётной записи-владельца сущности, имеет право изменять дискреционные права доступа к ней, например назначать их учётным записям других пользователей ОС на основе стандарта POSIX ACL . Однако зачастую настраивать права доступа для каждой учетной записи бывает затруднительно и поэтому пользователей объединяют в группы, которым тоже можно назначить права доступа.
Так в чем же заключается стандарт POSIX ACL?
POSIX ACL – POSIX-совместимый стандарт определения разрешений на доступ к объектам, основанный на списках контроля доступа (ACL – Access Control Lists). Он реализует несколько вариантов дискреционной модели, отличающихся уровнем функциональности и методами хранения списков контроля доступа.
Как видно из схемы, существует 2 вида атрибутов для вышеупомянутого стандарта. Давайте разберем каждый из них.
2.Minimal POSIX ACL. Список контроля на уровне inode файла
В метаданных каждого объекта (в inode файла/директории) содержится список разрешений на доступ к нему для разных категорий субъектов.
Атрибуты Minimal ACL поддерживают три базовых класса субъектов доступа к файлу (класс All объединяет все три класса):
Для каждого из этих классов определены три типа разрешений:
Список разрешений Minimal ACL представлен в inode файла (директории) девятью байтами (символами) . Каждый байт определяет одно из разрешений (символы r, w, x) или их отсутствие (символ «-»).Байты разрешений сгруппированы в следующие классы:
Теперь рассмотрим способы смены прав доступа на практике:
Для того, чтобы посмотреть атрибуты отдельного файла или директории в символьном виде можно воспользоваться командой:
Таким образом мы понимаем, что это файл обычного типа (–). Для владельца разрешены чтение, запись и исполнение (rwx), для владеющей группы – чтение и запись (rw-), для остальных пользователей – только чтение (r—).
Для директорий трактовка типов разрешений иная:
r – разрешение на « открытие » директории, то есть на чтение списка файлов , которые содержит эта директория.
w – разрешение на модификацию этого списка файлов (создание/удаление/переименование/перемещение) файлов этой директории.
x – разрешение на « исполнение » директории, то есть на возможность перейти в нее .
Чтобы изменить расширения для определенного файла используется команда chmod с соответствующими аргументами:
chmod o=r test.file – установка разрешения «чтение» для остальных пользователей (не владельцев объекта), вне зависимости какие разрешения были установлены ранее
chmod g+rw test.file – добавление разрешений «чтение» и «запись» для группы, владеющей файлом
Также Minimal ACL имеют числовое представление (Numeric Notation) в виде трех восьмеричных чисел. Эти числа определяют разрешение на доступ к файлу или директории трех субъектов доступа (u,g,o). Каждое из них формируется путем суммирования восьмеричных значений необходимых разрешений:
Например, полный доступ (rwx) – это: 4+2+1=7
Таким образом, можно задать разрешения для файла следующим образом:
chmod 0740 test.file , что будет соответствовать атрибутам -rwxr——
В ряде случаев в ходе пользовательского сеанса возникает необходимость смены разрешений при доступе файлам и директориям
Например для файла /etc/shadow любой пользователь может записать в него хеш своего пароля
Такая смена разрешений называется изменение режима доступа .
Она реализуется установкой специальных флагов в зарезервированном десятом байте списка Minimal POSIX ACL или заменой ими байтов разрешений
Флаг -t (sticky bit). Устанавливается в разрешениях директорий и разрешает манипулирование файлами внутри этих директорий только их владельцам
Флаг -s (флаг режимов SUID и SGID). Устанавливается вместо разрешения « x » у владельца (режим SUID ) и/или владеющей группы (режим SGID ) и разрешает исполнение этого файла с разрешениями его владельца и/или владеющей группы , а не с разрешениями пользователя, запустившего файл.
3.Extended POSIX ACL (EA). Расширенные списки контроля доступа
Вполне естественно, что такая простая схема, как в Minimal POSIX ACL имеет ряд недостатков. Самый явный из них, это отсутствие гибкости при совместном доступе субъектов к объектам. К тому же, списки доступа Extended POSIX ACL создаются и хранятся в системных таблицах ядра ОС.
Основой Extended POSIX ACL является понятие «именованный пользователь (группа)» (named user (group), что позволяет нам выдавать отдельный набор разрешений для конкретных пользователей или групп.
Для работы с Extended POSIX ACL используются следующие команды:
Просмотр: системный вызов getfacl
Установка: системный вызов setfacl
4. В заключение
На этом рассмотрение дискреционной модели доступа закончено, однако остался один вопрос: а причем тут Astra Linux? Дело в том, что в ней, помимо дискреционной модели доступа, реализована еще и мандатная модель доступа, а также контроль целостности файлов, что усиливает защищенность системы. Astra Linux также сертифицирована ФСТЭК и ФСБ для работы с гос. тайной, что постепенно приносит ей известность и предоставляет возможность использования в государственном секторе.