Регистрация Войти
Вход на сайт
Качественные бесплатные шаблоны dle скачать с сайта
» » » Управление правами доступа во FreeBSD

Управление правами доступа во FreeBSD

15-07-2010
Автор: admin
Просмотров: 8 386
Комментариев: 0
Версия для печати
Права доступа играют важную роль в формировании концепции безопасности ОС. В FreeBSD права доступа являются довольно простыми, в отличии от операционной системы Windows, где есть восходящее, нисходящее наследование. Конечно, такая гибкость в установлении прав доступа к определённым ресурсам это положительный момент, но слишком сложная система выставления прав может привести к серьёзной ошибке, что в свою очередь может скомпрометировать систему в целом.
В операционной система FreeBSD существует всего три стандартных флага (так же имеются специальные флаги), которые определяют те или иные права доступа:
r – чтение
w – запись
x – выполнение

Данные флаги применяются к следующим трём категориям:
u - Пользователь (owner)
g - Группа (group)
o - Другие (other)

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

Для просмотра установленных прав доступа, соответствующего владельца и группы на какой-либо ресурс используется команда ls(1) с опцией -l:

fdesktop1# ls -l /root/tests
-rwxr-x---  1 atrium  wheel  13 Jun  5 02:05 /root/tests


Как видно из примера, каталог имеет для владельца (atrium) права на чтение, запись и выполнение, для группы (wheel) права на чтение и выполнение, для всех остальных пользователей права доступа отсутствуют.


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

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

Пример:
Пользователь atrium является владельцем определённого файла и состоит в группе wheel. Права доступа на файл определены как rwx-r-x----, т.е владелец файла может записывать, исполнять, читать файл, а группа только читать и исполнять. Далее попробуем произвести запись в файл:

fdesktop1# id atrium
uid=1001(atrium) 0(wheel)
fdesktop1# ls -l /root/tests
-rwxr-x---  1 atrium  wheel  13 Jun  5 02:05 /root/tests

$ echo "test message" >> /root/tests
$ cat /root/tests
test message


Как видим запись в файл произошла успешно.

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 следующие права доступа:
Управление правами доступа во FreeBSD
Теперь переведём полученные цифры:

u(user) – 111 – смотрим нашу таблицу соответствия справа налево, данной последовательности соответствуют цифры – 124, далее полученные цифры суммируем и получаем – 1+2+4 = 7
g(group) – 101 – проделываем то же самое – 1+4 = 5
o(other) – 100 – проделываем то же самое – 4 = 4

В результате наши права доступа на файл выглядят следующим образом – 754 и их можно назначить с помощью команды chmod(1).

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

Пример:
fdesktop1# touch test.txt
fdesktop1# chmod 754 test.txt
fdesktop1# ls -l test.txt
-rwxr-xr--  1 root  wheel  0 Jun  9 02:26 test.txt



Так же для облегчения запоминания составим таблицу соответствующую цифровому представлению прав доступа:
Управление правами доступа во FreeBSD

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

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-):

fdesktop1# ls -l
total 2
-rw-r--rw-  1 atrium  wheel  8 Jun 18 00:51 file.txt
fdesktop1# chmod u+x,g=x,o-r file.txt
fdesktop1# ls -l
total 2
-rwx--x-w-  1 atrium  wheel  8 Jun 18 00:51 file.txt


или можно по-другому

fdesktop1# ls -l
total 2
-rw-r--rw-  1 atrium  wheel  8 Jun 18 00:51 file.txt
fdesktop1# chmod u+x,g-r+x,o-r file.txt
fdesktop1# ls -l
total 2
-rwx--x-w-  1 atrium  wheel  8 Jun 18 00:51 file.txt


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

Так же помимо стандартных прав доступа – чтение, запись, выполнение существуют специальные права доступа, их можно назначить как в символьном, так и в цифровом варианте:
Управление правами доступа во FreeBSD
Важно!
Права, на каталог по своему действию отличаются от прав, установленных на файл:

1.Право записи установленное на каталог для группы, владельца или других позволяет удалить в нём любой файл в независимости от владельца и установленных на него прав доступа, поэтому с правом записи на каталог будьте весьма осторожны. Для решения данной проблемы можно использовать специальный флаг – Stick бит (1000), приведённый в таблице 1.5.

2.Право выполнения установленное на каталог позволяет применение для него команды ls(1) с ключом ‘–l', команды cd(1) так как происходит обращение к метаданным файлов.

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

4.Права чтения и выполнения для каталога действуют независимо друг от друга, т.е наличие обоих прав доступа необязательно. Комбинацией данных прав доступа можно получить довольно интересные результаты:
При установленном праве выполнения на каталог, без права чтения позволяет создать так называемый “тёмный” каталог. Что это такое? В данном каталоге отсутствует возможность получить листинг находящихся в нём файлов, но имеется возможность обращаться к файлам, если их имена заранее известны. К примеру, создадим тёмный каталог и попытаемся получить листинг файлов в нём и прочитать один из файлов с заранее известным именем:

fdesktop1# ls -l ./test
total 2
-rw-r--rw-  1 atrium  wheel  8 Jun 18 00:51 file.txt
fdesktop1# ls -l
total 31
drwx--x---  2 root    wheel      512 Jun 18 00:51 test
                
                $ cat /root/test/file.txt
My file
$ ls /root/test
ls: test: Permission denied


Установленные права доступа на тот или иной ресурс может изменить только владелец или суперпользователь с UID = 0.


Предопределение прав доступа

Существует весьма полезная команда umask(2), она задаёт маску на вновь создаваемые файлы в системе. Данную команду Вы можете встретить не только в ОС FreeBSD, но так же и в различном ПО (Samba….). В ПО она может применяться и для каталогов, но существует различие в способе высчитывания прав доступа для каталогов и файлов, которые определяет данная команда. Формат команды весьма прост, задаются три цифры, которые затем поочерёдно вычитаются из 7, если команда определяет права для каталогов и из 6, если команда определяет права для файлов. Для примера в ОС FreeBSD вы задаёте маску 240, это позволит задать права доступа на вновь создаваемые файлы 426, т.е в символьном представлении r---w-rw-:

$ umask 240
$ touch file.test
$ ls -l
total 0
-r---w-rw-  1 atrium  wheel  0 Jun 19 02:18 file.test


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

chmod(1) – изменения прав доступа к тому или иному ресурсу.
chown(8) – изменение группы и владельца ресурса.
chgrp(1) – изменение группы ресурса.
ls(1) – чтение каталога и получение различной подробной информации.
stat(1) – получение статистической информации о файле, весьма полезная команда.
umask(2) – задаёт маску на создаваемые файлы для пользователя.

Практика:
(Для более подробной информации о командах обязательно читайте маны)

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

В цифровом варианте:
$ touch file
$ chmod 640 ./file
$ ls -l
total 0
-rw-r-----  1 atrium  wheel  0 Jun 18 01:04 file


В символьном варианте:
$ 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


Сменим владельца или группу для файла или каталога:
$ ls -l
total 0
-rw-r-----  1 atrium  wheel  0 Jun 18 01:06 test.file
$ chgrp staff test.file
$ ls -l
total 0
-rw-r-----  1 atrium  staff  0 Jun 18 01:06 test.file


$ ls -l
total 0
-rw-r-----  1 atrium  staff  0 Jun 18 01:06 test.file
$ /usr/sbin/chown atrium:0 test.file
$ ls -l
total 0
-rw-r-----  1 atrium  wheel  0 Jun 18 01:06 test.file


fdesktop1# ls -l /home/atrium/rt
total 0
-rw-r-----  1 atrium  wheel  0 Jun 18 01:06 test.file
fdesktop1# chown root:0 /home/atrium/rt/test.file
fdesktop1# ls -l /home/atrium/rt
total 0
-rw-r-----  1 root  wheel  0 Jun 18 01:06 test.file


Посмотрим информацию о файле или каталоге:
$ stat test.file
91 16069 -rw-r----- 1 root wheel 0 0 "Jun 18 01:06:57 2009" "Jun 18 01:06:57 2009"
"Jun 18 01:12:16 2009" "Jun 18 01:06:57 2009" 4096 0 0 test.file
$ ls -l test.file
-rw-r-----  1 root  wheel  0 Jun 18 01:06 test.file


$ ls -l | grep '^d'
drwxr-xrw-  2 atrium  wheel  512 Jun 18 01:07 rt
$ stat rt
91 16065 drwxr-xrw- 2 atrium wheel 64017 512 "Jun 18 01:12:20 2009"
"Jun 18 01:07:01 2009"  "Jun 18 01:07:01 2009" "Jun 18 01:04:31 2009" 4096 4 0 rt


Автор статьи.
Теги: freebsd chmod chown
Рейтинг статьи:
  • 0
  
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.