Управление правами доступа во FreeBSD
Права доступа играют важную роль в формировании концепции безопасности ОС. В FreeBSD права доступа являются довольно простыми, в отличии от операционной системы Windows, где есть восходящее, нисходящее наследование. Конечно, такая гибкость в установлении прав доступа к определённым ресурсам это положительный момент, но слишком сложная система выставления прав может привести к серьёзной ошибке, что в свою очередь может скомпрометировать систему в целом.
В операционной система FreeBSD существует всего три стандартных флага (так же имеются специальные флаги), которые определяют те или иные права доступа: r – чтение w – запись x – выполнение Данные флаги применяются к следующим трём категориям: u - Пользователь (owner) g - Группа (group) o - Другие (other) Владельца определяет непосредственно пользователь, который владеет тем или иным ресурсом (файлом, устройством, каталогом), он может как снимать, так и устанавливать различные флаги доступа. Группу определят список пользователей, которые имеет совместный доступ к ресурсу. Другие – это все те пользователи, которые не входят в группу и соответственно ниодин из них не является владельцем ресурса. Другие являются нежелательными пользователями и чаще всего они имеют минимальный набор прав или не имеют их вообще. Для просмотра установленных прав доступа, соответствующего владельца и группы на какой-либо ресурс используется команда ls(1) с опцией -l:
Как видно из примера, каталог имеет для владельца (atrium) права на чтение, запись и выполнение, для группы (wheel) права на чтение и выполнение, для всех остальных пользователей права доступа отсутствуют. Для того чтобы понимать все тонкости прав доступа важно уяснить порядок их проверки: 1.Первоначально проверяется не является ли пользователь владельцем файла и если он таковым является, определяются его права и дальше проверка прав доступа не идёт, т.е если даже пользователь состоит в группе у которой права намного ниже чем у владельца, права группы даже не будут проверяться. Если пользователь является владельцем ресурса и для него не определены какие-либо права, то доступ запрещается. Пример: Пользователь atrium является владельцем определённого файла и состоит в группе wheel. Права доступа на файл определены как rwx-r-x----, т.е владелец файла может записывать, исполнять, читать файл, а группа только читать и исполнять. Далее попробуем произвести запись в файл:
Как видим запись в файл произошла успешно. 2.Если пользователь не является владельцем файла, то проверятся, не состоит ли он в группе, которая имеет права доступа к ресурсу, если это так, то система определяет права доступа пользователю соответствующие правам группы. Если пользователь состоит в группе и для группы отсутствуют права, то доступ запрещается. 3.Далее, если пользователь не является владельцем файла и не состоит в группе, которая имеет доступ к файлу, то ему назначаются права определённые для других. 4.Особо проверяются права доступа для пользователя root. Если система видит, что пользователь имеет UID = 0, что соответствует root, независимо от login_name, то система вообще не проверяет права доступа к ресурсу, так как пользователь root имеет неограниченный доступ к системе. Виды представления прав доступа: Права доступа можно представить как в цифровом виде, так и в символьном. 1. Цифровой вариант Так как права доступа назначаются трём категориям, и имеется три вида прав доступа, в результате всего назначается девять флагов: (111 – 111 -111) – соответствует правам доступа 777. Представление прав доступа основано на двоичной системе. Т.е каждой категории можно назначит три флага – чтение (r), запись (w), выполнение (x), что соответствует (111). 1 означает присутствие того или иного флага, 0 – соответственно отсутствие того или иного флага. Для перевода двоичной системы в десятичную используется следующая таблица соответствия, читается она справа налево: 128 64 32 16 8 4 2 1 Как же нам перевести наши права доступа в десятичную систему? Давайте потренируемся. Назначим файлу с именем test.txt следующие права доступа: Теперь переведём полученные цифры: u(user) – 111 – смотрим нашу таблицу соответствия справа налево, данной последовательности соответствуют цифры – 124, далее полученные цифры суммируем и получаем – 1+2+4 = 7 g(group) – 101 – проделываем то же самое – 1+4 = 5 o(other) – 100 – проделываем то же самое – 4 = 4 В результате наши права доступа на файл выглядят следующим образом – 754 и их можно назначить с помощью команды chmod(1). Для обратного перевода, цифрового значения в двоичное, необходимо разделить на 2, остаток при делении соответствует единице, если деление без остатка – 0, записывается справа налево. Пример:
Так же для облегчения запоминания составим таблицу соответствующую цифровому представлению прав доступа: Как видно из составленной таблицы для того чтобы назначить права доступа на ресурс для той или иной категории, всего лишь необходимо сложить права доступа данной категории между собой. Т.е нам, к примеру, необходимо назначить следующие права доступа на файл: 1.Для владельца - чтение, запись, выполнение 2.Для группы – чтение и запись 3.Для других – чтение Владелец: 0400 + 0200 + 0100 = 0700 Группа: 0040 + 0020 = 0060 Другие: 0004 = 0004 В итоге мы получаем права доступа для файла – 764, данные права можно назначить с помощью команды chmod(1). 2. Символьный вариант Символьный вариант назначения прав доступа запомнить довольно легко. При данном способе назначения прав доступа учитываются четыре категории: a - Все (all) (ugo) u - Владелец (owner) g - Группа (group) o - Другие (other) Для этих трёх категорий назначаются права доступа: r – право на чтение [см. Таблица 1.4] s – для u (owner) – setuid бит, для g (group) – setgid бит [см. Таблица 1.5] t – stick бит [см. Таблица 1.5] w – право на запись [см. Таблица 1.4] x – право на выполнение [см. Таблица 1.4] Над правами, описание которых представлено выше возможно выполнение следующих операций: + - добавляет указанные права доступа для той или иной категории - - удаляет указанные права доступа для той или иной категории = - назначает указанные права доступа, при этом отменяя предыдущие для той или иной категории При назначении прав доступа с помощью символьного варианта, категории разделяются символом запятая (,). Для примера, файл имеет права доступа (rw- r— rw--), назначим ему следующие права доступа (rwx --x –w-):
или можно по-другому
Способов довольно много, как говорится, всё зависит от вашей фантазии, мне больше нравится в цифровом варианте. Так же помимо стандартных прав доступа – чтение, запись, выполнение существуют специальные права доступа, их можно назначить как в символьном, так и в цифровом варианте: Важно! Права, на каталог по своему действию отличаются от прав, установленных на файл: 1.Право записи установленное на каталог для группы, владельца или других позволяет удалить в нём любой файл в независимости от владельца и установленных на него прав доступа, поэтому с правом записи на каталог будьте весьма осторожны. Для решения данной проблемы можно использовать специальный флаг – Stick бит (1000), приведённый в таблице 1.5. 2.Право выполнения установленное на каталог позволяет применение для него команды ls(1) с ключом ‘–l', команды cd(1) так как происходит обращение к метаданным файлов. 3.Право чтения для каталога позволяет получить список файлов без подробной информации о них. 4.Права чтения и выполнения для каталога действуют независимо друг от друга, т.е наличие обоих прав доступа необязательно. Комбинацией данных прав доступа можно получить довольно интересные результаты: При установленном праве выполнения на каталог, без права чтения позволяет создать так называемый “тёмный” каталог. Что это такое? В данном каталоге отсутствует возможность получить листинг находящихся в нём файлов, но имеется возможность обращаться к файлам, если их имена заранее известны. К примеру, создадим тёмный каталог и попытаемся получить листинг файлов в нём и прочитать один из файлов с заранее известным именем:
Установленные права доступа на тот или иной ресурс может изменить только владелец или суперпользователь с UID = 0. Предопределение прав доступа Существует весьма полезная команда umask(2), она задаёт маску на вновь создаваемые файлы в системе. Данную команду Вы можете встретить не только в ОС FreeBSD, но так же и в различном ПО (Samba….). В ПО она может применяться и для каталогов, но существует различие в способе высчитывания прав доступа для каталогов и файлов, которые определяет данная команда. Формат команды весьма прост, задаются три цифры, которые затем поочерёдно вычитаются из 7, если команда определяет права для каталогов и из 6, если команда определяет права для файлов. Для примера в ОС FreeBSD вы задаёте маску 240, это позволит задать права доступа на вновь создаваемые файлы 426, т.е в символьном представлении r---w-rw-:
Для работы с правами доступа и изменения владельцев, групп будут полезны следующие команды: chmod(1) – изменения прав доступа к тому или иному ресурсу. chown(8) – изменение группы и владельца ресурса. chgrp(1) – изменение группы ресурса. ls(1) – чтение каталога и получение различной подробной информации. stat(1) – получение статистической информации о файле, весьма полезная команда. umask(2) – задаёт маску на создаваемые файлы для пользователя. Практика: (Для более подробной информации о командах обязательно читайте маны) Создадим файл и установим ему для владельца права на чтение и запись, для группы чтение, а для других никаких прав: В цифровом варианте:
В символьном варианте: $ touch test.file $ chmod u=rw,g=r,o-rwx test.file $ ls -l total 0 -rw-r----- 1 atrium wheel 0 Jun 18 01:06 test.file Сменим владельца или группу для файла или каталога:
Посмотрим информацию о файле или каталоге:
Автор статьи. |
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.