Опубликован: 22.06.2005 | Уровень: для всех | Доступ: платный | ВУЗ: Компания IBM
Лекция 6:

Права доступа

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >

Иерархия прав доступа

Теперь – более подробно о том, чему соответствуют девять символов в строке атрибутов, выдаваемой ls. Эти девять символов имеют вид " rwxrwxrwx ", где некоторые " r ", " w " и " x " могут заменяться на " - ". Очевидно, буквы отражают принятые в Linux три вида доступа – чтение, запись и использование – однако в ярлыке они присутствуют в трех экземплярах!

Дело в том, что любой пользователь ( процесс ) Linux по отношению к любому файлу может выступать в трех ролях: как хозяин ( u ser), как член группы, которой принадлежит файл ( g roup), и как посторонний ( o ther), никаких отношений собственности на этот файл не имеющий. Строка атрибутов – это три тройки " rwx ", описывающие права доступа к файлу хозяина этого файла (первая тройка, " u "), группы, которой принадлежит файл (вторая тройка, " g ") и посторонних (третья тройка, " o "). Если в какой-либо тройке не хватает буквы, а вместо нее стоит " - ", значит, пользователю в соответствующей роли будет в соответствующем виде доступа отказано.

При выяснении отношений между файлом и пользователем, запустившим процесс, роль определяется так:

  1. Если UID файла совпадает с UID процесса, пользователь – хозяин файла
  2. Если GID файла совпадает с GID любой группы, в которую входит пользователь, он – член группы, которой принадлежит файл.
  3. Если ни UID, ни GID файла не пересекаются с UID процесса и списком групп, в которые входит запустивший его пользователь, этот пользователь – посторонний.

Именно в роли хозяина пользователь ( процесс ) может изменять ярлык файла. Это вполне соответствует обыденным понятиям о собственности (" мой файл: захочу – покажу, захочу – спрячу"). Единственное, чего не может делать хозяин со своим файлом – менять ему хозяина.

Далее следует протокол действий Гуревича, который, пользуясь возможностями суперпользователя, создал в каталоге /tmp несколько файлов с различными правами доступа к ним. Для того чтобы напомнить человеку, что работа ведется с правами суперпользователя (это требует гораздо большей ответственности), bash заменил привычный "доллар" в конце приглашения командной строки на "решетку". Входное имя он тоже заменил, но практика показывает, что решетка эффективнее:

[root@localhost root]# echo "All can read" > /tmp/read.all
[root@localhost root]# echo "Group wheel can read" > /tmp/read.wheel
[root@localhost root]# echo "Group methody can read" > /tmp/read.methody
[root@localhost root]# echo "Methody himself can read" > /tmp/read.Methody
[root@localhost root]# chgrp wheel /tmp/read.wheel; chmod o-r /tmp/read.wheel
[root@localhost root]# chgrp methody /tmp/read.methody; chmod o-r /tmp/read.methody
[root@localhost root]# chown methody /tmp/read.Methody; chmod og-r /tmp/read.Methody
6.4. Создание файлов с различными правами доступа

Права доступа изменяются с помощью трех команд: chown ( ch ange own er, сменить владельца), chgrp ( ch ange gr ou p, сменить группу ) и chmod с расширенным форматом параметра: перед частью, определяющей доступ (перед знаком " + " или " - "), могут быть перечислены роли " u ", " g ", " o " и " a " ( a ll, что соответствует " ugo "), доступ для которых изменяется. Кроме того, при задании доступа можно вместо " + " и " - " использовать " = ", тогда для заданных ролей указанные способы доступа разрешаются, а неуказанные – запрещаются. Вместо пары команд chown хозяин файл ; chgrp группа файл можно применять одну: chown хозяин:группа файл, которая изменяет одновременно и UID, и GID файла (каталога, ссылки и т. п.).

Мефодий хочет посмотреть, кто имеет доступ к файлам, созданным Гуревичем, а вдобавок – к файлу /etc/shadow. Для этого он использует команду ls -l с шаблоном, описывающим сразу все файлы, которые находятся в /tmp и имя которых начинается на " read.".

[methody@localhost methody]$ ls -l /tmp/read.* /etc/shadow
 -r-------- 1 root  root   0 Сен 10 02:08 /etc/shadow
 -rw-r--r-- 1 root  root  13 Сен 22 17:49 /tmp/read.all
 -rw-r----- 1 root  methody 23 Сен 22 17:49 /tmp/read.methody
 -rw------- 1 methody root  25 Сен 22 17:50 /tmp/read.Methody
 -rw-r----- 1 root   wheel  21 Сен 22 17:49 /tmp/read.wheel
[methody@localhost methody]$ cat /tmp/read.* /etc/shadow
 All can read
 Group methody can read
 Methody himself can read
 cat: /tmp/read.wheel: Permission denied
 cat: /etc/shadow: Permission denied
6.5. Чтение файлов с различными правами доступа

Что же получается? Из файла /etc/shadow можно только читать, причем только пользователю root. Изменять файлы /tmp/read.all, /tmp/read.wheel и /tmp/read.methody может только root, он же может и читать из них. Также читать из файла /tmp/read.wheel могут члены группы wheel, а из файла /tmp/read.methody – члены группы methody (это имя группы, а не имя пользователя!). Читать и писать в файл /tmp/read.Methody может только пользователь methody. Наконец, читать из файла /tmp/read.all могут к тому же и члены группы root, и вообще любые пользователи.

Попытка вывести содержимое этих файлов на экран (а значит, прочитать их) приводит к ожидаемому результату: процессу cat ( UID methody ) разрешено чтение из трех файлов. Из /tmp/read.all – так как по отношению к нему Мефодий играет роль постороннего, а ему открыт доступ на чтение (" r " в начале третьей тройки). Из /tmp/read.methody – так как пользователь methody входит в группу methody (см. пример 6.1), членам которой разрешено читать из этого файла (" r " в начале второй тройки). И, конечно, из файла /tmp/read.Methody, которому methodyхозяин, имеющий доступ на чтение (" r " в первой тройке).

Если бы Мефодию захотелось записать что-нибудь в эти файлы, он бы получил доступ только к одному – /tmp/read.Methody, потому что по отношению к остальным файлам Мефодий играет роль, которой закрыт доступ на запись ( /tmp/read.methody – член группы, остальные три – посторонние ).

Таким образом, определение прав доступа процесса к объекту файловой системы (например, файла) происходит так. Используя UID процесса, список групп, в которые входит пользователь, запустивший этот процесс, UID файла и GID файла, система определяет роль процесса по отношению к файлу, а затем обращается к соответствующей тройке атрибутов файла. Стоит заметить, что процесс не может выступать сразу в нескольких ролях, поэтому, например, файл с ярлыком " ---rw-rw- methody methody " сам Мефодий просмотреть не сможет (тройка хозяина определяет полное отсутствие доступа) 2Зато он может сначала поменять права доступа к этому файлу с помощью chmod u+r, а потом читать из него. .

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Тимур Булатов
Тимур Булатов

С момента выхода курса прошло достаточно много времени, и хотелось бы понимать, насколько курс является актуальным на сегодняшний день.

дмитрий шремзер
дмитрий шремзер

В поле PPID (" p arent p rocess id entificator") указан идентификатор родительского процесса, т. е. процессапородившего данный. Для ps это – bash, а для bash, очевидно, login

А что тогда находится в поле CMD?

Гузель Фахретдинова
Гузель Фахретдинова
Россия
Алексей Маряскин
Алексей Маряскин
Россия