Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие_Unix.doc
Скачиваний:
10
Добавлен:
26.11.2019
Размер:
2.41 Mб
Скачать

2.5 Права доступа к файлам

В операционной системе UNIX используется трехуровневая иерархия пользователей: группа, подгруппа, пользователь. В связи с этим каждый файл файловой системы обладает двумя атрибутами. Первый атрибут - это, так называемый, владелец файла. Этот атрибут связан с одним конкретным пользователем, который является владельцем файла. Владельцем файла можно стать по умолчанию, если создать этот файл, а также есть команда, которая позволяет менять владельца файла. Второй атрибут - это атрибут, связанный с защитой доступа к файлу.

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

Набор прав хранится в индексном дескрипторе данного файла.

Базовые биты прав доступа представлены в таблице. Там дано восьмеричное значение, задающее соответствующий бит, вид этого бита в первом столбце длинного листинга и право, задаваемое этим битом.

Таблица 3 – Формирование прав доступа

Восьмеричное значение

Вид в столбце прав доступа

Право или назначение бита

4000

---s------

Установленный эффективный идентификатор владельца (бит SUID)

2000

------s---

Установленный эффективный идентификатор группы (бит SПID)

1000

---------t ---------T

Клейкий (sticky) бит. Вид для каталогов и выполняемых файлов, соответственно.

0400

-r--------

Право владельца на чтение

0200

--w-------

Право владельца на запись

0100

---x------

Право владельца на выполнение

0040

----r-----

Право группы на чтение

0020

-----w----

Право группы на запись

0010

------x---

Право группы на выполнение

0004

-------r--

Право всех прочих на чтение

0002

--------w-

Право всех прочих на запись

0001

---------x

Право всех прочих на выполнение

Бит чтения для всех типов файлов имеет одно и то же значение: он позволяет читать содержимое файла (получать листинг каталога командой ls).

Бит записи также имеет одно и то же значение: он позволяет редактировать этот файл. Для каталога – это возможность менять его содержимое, т.е. создавать и удалять файлы.

Если для некоторого файла установлен бит выполнения, то файл может выполняться как команда. В случае установки этого бита для каталога, этот каталог можно сделать текущим (перейти в него командой cd).

Установленный бит смены идентификатора пользователя SUID означает, что доступный пользователю на выполнение файл будет выполняться с правами (с эффективным идентификатором) владельца, а не пользователя, вызвавшего файл (как это обычно происходит).

Установленный бит смены идентификатора группы SGID означает, что доступный пользователю на выполнение файл будет выполняться с правами (с эффективным идентификатором) группы-владельца, а не пользователя, вызвавшего файл (как это обычно происходит).

Примером может быть утилита passwd, позволяющая пользователю менять свой пароль. Для изменения пароля нужно редактировать содержимое файла /etc/passwd и /etc/shodow. Предоставить права всем изменять содержимое этих файлов невозможно. Установка SUID для утилиты passwd позволяет решить эту проблему. Владельцем файла /usr/bin/passwd, в котором хранится утилита является суперпользователь. Кто бы ни запустил утилиту на выполнение, на время работы данной программы получает права суперпользователя, а значит, может производить изменения в системных файлах.

Если бит SGID установлен для файла, не доступного для выполнения, он означает обязательное блокирование, т.е. неизменность прав доступа на чтение и запись пока файл открыт определенной программой.

Установленный клейкий бит для обычных файлов ранее (во времена PDP-11) означал необходимость сохранить образ программы (т.е. код и данные) в памяти после выполнения (для ускорения повторной загрузки). Сейчас при установке обычным пользователем он сбрасывается. Значение этого бита при установке пользователем root зависит от версии ОС и иногда необходимо. Так, в ОС Solaris необходимо устанавливать клейкий бит для обычных файлов, используемых в качестве области подкачки.

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

  • пользователем-владельцем файла;

  • пользователем-владельцем каталога;

  • если файл доступен пользователю на запись;

  • пользователем root.

Примером может служить каталог /tmp, который открыт на запись для всех пользователей, но в котором нежелательно удалять чужие файлы.

Как изменяются права доступа при копировании и перемещении файла?

Ответ на этот вопрос зависит от многих условий

  • кто копирует (перемещает) файлы, root или обычный юзер

  • какие программы, и с какими ключами при этом используются

  • копируется файл "на пустое место" или там уже существует файл с таким именем

Ситуация 1 – при копировании создается новый файл

При копировании (например, командой cp) создается новый файл. А при перемещении (например, командой mv) меняется только место расположения файла (и, возможно, имя).

Поэтому, если "рядовой юзер" копирует файл, то действуют все те же правила, что и при создании файла. То есть, владельцем копии становится юзер, который ее создал, группа "наследуется" от директории, а сами права доступа определяются параметром umask.

Если копирование делает root, то эти правила действуют и для него (то есть, владельцем полученной копии будет root, группа будет взята от директории, а права выставятся в соответствии с umask). Однако, root может изменить поведение команды cp. У этой команды есть ключ (-p - сохранять permissions) который означает, что надо сохранить все атрибуты (владельца, группу и permissions) при копировании.

Обычный же юзер, даже используя ключ -p не сможет сохранить владельца и группу, но получит permissions такие же, как у оригинального файла. К тому же биты suid и sgid при этом также "сбрасываются".

Ситуация 1 – при копировании файл с таким именем уже существует

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

А вот при перемещении файла все атрибуты сохраняются (даже "опасные" биты suid и sgid). Однако, не забудьте, что для того, чтобы обычный юзер смог переместить чужой файл, он должен иметь право записи и в ту директорию, куда файл переносится и в ту, откуда он переносится (поскольку, там запись о файле должна быть удалена). Такие ситуации в нормальной системе, как правило, не встречаются.