Скачиваний:
56
Добавлен:
08.01.2014
Размер:
2.6 Mб
Скачать

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

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

  1. владелец файла;

  2. все пользователи, кроме владельца файла, принадлежащие к связанной с файлом группе;

  3. все пользователи, не входящие в категории 1 или 2.

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

  • чтение из файла;

  • запись в файл;

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

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

Система хранит связанные с файлом права доступа в битовой маске, называемой кодом доступа к файлу (file mode). Хотя модуль linux и определяет символьные имена для битов прав доступа, большинство программистов все еще предпочитает использовать восьмеричные постоянные, приведенные в табл. 3.1 – при этом символьные имена являются относительно недавним и весьма неудобным нововведением. Следует обратить внимание, что в языке С восьмеричные постоянные всегда начинаются с нуля, иначе компилятор будет расценивать их как десятичные. В Паскале же для записи восьмеричных чисел удобно использовать функцию octal, параметром которой является восьмеричное число, записанное десятичными числами, а результатом – значение в десятеричной системе:

Описание

uses linux;

Function Octal(l:longint):longint;

Таблица 3.1. Восьмеричные значения для прав доступа к файлам

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

Символьное обозначение

Значение

0400

STAT_IRUSR

Владелец имеет доступ для чтения

0200

STAT_IWUSR

Владелец имеет доступ для записи

0100

STAT_IXUSR

Владелец может выполнять файл

0040

STAT_IRGRP

Группа имеет доступ для чтения

0020

STAT_IWGRP

Группа имеет доступ для записи

0010

STAT_IXGRP

Группа может выполнять файл

0004

STAT_IROTH

Другие пользователи имеют доступ для чтения

0002

STAT_IWOTH

Другие пользователи имеют доступ для записи

0001

STAT_IXOTH

Другие пользователи могут выполнять файл

Из таблицы легко увидеть, что можно сделать файл доступным для чтения всем типам пользователей, сложив 0400 (доступ на чтение для владельца), 040 (доступ на чтение для членов группы файла) и 04 (доступ на чтение для всех остальных пользователей). В итоге это дает код доступа к файлу 0444. Такой код может быть получен и при помощи побитовой операции ИЛИ (or) для соответствующих символьных представлений; например, 0444 эквивалентен выражению:

STAT_IRUSR or STAT_IRGRP or STAT_IROTH

Поскольку все остальные значения из таблицы не включены, код доступа 0444 также означает, что никто из пользователей, включая владельца файла, не может получить доступ к файлу на запись или выполнение.

Чтобы устранить это неудобство, можно использовать более одного восьмеричного значения, относящегося к одной категории пользователей. Например, сложив 0400, 0200 и 0100, получим в сумме значение 0700, которое показывает, что владелец файла может читать его, производить в него запись и запускать файл на выполнение.

Поэтому чаще встречается значение кода доступа:

0700 + 050 + 05 = 0755

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

Легко понять, почему программисты UNIX предпочитают использовать восьмеричные постоянные, а не имена констант из модуля linux, когда просто значение 0755 представляется выражением:

STAT_IRUSR or STAT_IWUSR or STAT_IXUSR or STAT_IRGRP or STAT_IXGRP or STAT_IROTH or STAT_IXOTH

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

Упражнение 3.1. Что означают следующие значения прав доступа: 0761, 0777, 0555, 0007 и 0707?

Упражнение 3.2. Замените восьмеричные значения из упражнения 3.1 эквивалентными символьными выражениями.

Упражнение 3.3. Напишите процедуру lsoct, которая переводит набор прав доступа из формы, получаемой на выходе команды ls (например, rwxr-xr-x) в эквивалентные восьмеричные значения. Затем напишите обратную процедуру octls.

Соседние файлы в папке Полищук, Семериков. Системное программирование в UNIX средствами Free Pascal