Product SiteDocumentation Site

9.3. Управление правами

Linux — многопользовательская система, поэтому она должна предоставлять систему разрешений, чтобы контролировать авторизованные операции с файлами и каталогами, к которым относятся все системные ресурсы и устройства (в Unix-системах любое устройство представляется в виде файла или каталога). Этот принцип является общим для всех Unix-систем, но напомнить об этом ещё раз будет не лишним, тем более что существуют некоторые интересные и сравнительно малоизвестные способы применения.
У каждого файла и каталога имеются специальные разрешения для трёх категорий пользователей:
Три типа прав могут использоваться совместно:
По отношению к файлу, такие права хорошо понятны: доступ для чтения позволяет читать содержимое (включая копирование), доступ для записи позволяет менять содержимое, доступ для исполнения позволяет запускать (работает для программ).
Каталоги обрабатываются иначе. Доступ на чтение даёт право получить список его содержимого (файлов и каталогов), доступ на запись позволяет создавать и удалять файлы, а доступ на исполнение позволяет проходить через него (в частности переходить в него с помощью команды cd). Возможность проходить через каталог, не имея возможности прочесть его, позволяет получить доступ к файлам внутри него, если они известны по имени, но не находить их, если о их существовании или их точных именах не известно.
Три команды для управления разрешениями, связанными с файлом:
Есть два способа представления прав. Из них символьное, пожалуй, более легко для понимания и запоминания. В нём используются указанные выше символы. Можно определить права для каждой категории пользователей (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 наравне с вышеописанными правами.
Заметьте, что для восьмеричного представления возможна только установка всех прав сразу, нельзя добавить новое правило, как например, доступ для чтения для владельца группы — пользователь должен, учитывая существующие права, вычислить новое соответствующее значение.