Права доступа

Права доступа в Linux реализованы очень просто. У каждого файла в системе существуют свои собственные права доступа.

Внимание! Права доступа не наследуются так, как это принято в Windows и Novell NetWare.

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

Если посмотреть на вывод программы ls –l, в первом столбце показаны права доступа файла.

$ ls -l
итого 4
-rw-r--r--  1 artur users 28 2005-06-03 12:50 hardlink
lrwxrwxrwx  1 artur users  4 2005-06-03 12:51 slink -> test
-rw-r--r--  1 artur users  0 2005-06-03 13:21 test
$

В первом поле десять символов. Первый символ — это тип файла, остальные девять показывают права. Права доступа делятся на три группы:

r w x | r w x | r w x
user  | group | other
  • user — права хозяина файла.
  • group — права группы которой принадлежит файл.
  • other — права всех остальных пользователей системы.

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

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

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

Права доступа к файлам и директориям имеют различное значение. Для файлов:

  • r — право на чтение данных из файла.
  • w — право на изменение содержимого файла (запись).
  • x — право на исполнение файла.

Все права достаточно просты в понимании, единственно на что следует обратить внимание — w не дает права на удаление файла, только на изменение содержимого.

Теперь о праве на исполнение. Это право можно установить для любого файла. Получается, что потенциально любой файл в системе можно исполнить? Это действительно так. В Linux является ли файл исполняемым или нет, определяется не по его расширению (понятие расширение файла отсутствует в файловой системе Linux), а по правам доступа. Если у файла установлено право x, его можно запустить на выполнение.

Что происходит, когда мы пытаемся выполнить файл? Мы набираем имя файла в командной строке и нажимаем Enter. В первую очередь проверяется, а имеет ли пользователь права на исполнение этого файла? Если имеет, тогда система смотрит, а это исполняемый бинарный файл? В Linux все исполняемые бинарные файлы в начале файла имеют заголовок ELF. Если это исполняемый бинарный файл, тогда, согласно его заголовку, происходит распределение оперативной памяти, и управление передается программе.

Если файл не бинарный, тогда считается, что это текстовый файл. В начале первой строки файла ищется последовательность символов #!. После этой последовательности, в той же строке, указывается программа, которую необходимо запустить и передать ей в командной строке текущий файл. Например, для файлов, написанных на языке shell script, первая строка будет выглядеть так:

#! /bin/sh

Для программ, написанных на perl, так:

#! /bin/perl

Во всех интерпретируемых языках программирования # — это символ комментария. То есть первая строка считается комментарием и программой не выполняется. При указании интерпретатора можно писать аргументы командной строки. Например:

#! /bin/sed -f command

Если в файле в первой строке нет этих символов, тогда все зависит о программы оболочки, в которой запускается программа. Если используется bash, то он считает, что файл содержит программу, написанную на языке shell script, запускает копию себя любимого и передает этой копии файл на интерпретацию. Если в файле действительно находится программа, то он ее выполняет. Если в файле находится «Война и мир» графа Льва Николаевича Толстого, то на экране появляются сообщения об ошибках shell script: «Я не знаю оператор Пьер Безухов. Наташа Ростова — это оператор или функция?»

Права доступа к директориям

Права доступа к директориям интерпретируются по-другому:

  • r — право на чтение директории. Прочитать содержимое директории — получить список файлов.
  • w — право на изменение содержимого директории — создание и удаление файлов в этой директории.
  • x — право на «вхождение» в директорию.
Внимание! Обратите внимание на то, что если вы имеете право на запись в директории — значит, вы можете удалить любые файлы в этой директории, даже те, которые вам не принадлежат. Правда, существуют дополнительные права доступа, которые позволяют ограничить право на запись в директорию, но их мы рассмотрим позднее.

Теперь о праве x для директории. Это право позволяет Вам войти в директорию: cd dir.

Внимание! Право x на директорию среди других прав на доступ к файлу всегда проверятся в первую очередь!

Предположим, что другой пользователь системы (user2) написал программу /home/user2/bin/programm. Права доступа у этой программы r-xr-xr-x. Он попросил Вас ее протестировать. При попытке запуска этой программы пользователем user1 было получено сообщение: Доступ запрещен. Почему могла возникнуть такая ситуация? Дело в том, что при обращении к файлу система сначала проверяет право x у всех директорий, стоящих в пути этого файла, и только затем права на сам файл. Если хотя бы у одной директории право x отсутствует, доступ к этой директории и всему ее содержимому для Вас запрещается. Например:

/    home/ user2/ bin/ programm
r-x  r-x   r--    r-x  r-x

Как видно из примера, у директории /home/user2 отсутствует право на исполнение. Поэтому доступ к директориям /home/user2, /home/user2/bin и файлу program запрещен.

Предположим, что для вас права доступа к директории /usr/home/userrw-. Что вы сможете сделать в этой директории? Вообщем то ничего серьезного, сначала надо зайти в директорию, а вам нельзя. Хотя список файлов вы сможете получить, но при этом на экран будет выведена куча предупреждений. А вот удалять, создавать, читать и редактировать файлы в директории вы точно не сможете.

Права доступа к символьным ссылкам

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