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

Материал из Слакваря

Перейти к: навигация, поиск

В UNIX-системах права доступа к файлам подразделяются на три типа: чтение (r), запись (w) и выполнение (x).

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

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

Дальнейшее объяснение удобно вести на примере. Используя команду

bash$ ls -al

получим вывод, подобный этому:

-rw-r--r--   1 bob   users        512 Nov 11  2008 file.conf
drwxr-xr-x   3 bob   users       1024 Jun  7  2009 programs/

В первой секции, которая состоит из одного поля, находится либо - (прочерк), либо d. Наличие буквы d говорит о том, что данный объект является директорией. Прочерк обозначает, что объект - обычный файл.

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

Третья секция аналогична второй, но определяет права для группы (g), которая установлена для этого объекта.

Четвертая секция также аналогична второй, но определяет права для всех остальных (o) пользователей системы.

Права доступа имеют также и числовое представление. Права представляют из себя число вида abc, состоящее из цифр a, b и c, определяющих права для владельца (a), группы (b) и остальных (c), соответственно. Как составляются a, b или c, видно из следующего соответствия:

--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

Дополнительные атрибуты

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

SUID - Set user ID - установить идентификатор пользователя. Смысл его состоит в том, что если он установлен на файле, который является программой, то не зависимо от того, кто запускает эту программу, она при выполнении имеет права владельца этого файла. Обычно это делается для того, чтобы пользователь мог выполнить действия, которые требуют привилегий, которыми он не обладает. Права у такого файла выглядят так:

-rwsr-xr-x   1 root  root        512 Nov 11  2008 filename

GUID - Set group ID - установить идентификатор группы. Смысл аналогичен смыслу предыдущего, только меняется не идентификатор пользователя, а идентификатор группы.

Sticky - sticky-bit. Для директорий его смысл заключается в том, что удалить файл из такой директории (или переименовать) может только владелец файла.

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

Применяют этот бит, обычно, для директорий, которые являются "публичными" (например, /tmp). Права у такого файла выглядят так:

drwxrwxrwt  31 root  root        1328 Aug 17 12:01 tmp/

Изменение прав доступа

Права доступа можно изменить с помощью команды chmod.

Примеры:

chmod -R a+r ./ - всем можно читать (-R - рекурсия по разделам)
chmod a+wx ./* - всем можно писать+исполнять
chmod o+w ./* - "всем другим" можно писать
Личные инструменты