Пользователи системы


Права доступа в файловой системе



страница16/42
Дата01.12.2017
Размер5.38 Mb.
ТипПрограмма
1   ...   12   13   14   15   16   17   18   19   ...   42

Права доступа в файловой системе


Работая с Linux, Мефодий заметил, что некоторые файлы и каталоги недоступны ему ни для чтения, ни для записи, ни для использования. Зачем такие нужны? Оказывается, другие пользователи могут обращаться к этим файлам, а у Мефодия просто недостаточно прав.

Идентификатор пользователя


Говоря о правах доступа пользователя к файлам, стоит заметить, что в действительности манипулирует файлами не сам пользователь, а запущенный им процесс (например, утилита rm или cat). Поскольку и файл, и процесс создаются и управляются системой, ей нетрудно организовать какую угодно политику доступа одних к другим, основываясь на любых свойствах процессов как субъектов и файлов как объектов системы.

В Linux, однако, используются не какие угодно свойства, а результатидентификации пользователя – его UID. Каждый процесс системы обязательно принадлежит какому-нибудь пользователю, и идентификатор пользователя (UID) – обязательное свойство любого процесса Linux. Когда программа login запускает стартовый командный интерпретатор, она приписывает ему UID, полученный в результате диалога. Обычный запуск программы (exec()) или порождение нового процесса (fork()) не изменяютUID процесса, поэтому все процессы, запущенные пользователем во время терминальной сессии, будут иметь его идентификатор.

Поскольку UID однозначно определяется входным именем, оно нередко используется вместо идентификатора – для наглядности. Например, вместо выражения "идентификатор пользователя, соответствующий входному имениmethody", говорят "UID methody" (в приведенном ниже примере этот идентификатор равен 503):

[methody@localhost methody]$ id

uid=503(methody) gid=503(methody) группы=503(methody)

[methody@localhost methody]$ id shogun

uid=400(shogun) gid=400(shogun) г

руппы=400(shogun),4(adm),10(wheel),19(proc)



Пример 6.1. Как узнать идентификаторы пользователя и членство в группах (html, txt)

Утилита id, которой воспользовался Мефодий, выводит входное имя пользователя и соответствующий ему UID, а также группу по умолчанию и полный список групп, членом которых он является.


Идентификатор группы


Как было рассказано в лекции 1, пользователь может быть членом нескольких групп, равно как и несколько пользователей могут быть членами одной и той же группы. Исторически сложилось так, что одна из групп – группа по умолчанию – является для пользователя основной: когда (не вполне точно) говорят о "GID пользователя", имеют в виду именно идентификатор группы по умолчанию. В лекции 12 будет рассказано о том, что GIDпользователя вписан в учетную запись и хранится в /etc/passwd, а информация о соответствии имен групп их идентификаторам, равно как и о том, в какие еще группы входит пользователь – в файле /etc/group. Из этого следует, что пользователь не может не быть членом как минимум одной группы, как снаряд не может не попасть в эпицентр взрыва.1)

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


Ярлыки объектов файловой системы


При создании объектов файловой системы – файлов, каталогов и т. п. – каждому в обязательном порядке приписывается ярлыкЯрлык включает в себя UID – идентификатор пользователя-хозяина файлаGID – идентификатор группы, которой принадлежит файл, тип объекта и набор так называемых атрибутов, а также некоторую дополнительную информацию. Атрибуты определяют, кто и что имеет право делать с файлом, они описаны ниже:

[methody@arnor methody]$ ls -l

итого 24

drwx------ 2 methody methody 4096 Сен 12 13:58 Documents

drwxr-xr-x 2 methody methody 4096 Окт 31 15:21 examples

-rw-r--r-- 1 methody methody 26 Сен 22 15:21 loop

-rwxr-xr-x 1 methody methody 23 Сен 27 13:27 script

drwx------ 2 methody methody 4096 Окт 1 15:07 tmp

-rwxr-xr-x 1 methody methody 32 Сен 22 13:26 to.sort

Пример 6.2. Права доступа к файлам и каталогам, показанные командой ls -l (html, txt)

Ключ "-l" утилиты ls определяет "длинный" (long) формат выдачи (справа налево): имя файла, время последнего изменения файла, размер в байтах, группахозяин, количество жестких ссылок и строчка атрибутов. Первый символ в строчке атрибутов определяет тип файла. Тип "-" отвечает "обычному" файлу, а тип "d" – каталогу (directory). Имя пользователя и имя группы, которым принадлежит содержимое домашнего каталога Мефодия, – естественно, methody.

Быстрый разумом Мефодий немедленно заинтересовался вот чем: несмотря на то, что создание жестких ссылок на каталог невозможно, значение поля "количество жестких ссылок" для всех каталогов примера равно двум, а не одному. На самом деле этого и следовало ожидать, потому что любой каталог файловой системы Linux всегда имеет не менее двух имен: собственное (например, tmp) и имя "." в самом этом каталоге (tmp/.). Если же в каталоге создать подкаталог, количество жестких ссылок на этот каталог увеличится на 1 за счет имени ".." в подкаталоге (например, tmp/subdir1/..):

[methody@arnor methody]$ ls -ld tmp

drwx------ 3 methody methody 4096 Окт 1 15:07 tmp

[methody@arnor methody]$ mkdir tmp/subdir2

[methody@arnor methody]$ ls -ld tmp

drwx------ 4 methody methody 4096 Окт 1 15:07 tmp

[methody@arnor methody]$ rmdir tmp/subdir*

[methody@arnor methody]$ ls -ld tmp

drwx------ 2 methody methody 4096 Окт 1 15:07 tmp

Пример 6.3. Несколько жестких ссылок на каталог все-таки бывает! (html, txt)

Здесь Мефодий использовал ключ "-d" (directory) для того, чтобы ls выводил информацию не о содержимом каталога tmp, а о самом этом каталоге.


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


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

Дело в том, что любой пользователь (процесс) Linux по отношению к любому файлу может выступать в трех ролях: как хозяин (user), как член группы, которой принадлежит файл (group), и как посторонний (other), никаких отношений собственности на этот файл не имеющий. Строка атрибутов – это три тройки "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. Создание файлов с различными правами доступа (html, txt)

Права доступа изменяются с помощью трех команд: chown (change owner, сменить владельца), chgrp (changegroup, сменить группу) и 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).




Поделитесь с Вашими друзьями:
1   ...   12   13   14   15   16   17   18   19   ...   42


База данных защищена авторским правом ©vossta.ru 2019
обратиться к администрации

    Главная страница