Категории пользователей по отношению к файлу

GNU/Linux как любая Unix-подобная операционная система является многопользовательской. Это значит, что в системе могут работать одновременно или по-очереди несколько или множество пользователей. У каждого из них должно быть собственное файловое пространство, доступ к которому других пользователей ограничен.

Отсюда вытекает, что у любого файла в Linux должны быть специальные атрибуты - права на доступ. Эти атрибуты должны сообщать, кто имеет право работать с файлом.

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

  • Сам владелец (u - user) объекта - конкретный пользователь, чье имя числится в атрибутах файла как имя владельца этого файла. Обычно если пользователь создает файл, то он автоматически записывается как его владелец.
  • Группа (g - group), к которой принадлежит владелец файла. Когда в Linux создается пользователь, то для него создается одноименная группа. Однако средствами администрирования системы можно объединять пользователей в различные группы. При этом конкретный пользователь может входить в состав нескольких групп. Группы позволяют предоставлять права доступа к ресурсам сразу нескольким людям, но при этом ограниченному кругу лиц.
  • Все остальные (o - other) - это все те, кто не является владельцем файла и не принадлежит к группе владельца файла. То есть любой посторонний пользователь.

Чтение, запись, выполнение

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

Право на чтение (r - read) означает, что файл можно просматривать. Например, открыть файл и, если он текстовый, прочитать содержащийся в нем текст. Если это файл изображения, то можно посмотреть изображение. Наличие права только на чтение не позволяет изменять файл. То есть нельзя будет исправить текст или подрисовать что-то к картинке.

Право на запись (w - write) позволяет изменять файл, то есть дописывать в него информацию или заменять ее другой.

Право на исполнение (x - execution) имеет смысл не для всех файлов, хотя может быть установлено для любого. Это право позволяет исполнять файл как программу, при этом в файле должны быть записаны инструкции для процессора, то есть файл должен быть исполняемой программой.

Буквенная запись прав доступа

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

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

rwxrwxrwx

Мы уже видели нечто подобное в выводе команды ls -l. В первом столбце, после символа типа файла указываются права доступа к файлу в буквенной нотации. Если какое-либо право не предоставляется той или иной категории, то вместо буквы ставится знак минус.

Запись прав доступа с помощью чисел

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

110100100

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

Однако запись из девяти символов достаточно длинная. Чтобы ее сократить, используют преобразование двоичных чисел в восьмеричные. Триады нулей и единиц двоичной системы как раз составляют значения от 0 до 7 в восьмеричной системе счисления. Поэтому права доступа трех категорий (владельца, группы, остальных) можно выразить как три независимых друг от друга числа от 0 до 7-ми.

Не все числа имеют смысл. Трудно представить файл, который можно изменять, но нельзя прочитать. Часто используемые числа, которые полезно запомнить: 4 - только чтение, 5 - чтение и выполнение, 6 - чтение и запись, 7 - все права.

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

Каталог в Linux - это особый тип файла, смысловым содержанием которого является список других файлов.

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

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

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

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

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

Отметим пару вытекающих из вышесказанного особенностей:

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