Linux — многопользовательская система, поэтому она должна предоставлять систему разрешений, чтобы контролировать авторизованные операции с файлами и каталогами, к которым относятся все системные ресурсы и устройства (в Unix-системах любое устройство представляется в виде файла или каталога). Этот принцип является общим для всех Unix-систем, но напомнить об этом ещё раз будет не лишним, тем более что существуют некоторые интересные и сравнительно малоизвестные способы применения.
У каждого файла и каталога имеются специальные разрешения для трёх категорий пользователей:
его владельца (обозначается u
, от «user»);
его группы-владельца (обозначается g
, от «group»), представленная всеми членами группы;
остальных (обозначается o
, от «other»).
Три типа прав могут использоваться совместно:
чтение (обозначается r
, от «read»);
запись (или изменение, обозначается w
, от «write»);
исполнение (обозначается x
, от «eXecute»).
По отношению к файлу, такие права хорошо понятны: доступ для чтения позволяет читать содержимое (включая копирование), доступ для записи позволяет менять содержимое, доступ для исполнения позволяет запускать (работает для программ).
Каталоги обрабатываются иначе. Доступ на чтение даёт право получить список его содержимого (файлов и каталогов), доступ на запись позволяет создавать и удалять файлы, а доступ на исполнение позволяет проходить через него (в частности переходить в него с помощью команды cd
). Возможность проходить через каталог, не имея возможности прочесть его, позволяет получить доступ к файлам внутри него, если они известны по имени, но не находить их, если о их существовании или их точных именах не известно.
Три команды для управления разрешениями, связанными с файлом:
chown пользователь файл
изменяет владельца файла;
chgrp группа файл
меняет группу-владельца;
chmod права файл
изменяет разрешения на файл.
Есть два способа представления прав. Из них символьное, пожалуй, более легко для понимания и запоминания. В нём используются указанные выше символы. Можно определить права для каждой категории пользователей (u
/g
/o
), присвоив их явно (с помощью =
), добавив (+
) или отняв (-
). Так, выражение u=rwx,g+rw,o-r
даёт владельцу права на чтение, запись и исполнение, добавляет права на чтение и запись для группы-владельца и отнимает право на чтение у остальных пользователей. Права, не затрагиваемые добавлением или отъёмом, остаются без изменений. Буква a
(от «all») обозначает все три категории пользователей, так что a=rx
даёт всем трём категориям одинаковые права (читать и исполнять, но не записывать).
В цифровом (восьмеричном) представлении каждому праву соответствует конкретное значение: 4 — чтению, 2 — записи, 1 — исполнению. Каждая комбинация прав соответствует сумме этих чисел. Каждое значение затем присваивается своей категории пользователей, будучи записанным подряд с остальными в обычном порядке (владелец, группа, остальные).
Например, команда chmod 754 файл
установит следующие права: на чтение, запись и исполнение для владельца (поскольку 7 = 4 + 2 + 1); на чтение и исполнение для группы (поскольку 5 = 4 + 1); только на чтение для остальных. 0
означает отсутствие прав, так что chmod 600 файл
разрешает чтение и запись владельцу и не даёт никаких прав всем остальным. Наиболее распространённые комбинации прав — 755
для исполняемых файлов и каталогов и 644
для файлов с данными.
Для представления в таком виде специальных прав можно указать в начале четвёртую цифру в соответствии с тем же принципом, где битам setuid
, setgid
sticky
соответствуют 4, 2 и 1. chmod 4754
установит бит setuid
наравне с вышеописанными правами.
Заметьте, что для восьмеричного представления возможна только установка всех прав сразу, нельзя добавить новое правило, как например, доступ для чтения для владельца группы — пользователь должен, учитывая существующие права, вычислить новое соответствующее значение.