Иерархия прав доступа
Теперь – более подробно о том, чему соответствуют девять символов в строке атрибутов, выдаваемой ls. Эти девять символов имеют вид "rwxrwxrwx", где некоторые "r", "w" и "x" могут заменяться на "-". Очевидно, буквы отражают принятые в Linux три вида доступа – чтение, запись и использование – однако в ярлыке они присутствуют в трех экземплярах!
Дело в том, что любой пользователь (процесс) Linux по отношению к любому файлу может выступать в трех ролях: как хозяин (user), как член группы, которой принадлежит файл (group), и как посторонний (other), никаких отношений собственности на этот файл не имеющий. Строка атрибутов – это три тройки "rwx", описывающие права доступа к файлу хозяина этого файла (первая тройка, "u"), группы, которой принадлежит файл (вторая тройка, "g") и посторонних (третья тройка, "o"). Если в какой-либо тройке не хватает буквы, а вместо нее стоит "-", значит, пользователю в соответствующей роли будет в соответствующем виде доступа отказано.
При выяснении отношений между файлом и пользователем, запустившим процесс, роль определяется так:
- Если UID файла совпадает с UID процесса, пользователь – хозяин файла
- Если GID файла совпадает с GID любой
группы, в которую входит пользователь, он – член группы, которой принадлежит файл.
- Если ни 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. Создание файлов с различными правами доступа (html, txt)
Права доступа изменяются с помощью трех команд: chown (
change
owner, сменить владельца), chgrp (
change
group, сменить группу) и chmod с расширенным форматом параметра: перед частью, определяющей
доступ (перед знаком "+" или "-"), могут быть перечислены роли "u", "g", "o" и "a" (
all, что соответствует "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. Чтение файлов с различными правами доступа (html, txt)
Что же получается? Из файла /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"
сам Мефодий просмотреть не сможет (тройка хозяина определяет полное отсутствие доступа)1).
Содержание раздела