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

 

Кратко задачу прав доступа можно сформулировать так – права доступа определяют КТО и ЧТО может делать с определенными файлами, папками и дисками.

Права доступа в сочетании с пользовательскими аккаунтами позволяют обеспечить ряд требований к современной ОС:

  • Безопасность: Права доступа это очень важный элемент в безопасности всех UNIX-систем, включая MacOS X. Если, например, стандартный пользовательский аккаунт будет каким-либо образом «взломан» злоумышленником, то сам злоумышленник не сможет получить доступ и навредить важным системным файлам поскольку они закрыты (с помощью прав доступа) от пользователя с не-админским аккаунтом.
  • Конфиденциальность: Права доступа на ваших «приватных» файлах и папках могут быть настроены таким образом что другие пользовательские аккаунты будут иметь ограниченный доступ к этим обьектам либо не иметь его совсем.
  • Контролируемый общий доступ: Права доступа – очень мощный и гибкий инструмент, благодаря которому вы можете настроить индивидуальный уровень доступа для каждого пользователя, то есть указать что может (а что не может) делать каждый конкретный пользователь с данным файлом/папкой.
  • Системная целостность: Права доступа предотвращают повреждение системы не-администриторами путем (случайного/непреднамеренного) изменения важных системных файлов. Также права доступа предотвращают изменение (а также просто просмотр) файлов принадлежащих одному пользователю другим пользователем.

Анатомия прав доступа

Любой обьект на вашем компьютере принадлежит какому-либо аккаунту и содержит набор прав доступа. Эти права доступа управляют доступом каждого из трех классов пользователей – владельца (owner), группы (group), и других (others) к обьекту.

Под владельцем (owner), группой (group) и другими (others) подразумевается следующее:

  • Владелец (owner): владелец (owner) это пользовательский аккаунт который владеет данным обьектом – файлом, папкой или диском. Каждый обьект находится во владении какого-то аккаунта, выражаясь проще – «беспризорников» нет.
  • Группа (group): В дополнение к тому что обьект принадлежит определенному пользовательскому аккаунту, он также может принадлежать группе. Группа это несколько пользовательских аккаунтов обьединенных по какому-нибудь признаку, и права доступа могут применяться к группе целиком. В MacOS X уже содержится несколько групп по умолчанию, но вы также можете создавать свои собственные.
  • Другие (other): Это все остальные! Другие это все остальные пользовательские аккаунты в системе отличные от владельца и членов группы.

Права доступа к обьекту определяют какие из указанных ниже трех «прав» имеет владелец, группа и другие:

  • Read (читать): обьект доступен только для чтения (просмотра).
  • Write (запись): обьект доступен для изменения.
  • Execute (выполнение): обьект доступен для выполнения (запуска).

Файлы и папки

Право доступа Влияние на файлы Влияние на папки
Read Файл может быть просмотрен или скопирован Обьекты содержащиеся в папке доступны для просмотра если включено также право доступа «execute».
Write Файл может быть модифицирован или удален. В такую папку можно добавлять файлы. Хорошим примером папки доступной только для записи есть папка «DropBox», содержащаяся в папке «Public» каждой учетной записи. Все пользователи компьютера могут сбрасывать в Вашу папку «DropBox» файлы, то Вы и только Вы можете просмотреть содержимое своей папки «DropBox».
Execute Файл может быть запущен на выполнение. Хороший пример файла который может (или не может) быть запущен – это Unix shell скрипт, или AppleScript сохраненный с опцией RunOnly. Обратите внимание, что право доступа «execute» досталось в наследство от UNIX и напрямую в MacOS X не выставляется, да это и не нужно. В применении к папкам это право доступа также известно как «searchable». Позволяет просматривать файлы и папки находящиеся в папке, при условии что право «read» также включено. Таким образом, для того чтобы содержимое папки было доступно для просмотра должны быть одновременно включены права Read и Execute. Вероятно поэтому, дабы избежать путаницы, в MacOS X отсутствует прямой контроль права Execute, но Вы можете поэкспериментировать с ним через Терминал.

Таким образом, установив «владельцу», «группе» и «другим» набор прав из «чтения», «записи» и «выполнения» вы заметите, что права доступа могут дать ответ на три группы вопросов:

  • Может ли владелец просматривать обьект? Изменять его? Выполнять его?
  • Могут ли члены группы просматривать обьект? Изменять его? Выполнять его?
  • Могут ли все остальные просматривать обьект? Изменять его? Выполнять его?

А теперь приведем наглядный пример который продемонстрирует что собой представляют права доступа и покажет как можно использовать Терминал для проверки прав доступа конкретного файла.

  1. Запустите Терминал (/Applications/Utilities/Terminal);
  2. Создайте новый файл введя команду touch foo
    Команда touch изменяет время модификации файла и время последнего доступа к нему на текущую дату, но если файл не существует, то touch создаст его, этим «побочным» свойством мы и пользуемся.
  3. Введите ls -l foo

На экране отобразится информация о владельце и правах доступа к новосозданному файлу foo:

-rw-r–r– 1 andrey andrey 0 May 28 18:47 foo

Разберем что означает выведенная информация:

-rw-r–r– этот набор символов собственно и описывает права доступа к файлу. Строка типа «-rw-r–r–» подразделяется на 3 группы (-rw-; r–; r–), каждая группа соответствует своему классу – «владелец», «группа», «другие». Первая группа прав -rw- указывает на то что владелец данного файла может просматривать и изменять его (read, write), вторая группа r– говорит о том что члены группы могут только читать файл (read), и третья группа прав доступа r– показывает что все остальные пользователи могут только читать файл.

число 1 – число связей. Суть числа связей следующая – один и тот же файл может быть прописан в разных каталогах и возможно под разными именами. При удалении такого файла из одного из каталогов уничтожается лишь связь. Сам же файл сохраняется до тех пор, пока не будет удалена последняя связь. Более подробно о этой особенности файловой системы UNIX – см. в конце статьи.

Далее идет два слова andrey andrey. Первое означает владельца, таким образом аккаунт с именем andrey владеет этим файлом. На Вашем компьютере Ваш аккаунт будет, ясное дело, называться по другому.

Второе слово andrey – это имя группы, которая имеет доступ к файлу. Вообще говоря, если имя владельца и имя группы одинаковые то это _скорее всего_ означает что Вы являетесь членом своей собственной группы которая содержит только одного пользователя – Вас. И если Вы не единственный пользователь компьютера, а например, это Ваш домашний компьютер которым пользуется вся семья, то толку от того что каждый пользователь будет членом своей собственной группы очень мало. Например, Вы сбросите фотографий на компьютер и попросите кого-то отредактировать их – этому человеку придется создать свою копию файлов, так как вносить изменения в оригиналы ему не разрешено. В некоторых случаях это бесспорно удобно, но иногда хочется иметь такие файлы и папки с которыми можно работать коллективно. Поэтому целесообразно создать группу, назвать ее например «my_family» и прописать в нее всех кто в будущем будет работать наравне с Вами. А потом для некоторых папок которые необходимо открыть для семейного пользования просто включать доступ на чтение/запись группе «my_family». Этим мы займемся во второй части статьи.

Число 0 – размер файла в байтах. В данном случае ноль, так как мы только создали файл и ничего в нем не писали.

May 28 18:47 – дата и время последних изменений.

foo имя файла.

На этом теоретическая часть окончена. О том как правильно задавать/изменять права доступа и обьединять пользователей в группы мы рассмотрим во второй части. Следите за обновлениями на сайте.

Информация для любознательных – особенность файловой системы UNIX

В отличие от других систем UNIX хранит в каталоге только два элемента информации для каждого файла: его индекс и имя, под которым он известен в данном каталоге. Отсюда ясно, каким образом файл может иметь более одной связи – два каталога содержат записи с одинаковым индексом файла. Из этого также следует, что файлы UNIX не имеют внутренней связи со своими именами: имена содержатся в каталогах, а не в индексных дескрипторах. Вся же остальная информация о файле содержится в индексном дескрипторе. Таким образом, когда UNIX открывает файл с заданным именем в некотором каталоге, сначала по каталогу определяется индекс файла, затем отыскивается его индексный дескриптор в файловой системе, проверяются содержащиеся в нем права доступа и, наконец, отыскивается начало данных. –– Р. Готье, «Руководство по операционной системе UNIX», М, Финансы и Статистика, 1985.

Почти все о правах доступа, часть 2

Литература
Журнал MACWORLD
Книжка Р. Готье, «Руководство по операционной системе UNIX»

Tags: