Права доступа
Часто разработчики сталкиваются с ошибкой доступа:
Она указывает, что текущий пользователь не имеет прав на создание файлов в каталоге /etc
. Почему? Все дело в правах доступа, которые мы изучим в этом уроке.
Кроме имени пользователя и группы, с каждым файлом ассоциированы права доступа:
r — чтение (read)
w — запись (write)
x — исполнение (execute)
Причем эти права задаются для трех типов пользователей:
Владельца (User)
Пользователей, входящих в ту же группу (Group)
Остальных (Other) — тех, кто не попал в предыдущие две
Разберем на примере:
Запись слева представляет собой один из вариантов описания прав доступа (permissions). Для удобства чтения разделим эту запись на группы символов:
—
этот символ обозначает, что перед нами файлrw
- — права первого типа (для владельца файла). Владелец может читать этот файл (r
) и писать в него (w
). Прочерк в конце означает, что этот файл нельзя исполнятьr--
— права второго типа (для группы владельца). В нашем случае такие права есть у тех, кто входит в группуkirill.m
. Записьr--
говорит о наличии доступа только для чтения, а изменение и исполнение запрещены.r--
— права третьей группы (все остальные). В нашем случае права совпадают со второй группой, поэтому файл доступен только для чтения
Не важно, какой файл или директорию мы смотрим — порядок прав в этой группе всегда один и тот же — чтение-запись-исполнение
, а прочерк означает отсутствие этого права:
А кто может удалить этот файл? Для ответа на этот вопрос важно знать владельца, группу и права той директории, в которой лежит файл .bashrc
. Сам файл не может обозначить прав на свое удаление, потому что права всегда берутся из той директории, в которой файл находится.
Удалить файл можно, только если у вас есть возможность писать в эту директорию:
Домашняя директория имеет другие права:
В самом начале вместо - стоит
d
, которая обозначает директориюПрава для владельца —
rwx
, а для всех остальных —r-x
. Из этого описания видно, что только пользователь может писать внутрь своей домашней директории
Что такое x
в отношении директорий? Это право позволяет перемещаться в директорию и обращаться ко всем расположенным в ней файлам и каталогам. Обращаться можно при условии, что эти файлы доступны на чтение, запись или выполнение. Например, если положить доступный на чтение файл в директорию с правом x, то вы сможете прочитать этот файл. Если убрать с этой директории право x
, то вы лишитесь доступа к файлу.
Но что тогда такое чтение? Здесь все более интуитивно понятно. По сути, директория — это список файлов, поэтому право на чтение позволяет прочитать этот список, а именно вывести список имен файлов, содержащихся в директории.
Но представим, что вы хотите посмотреть не простой список имен файлов, а список с дополнительной информацией — как при выводе ls -l
. Тогда потребуется еще и право x
, потому что в этом случае надо обращаться к файлам за их метаданными (владелец, группа, дата изменения, права и др.). В любом случае без права r
вы не сможете посмотреть содержимое директории.
В статьях, книгах и руководствах иногда используется другой способ описания прав доступа: 755
. Это не одно число, а три числа. Каждое из которых представляет собой группу rwx
для наших типов пользователя в том же порядке: для владельца, входящих в группу и всех остальных. Число 0
означает, что нет никаких прав для данного типа пользователей:
A | B | C | D |
---|---|---|---|
# | Permission | rwx | Binary |
7 | read and write | rwx | 111 |
6 | read and execute | rw- | 110 |
5 | read and execute | r-x | 101 |
4 | read only | r-- | 100 |
3 | write and execute | -wx | 011 |
2 | write only | -w- | 010 |
1 | execute only | --x | 001 |
Попробуем перевести несколько примеров из буквенной формы в числовую:
drwxr-xr-x
соответствует755
-rw-r--r--
соответствует644
Однако пользователь root
находится вне этой системы. Для него не имеет никакого значения наличие любых прав — суперпользователь может все.
Для изменения владельца файлов или директорий можно использовать утилиту chown
. В самом простом использовании команда принимает имя пользователя и файл (или директорию) для которого нужно сменить пользователя:
Для изменения прав доступа к файлам и директориям можно использовать утилиту chmod
. Утилита принимает права доступа и путь к файлу. Права доступа можно записывать обоими способами. С помощью знаков +
и -
права добавляются или удаляются соответственно:
Дополнительные материалы
Вопросы для самопроверки
Представьте файл со следующими правами: -rw-rw-r--
Какие действия доступны пользователям, входящим в группу?
Исполнение
Чтение
Запись
Какому числу соответствуют данный уровень доступа? -rw-r--r--
446
705
533
644
Выберите верные утверждения:
Единственная директория, куда пользователь может писать в новой системе -
/tmp
Суперпользователь имеет доступ ко всему, независимо от установленного уровня доступа
Чтобы удалить файл, нужно иметь права на запись в директорию, которая его содержит
7
соответствует уровню rw-`