Поскольку Linux — система многопользовательская, вопрос об организации разграничения доступа к файлам и каталогам является одним из существенных вопросов, решаемых операционной системой.
Механизмы разграничения доступа, разработанные для системы UNIX в 70-х годах оказались настолько эффективными, что и по сей день успешно выполняют стоящие перед ними задачи.
Содержание
- Понятие права доступа к файлу
- Расшифровка прав доступа
- Зависимость прав доступа
- Изменение прав доступа
Понятие права доступа к файлу
В основе механизмов разграничения прав доступа лежат имена пользователей и имена групп пользователей. В Linux каждый пользователь имеет уникальное имя, под которым он входит в систему (логируется). Кроме того, в системе создается некоторое число групп пользователей, причем каждый пользователь может быть включен в одну или несколько групп.
Создает и удаляет группы системный администратор (суперпользователь), он же может изменять состав участников той или иной группы. Члены разных групп могут иметь разные права по доступу к файлам Linux.
Права доступа подразделяются на три типа:
- чтение —
r
(сокращение от read); - запись —
w
(сокращение от write); - выполнение —
x
(сокращение от execute).
Эти типы прав доступа могут быть предоставлены трем классам пользователей: владельцу файла, группе, в которую входит владелец, и всем (прочим) пользователям. Владельца и группу файла в дальнейшем можно поменять с помощью команд chown
и chgrp
.
Разрешение на чтение позволяет пользователю читать содержимое файлов, а в случае каталогов — просматривать перечень имен файлов в каталоге (используя, например, команду ls
).
Разрешение на запись позволяет пользователю писать в файл и изменять его. Для каталогов это дает право создавать в каталоге новые файлы и каталоги, или удалять файлы в этом каталоге.
Разрешение на выполнение позволяет пользователю выполнять файлы (как бинарные программы, так и командные файлы). Разрешение на выполнение применительно к каталогам означает возможность выполнять команды, например, cd
.
Расшифровка прав доступа
Рассмотрим пример, иллюстрирующий права доступа к файлам Linux. Для того, чтобы команда ls -l
не выводила на экран длинный листинг, зададим ей в качестве дополнительного параметра имя конкретного файла:
$ ls -l /etc/wvdial.conf
-rw-rw-r-- 1 root dialout 377 May 15 16:20 /etc/wvdial.conf
Третье поле в примере указывает на владельца файла (root
), четвёртое поле указывает на группу, которая владеет этим файлом (dialout
), последнее поле — имя файла (file
).
Первое поле в представленном примере определяет тип файла и права доступа к нему. Это поле представлено цепочкой символов -rw-rw-r--
, которые условно можно разделить на 4 группы.
Первая группа, состоящая из единственного символа, определяет тип файла. Этот символ может принимать следующие значения:
- - — обычный файл;
- d — каталог;
- b — файл блочного устройства;
- c — файл символьного устройства;
- s — доменное гнездо (socket);
- p — именованный канал (pipe);
- l — символическая ссылка (link).
Далее следуют 3 группы по 3 символа, определяющие права доступа к файлу соответственно для владельца файла, для группы пользователей, и для всех остальных пользователей системы. Замена любого из этих символов прочерком будет означать, что пользователь лишается соответствующего права. В нашем примере права доступа для владельца определены как rw-
, что означает, что владелец (root
) имеет право читать файл (r
), производить запись в этот файл (w
), но он не имеет права на выполнение, так как символ (x
) заменен прочерком (-
). Из этого же примера следует, что аналогичные права имеют члены группы dialout
, остальные пользователи имеют право лишь на чтение файла (r--
).
Исполняемый файл в Linux может и не иметь никакого расширения, так как все определяется установкой атрибута „исполняемый“, причем право на исполнение может быть предоставлено не всем.
Зависимость прав доступа
Предоставление прав доступа к файлу также зависит от прав доступа к каталогу, в котором находится файл. Например, если пользователь oleg
хочет ограничить доступ ко всем своим файлам, он может установить права доступа к своему домашнему каталогу /home/oleg
как drwx------
, а не устанавливать отдельные права доступа к каждому его файлу и подкаталогу.
Изменение прав доступа
Команда chmod
используется для установки прав доступа к файлу (только собственник файла может изменять права доступа к этому файлу). Команду chmod
можно использовать в 2-x вариантах.
Явное указание на предоставление или лишение прав
Синтаксис команды: chmod
{a,u,g,o}{+,-}{r,w,x} filenames.
Сначала после имени команды ставится один или несколько из следующих символов: a
(сокращение от all), u
(сокращение от use), g
(сокращение от group), или o
(сокращение от other). Затем точно определяется, добавляются (+
) или убираются (-
) права. Наконец, пишется один или несколько символов из следующего набора: r
, w
, x
.
Примеры правильных команд:
# chmod a+r filename
Даёт всем пользователям право на чтение файла.
# chmod +x filename
Аналогично предыдущему примеру. Если никакие из набора символов a
, u
, g
или o
не указаны, то это эквивалентно указанию символа a
.
# chmod og-x filename
Лишает всех пользователей, кроме собственника, права на исполнение файла.
# chmod u+rwx filename
Разрешает собственнику читать, изменять и исполнять файл.
# chmod o-rwx filename
Запрещает читать, записывать и исполнять файл всем пользователям, кроме собственника файла и пользователей из группы.
Цифровое представление прав
Кодируем символ r
цифрой 4
, символ w
— 2
, символ x
— 1
. Для предоставления пользователям какой-либо набора прав, надо сложить соответствующие цифры. Получив, таким образом, нужные цифровые значения для владельца файла, для группы файла и для всех остальных пользователей, задаем эти три цифры в качестве аргумента команды chmod
(ставим эти цифры после имени команды перед вторым аргументом, который задает имя файла). Например, если надо дать все права владельцу (4+2+1=7), право на чтение и запись — группе (4+2=6), и не давать никаких прав остальным, то следует дать такую команду:
# chmod 760 filename