Понятие права доступа к файлу
Поскольку обычно в системе Linux работает не один, а несколько пользователей, в системе предусмотрен механизм, известный как права доступа к файлам (file permissions), который защищает пользовательские файлы от посягательства других пользователей. Этот механизм позволяет отдельным пользователям иметь «личные» файлы и каталоги. Например, если пользователь larry создал файлы в своём домашнем каталоге, то он владеет этими файлами и имеет доступ к ним.
Система Linux также допускает, чтобы файлы использовались несколькими пользователями или группами пользователей. Если бы Ларри захотел, он мог бы закрыть доступ к своим файлам так, чтобы другие пользователи не имели доступа к ним. Однако в большинстве случаев другим пользователям разрешается по умолчанию читать ваши файлы, но не изменять и не удалять их.
Каждый файл принадлежит некоторому пользователю. Однако файлы являются также собственностью некоторой группы (group) пользователей системы. Когда создаётся имя пользователя, оно помещается по крайней мере в одну группу, хотя системный администратор может включить пользователя сразу в несколько групп.
Группы обычно определяются типом пользователей, работающих в системе. Например, в университете пользователи могут находиться в группах student, staff, faculty или guest. Существуют также несколько групп, определённых системой (таких как bin и admin), которые используются самой системой для контроля доступа к ресурсам. Очень редко настоящие пользователи относятся к этим системным группам.
Права доступа сформулированы относительно трёх действий: чтение, запись и исполнение. Эти права доступа могут быть предоставлены трём классам пользователей: владельцу файла (пользователю), группе-владельцу файла, и всем пользователям, которые не входят в эту группу.
Право на чтение даёт пользователю возможность читать содержимое файла или, если такой доступ разрешён к каталогам, просматривать содержимое каталога (используя команду ls). Право на запись даёт пользователю возможность записывать или изменять файл, а право на запись к каталогам═ — возможность создавать новые файлы или удалять файлы из этого каталога. Наконец, право на исполнение позволяет пользователю запускать файл как программу или скрипт командной оболочки (если файл является программой или скриптом программной оболочки). Владение правами на исполнение для каталога позволяет перейти (командой cd) в этот каталог.
Расшифровка прав доступа
Давайте рассмотрим пример, который иллюстрирует права доступа к файлам. Использование команды ls с опцией -l выведет на экран «длинную» распечатку, в которой будут, среди прочего, отражены права доступа к файлу.
/home/larry/foo# ls -l file -rw-r--r-- 1 larry users 505 Mar 13 19:05 file /home/larry/foo#
Первое поле в этой распечатке представляет собой права доступа к файлу. Третье поле указывает на владельца файла (larry), четвёртое поле указывает на группу, которая владеет этим файлом (users). Очевидно, что последнее поле — это имя файла (file). Про другие поля мы будем говорить позднее.
Этот файл является собственностью пользователя larry и группы users. Последовательность -rw-r-r- показывает права доступа собственника-пользователя, собственника-группы, и всех остальных.
Первый символ из этого ряда (-) обозначает тип файла. Символ - означает, что этот файл является обычным (т. е. это не каталог и не драйвер устройства). Следующие три символа (rw-) представляют собой права доступа, предоставленные собственнику larry. Символ r — сокращение от read, а w — сокращение от write. Таким образом, larry имеет право на чтение и запись файла file.
Как говорилось выше, кроме чтения и записи, существует также право на исполнение, которое обозначается символом x (execute). Однако, символ -, стоящий здесь вместо x, указывает, что larry не имеет права на исполнение этого файла. Это разумно, так как файл file не является программой. Конечно, поскольку Ларри (и larry) является собственником файла, он может предоставить себе право на исполнение, если захочет. Эта процедура будет кратко описана ниже.
Следующие три символа (r-) представляют собой права доступа группы к файлу. Группой-собственником файла является группа users. Поскольку здесь стоит только символ r, все пользователи из группы users могут читать этот файл.
Последние три символа (это опять r-) представляют собой права доступа к этому файлу всех других пользователей, кроме собственника файла и пользователей из группы users. Так как здесь указан только символ r, эти пользователи тоже могут читать файл, но не могут изменять или исполнять его.
Вот ещё несколько других примеров:
- -rwxr-xr-x
Собственник файла может читать, изменять и исполнять файл. Пользователи группы и все другие пользователи могут читать и исполнять этот файл.
- -rw-------
-
Собственник файла может читать и изменять файл. Никакие другие пользователи не имеют доступа к файлу.
- -rwxrwxrwx
-
Все пользователи имеют право на чтение, запись и исполнение файла.
Зависимость прав доступа
Предоставление прав доступа к файлу также зависит от прав доступа к каталогу, в котором находится файл. Например, даже если права доступа к файлу установлены как -rwxrwxrwx, другие пользователи не могут иметь доступа к файлу, пока они не имеют прав на чтение и исполнение к каталогу, в котором находится файл. Например, если бы Ларри хотел ограничить доступ ко всем своим файлам, он мог бы установить права доступа к своему домашнему каталогу /home/larry как -rwx------. Таким образом, никакой другой пользователь не будет иметь доступа к его каталогам и ко всем файлам и каталогам внутри него. Пользователю Ларри не нужно будет теперь беспокоиться об отдельных правах доступа к каждому его файлу.
Другими словами, чтобы, в принципе, иметь доступ к файлу, вы должны иметь право на исполнение ко всем каталогам вдоль пути к файлу и право на чтение (или исполнение) к самому файлу.
Как правило, пользователи системы Linux не скрывают свои файлы. Обычно права доступа к файлам устанавливаются как -rw-r-r--, что позволяет другим пользователям читать файлы, но не изменять их. Для каталогов права доступа часто предоставляются в виде -rwxr-xr-x, что позволяет другим пользователям просматривать ваши каталоги, но не создавать и не удалять файлы в них.
Однако многие пользователи желают держать других пользователей подальше от своих файлов. Если права доступа к файлу установлены как -rw-------, то доступ к файлу всех других пользователей будет предотвращён. Аналогично, установка прав доступа к каталогу как -rwx------ защищает этот каталог от вторжения других пользователей.
Изменение прав доступа
Команда chmod используется для установки прав доступа к файлу. Только собственник файла может изменять права доступа к этому файлу. Синтаксис команды chmod:
chmod {a,u,g,o}{+,-}{r,w,x} filenames
Сначала после имени команды вы ставите один или несколько из следующих символов: a (сокращение от all — все), u (сокращение от user — пользователь), g (сокращение от group — группа), или o (сокращение от other — прочие). Затем вы точно определяете, добавляете ли вы права (+) или убираете (-). Наконец, вы пишете один или несколько символов из следующего набора: r (сокращение от read — чтение), w (сокращение от write — запись), x (сокращение от execute — исполнение). Вот некоторые примеры правильных команд:
- chmod a+rfile
-
Даёт всем пользователям право на чтение файла.
- chmod +xfile
-
Аналогично предыдущему примеру. Если никакие из набора символов a, u, g или o не указаны, то это эквивалентно указанию символа a.
- chmod og-xfile
-
Лишает всех пользователей, кроме собственника, права на исполнение файла.
- chmod u+rwxfile
-
Разрешает собственнику читать, изменять и исполнять файл.
- chmod o-rwxfile
-
Запрещает читать, записывать и исполнять файл всем пользователям, кроме собственника файла и пользователей из группы.