Права доступа к файлам и директориям в Linux, часть 1

TuxСовременные компьютеры зачастую используются несколькими пользователями. Это ставит вопрос о разграничении доступа к файлам и каталогам. В рамках локальных сетей ситуация усугубляется еще больше, так как пользователям уже не нужен физический доступ к устройству. Linux, как и другие популярные операционные системы, является многопользовательской ОС. Разберем философию разграничения прав доступа в Linux.

Система разграничения прав доступа основывается на пользователях и группах пользователей. Пользователь принадлежит к какой-то основной для себя группе и может принадлежать к дополнительным. Система не допускает вхождения групп в группы (в этом отличие от Windows). Разные права и группы могут иметь разный доступ к файлу. Система доступа к файлам и директориям в Linux имеет несколько составляющих, и в этой статье мы уделим внимание лишь основной из них.

Посмотреть информацию о доступу к файлу или папке можно как через графический интерфейс операционной системы, так и через терминал.

Права доступа к файлам и директориям в Linux

Посмотреть права на файлы и каталоги в терминале поможет команда ls с параметром -l. Для примера введем

ls -l /home

Это выведет список файлов и папок, входящих в каталог /home, с правами доступа к ним и некоторой другой информацией.

Права доступа к файлам и директориям в Linux

Редактировать права доступа можно и через графический интерфейс, и через терминал.

Для начала расшифруем то, как отображаются права доступа на каталоги и файлы в терминале. Попутно разберем, что именно даёт каждое из прав. На скриншоте выше видно следующую строку:

drwxr-xr-x 18 test test 4096 июл  9 20:56 test

В начале строки видим последовательность из 10 символов. Разберем эту последовательность посимвольно.

Первый символ обозначает тип файла и может принимать следующие значения:

Файл
d Директория
b Файл блочного устройства
c Файл символьного устройства
s Доменное гнездо (socket)
p Именованный канал (pipe)
l Символическая ссылка (link)

Как видим, в нашем примере мы имеем дело с директорией.

Следующие 9 символов описывают непосредственно права доступа и представляют из себя 3 группы по 3 символа. Первая группа символов описывает права для владельца файла или каталога (первоначально им назначается пользователь, создавший его). Вторая группа символов содержит описание прав доступа для группы, которая сопоставлена файлу (каталогу). Изначально это основная группа для создателя файла. Третья группа символов описывает права для всех остальных пользователей системы.

Надо отметить, что определение прав пользователя осуществляется последовательно. Первым делом проверяется, не является ли пользователь суперадминистратором (root). По умолчанию root имеет все права. Если пользователь не является суперадминистратором, то проверяется, не является ли он владельцем. Следом проверяется, входит ли он в нужную группу. Если на любом из шагов ответ утвердительный, проверка прерывается. Таким образом, если у владельца нет, например, прав на запись, а у группы эти права есть (и владелец в эту группу входит), это всё равно не позволит ему редактировать содержимое файла или каталога.

Теперь перейдем к тому, что означают символы в этих трёх тройках.

Файл Директория
Отсутствие прав Отсутствие прав
r Чтение содержимого файла Чтение содержимого директории
w Редактирование содержимого файла Редактирование содержимого директории
x Выполнение файла Доступ к файлам внутри директории

В примере с директорией test мы видим, что владелец каталога может читать (r) и записывать (w) информацию, а также имеет доступ к файлам внутри каталога (x). Сопоставимая с каталогом группа имеет права на чтение и права на доступ к файлам внутри каталога, но не может редактировать содержимое. Такими правами обладают и остальные пользователи системы.

Право на чтение означает возможность просмотреть содержимое файла или список файлов в папке. Право на запись даёт возможность редактировать содержимое файла или каталога (добавлять и удалять файлы). Чуть более сложным для понимание может показаться право на выполнение файла или право на доступ, в случае с каталогом. Если мы говорим о файлах, то это право даёт запустить исполняемый файл. Если же файл не является исполняемым, то он, естественно, не запустится и при наличии такого права. У каталогов это право даёт возможность открыть данный каталог. При этом есть нюанс, который состоит в том, что для доступа к какому-то файлу (даже хотя бы на чтение) требуется и право на доступ ко всем каталогам, которые составляют путь к этому файлу.

Владелец файла (каталога) и сопоставимая группа также указаны в выводе команды ls -l. Слева направо сначала прописан владелец, затем группа. В нашем примере названия владельца и группы совпадают. Кроме того, рядом указываются дата и время последнего редактирования файла (папки).

Менять права доступа к файлам и папкам может либо владелец, либо root. Если владелец хочет сменить ассоциированную группу, он должен быть её членом. Для редактирования прав доступа используется команда chmod. Редактировать через неё права можно двумя способами. В первом способе редактирование прав производится через их буквенное отображение.

Права доступа к файлам и директориям в Linux

В примере на скриншоте мы видим команду

chmod u-w,g+w,o= /home/test

Расшифровать её можно так: убрать владельцу права на запись (u-w), добавить группе права на запись (g+w), всех остальных пользователей лишить всех прав (o=). Из этого примера уже можно представить синтаксис команды chmod, который выглядит следующим образом:

u Владелец + Добавить право r Чтение
g Группа Убрать право w Запись
o Остальные пользователи = Установить указанные права вместо имеющихся x Выполнение
a Все Отсутствие прав

На скриншоте выше права были возвращены в исходное состояние командой

chmod u+w,g-w,o+rx /home/test

Вот еще несколько примеров команды chmod:

chmod a+r /home/test

добавляет всем право на чтение каталога /home/test.

Дать права на чтение и запись группе и всем остальным можно командой:

chmod go+rw /home/test

Второй способ основывается на цифровом представлении прав. Право на чтение в данном способе кодируется цифрой 4, на запись — цифрой 2, а на выполнение — цифрой 1. Совокупность прав является суммой чисел. Так, например, полный доступ будет равен 7 (4+2+1), а права на чтение и запуск 5 (4+1). Отсутствие прав в такой системе обозначается цифрой 0. Продолжим пример с каталогом /home/test.

Права доступа к файлам и директориям в Linux

На примере выше мы снова порезали права пользователям командой

chmod 640 /home/test

В данном случае 640 это не число в классическом смысле. Первая цифра обозначает права для владельца, вторая — для группы, третья — для всех остальных. Вернули права мы командой

chmod 755 /home/test

Вышеперечисленные атрибуты являются основой системы распределения прав доступа в Linux и далеко не полностью описывают эти права. Далее мы поговорим о специальных атрибутах и о том, как дополняются стандартные права доступа.

Комментарии: 2 к “Права доступа к файлам и директориям в Linux, часть 1”

  1. А если файл лежит в какой-то подпапке? Например я даю на этот файл права пользователю, но ведь я не меняю при этом права на вышестоящие папки. Получается, что если на какую-то из промежуточных папок у пользователя прав нет, то доступа в файлу он не получит, даже по прямой ссылке? А как в этом случае назначать права? Есть ли какой-то флаг (вроде рекурсии), чтобы Linux назначил права и всем вышестоящим папкам. Спасибо!

Добавить комментарий

Ваш адрес email не будет опубликован.