Linux — многопользовательская система, поэтому она должна предоставлять систему разрешений, чтобы контролировать авторизованные операции с файлами и каталогами, к которым относятся все системные ресурсы и устройства (в Unix-системах любое устройство представляется в виде файла или каталога). Этот принцип является общим для всех Unix-систем, но напомнить об этом ещё раз будет не лишним, тем более что существуют некоторые интересные и сравнительно малоизвестные способы применения.
У каждого файла и каталога имеются специальные разрешения для трёх категорий пользователей:
его владельца (обозначается u
, от «user»);
его группы-владельца (обозначается g
, от «group»), представленная всеми членами группы;
остальных (обозначается o
, от «other»).
Три типа прав могут использоваться совместно:
чтение (обозначается r
, от «read»);
запись (или изменение, обозначается w
, от «write»);
исполнение (обозначается x
, от «eXecute»).
In the case of a file, these rights are easily understood: read access allows reading the content (including copying), write access allows changing it, and execute access allows you to run it (which will only work if it is a program).
Каталоги обрабатываются иначе. Доступ на чтение даёт право получить список его содержимого (файлов и каталогов), доступ на запись позволяет создавать и удалять файлы, а доступ на исполнение позволяет проходить через него (в частности переходить в него с помощью команды 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
наравне с вышеописанными правами.
Note that the use of octal notation only allows to set all the rights at once on a file; you cannot use it to simply add a new right, such as read access for the group owner, since you must take into account the existing rights and compute the new corresponding numerical value.