Восьмеричные значения для прав доступа
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.