Выбрать главу

«Владение» файлом и «права» на него

Рассмотрим следующий пример (Рис. 1-38).

Рис. 1-38

Алиса известными нам уже командами «touch» и «ls» создает файл «файл» и убеждается в том, что он на самом деле создан. Затем она выполняет команду «chmod u-w файл» и обнаруживает, что поле «тип и права доступа» в выдаче «длинного» списка файлов претерпело некоторые изменения. Попытка перенаправить в этот файл ввод порождает сообщение оболочки «В доступе отказано».

Вспомним еще раз значения полей в «длинном» формате списка файлов, получаемого по команде «ls -l» (Рис. 1-39).

Рис. 1-39

Вот как устроено поле «тип и права» (Рис. 1-40).

Рис. 1-40

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

Остальные девять символов составляют три триады, выражающие права на файл в так называемой «rwx»-нотации. Они соответствуют трем категориям пользователей, определяемым относительно каждого файла.

В первую категорию «владелец» входит один пользователь, являющийся «владельцем» данного файла. Это пользователь, чье имя указано в соответствующем (третьем) поле «длинного» формата списка файлов. Обычно владелец файла – это создавший его пользователь.

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

В примере имя группы совпадает с именем пользователя31, но это разные сущности.

В третью категорию входят все остальные пользователи, т.е. все пользователи за исключением владельца и членов группы-владельца.

Для каждой категории определяются отдельные «правомочия» доступа к файлу.

Правомочие чтения разрешает чтение содержимого файла. Значение этого символа может быть «-» (запрещено) или «r» (разрешено; от англ. «read» («читать»)).

Правомочие записи разрешает модификацию файла, его значение может быть «-» (запрещено) или «w» (разрешено; от англ. «write» («писать»)).

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

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

Изменять права доступа к файлу может лишь его владелец (или главный пользователь системы). Для этого служит команда «chmod» (от англ. «change mode» («изменить режим» доступа к файлу), уже встретившаяся нам в примере выше. Синтаксис этой команды поддерживает две нотации – символическую и числовую. Мы рассмотрим лишь символическую.

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

Категории пользователей соответствуют описанным выше и обозначаются последовательностями букв:

«u» – владелец файла; от англ. «user» («пользователь»));

«g» – группа-владелец файла; от англ. «group» («группа»));

«o» – остальные пользователи; от англ. «other» («прочие»)).

«a» – все пользователи (от англ. «all» («все»)), это сокращенная запись для «ugo».

Вид назначения прав может быть трояким:

«+» – добавить правомочия;

«-» – отнять правомочия;

«=» – установить права, в точности соответствующие назначаемым.

Назначаемые правомочия обозначаются последовательностями уже известных нам букв «rwx»-нотации «r», «w», «x», соответствующим правам на чтение, запись и исполнение.

Таким образом,

«chmod u-w файл» отнимет правомочие записи у владельца;

«chmod g+rw файл» добавит правомочия чтения и записи группе-владельцу;

«chmod go=r» установит правомочия группы-владельца и прочих пользователей в точности равными «только чтению»;

«chmod a+x» добавит правомочие исполнения всем пользователям;

«chmod u=rwx,g=rw,o=r» установит правомочия чтения, записи и исполнения для пользователя, чтения и записи для группы и чтения для всех остальных.

Маска прав по умолчанию

Когда пользователь создает файл (командой «touch» или перенаправлением вывода другой команды), права доступа к нему устанавливаются равными маске прав по умолчанию, за исключением того, что правомочие исполнения обычному файлу не присваиваются. Права по умолчанию задаются командой «umask».

Команда «umask -S» без параметров выводит в символическом виде маску прав по умолчанию. Команда «umask» с параметром в «ugo»-нотации (такой же, как у команды «chmod») добавляет, отнимает или устанавливает права в маске прав.

Рис. 1-41

В примере на Рис. 1-41 Алиса выводит маску, создает файл «файл_1», убеждается в том, что права на вновь созданный файл соответствуют маске, отнимает у прочих пользователей вновь создаваемых файлов правомочие чтения, создает файл «файл_2» и убеждается в том, что права на него соответствуют новому значению маски.

вернуться

31 Это концепция так называемых «собственных групп», поддерживаемая во многих системах «ГНУ/Линукс».

вернуться

32 В этом же поле отображаются и другие правомочия, которые мы не обсуждаем. В случае, если в этом поле присутствует другая буква, строчная буква (например, «s») означает исполняемый файл, а заглавная (например, «S») – неисполняемый.