Разграничение доступа в 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 также сертифицирована ФСТЭК и ФСБ для работы с гос. тайной, что постепенно приносит ей известность и предоставляет возможность использования в государственном секторе.
Группы пользователей в Linux: создаем группы, добавляем и удаляем из них пользователей
Перевод статьи «Linux User Groups Explained: How to add a new group, a new group member, and change groups».
Linux позволяет многочисленным пользователям работать в системе одновременно. Установка прав доступа защищает пользователей друг от друга. Для объединения пользователей с одинаковыми правами доступа создаются группы. Члены этих групп могут, например, иметь доступ к каким-то файлам или устройствам, в то время как для остальных пользователей доступ будет закрыт.
Часто группы создаются, чтобы дать отдельным пользователям право модифицировать файл или директорию.
Группы бывают двух основных видов: первичные и вторичные. Первичная группа это основная группа пользователя, установленная для него по умолчанию, с ней связан его аккаунт. Директории и файлы, создаваемые пользователем, имеют Group ID именно этой, первичной группы. Любая другая группа (а их может быть много), в которую входит пользователь, является вторичной.
Создание групп
Давайте создадим две группы: «writers» («писатели») и «editors» («редакторы»). Для этого используется команда groupadd. (Возможно, потребуется также поставить sudo в начале команды, чтобы получить право создавать группы).
groupadd writers groupadd editors
Создание пользователей
Возможно, у вас уже есть пользователи, которых вы могли бы добавить в только что созданные группы. Если нет, вот базовый синтаксис для создания пользователя при помощи команды useradd:
useradd [опции] имя_пользователя
Ниже представлена команда для создания пользователя по имени «quincy». Флаг -m нужен для создания домашней директории пользователя (для ее названия используется имя пользователя). Флаг -p позволяет задать пароль для пользователя, в данном случае — «p4ssw0rd».
useradd -m quincy -p p4ssw0rd
Позже пользователь сможет изменить свой пароль при помощи команды passwd. Для этого ему понадобится ввести текущий пароль и новый.
Добавление пользователя в группу
Для добавления пользователя в группу используется команда usermod. Давайте добавим пользователя «quincy» в группу «writers». Опция -a означает «append» («добавить», «прикрепить»), а опция -G служит для указания названия вторичной группы.
usermod -a -G writers quincy
Когда вы создаете пользователя при помощи команды adduser, для него автоматически создается первичная группа, носящая его имя. Поэтому в настоящее время пользователь «quincy» состоит в первичной группе «quincy» и вторичной «writers».
Также можно добавить пользователя сразу в несколько групп, перечислив их через запятую без пробелов (-G group1,group2,group3).
А эта команда изменит первичную группу пользователя quincy на группу «editors»:
Удаление пользователя из вторичной группы
Чтобы удалить пользователя из вторичной группы, нужно перезаписать список групп пользователя, задав набор групп, в котором не будет этой вторичной группы.
При помощи команды id смотрим, в каких группах состоит пользователь (опция -n нужна для вывода названий групп, а не их ID).
Предположим, мы увидели, что пользователь quincy состоит в группах «editors» и «writers». Если мы хотим удалить его из группы «writers», мы можем воспользоваться следующей командой:
Эта команда очень похожа на ту, которой мы установили для пользователя quincy вторичную группу «editors». Но поскольку мы сейчас не использовали флаг -a, предыдущий список групп просто перезаписался, и теперь в нем нет группы «writers».
Заключение
Теперь вы можете начать управлять группами и пользователями. Следующий шаг — определить, какие привилегии должны быть у каждой группы.