Системное программирование в UNIX средствами Free Pascal

Восьмеричные значения для прав доступа


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.

Содержание раздела