Частая ошибка, с которой встречаются разработчики — ошибка доступа:
$ touch /etc/myfile
touch: cannot touch '/etc/myfile': Permission denied
Она говорит о том, что текущий пользователь не имеет прав на создание файлов в каталоге /etc
. Почему? Давайте разбираться.
Кроме имени пользователя и группы, с каждым файлом ассоциированы права доступа: r — чтение, w — запись и x — исполнение. Причём эти права задаются для трёх типов пользователей: владельца (Owner), пользователей, входящих в ту же группу (Group) и остальных (Other) — тех, кто не попал в предыдущие две. Разберём на примере:
# Пример строчки из вывода команды ls -la
-rw-r--r-- 1 kirill.m kirill.m 3771 Aug 31 2015 .bashrc
Запись слева представляет из себя один из вариантов описания прав доступа (permissions). Для удобства чтения разделим эту запись на группы символов - rw- r-- r--
. Первый символ -
в этой записи говорит о том, что перед нами обычный файл. За ним следует три группы, в каждой из которых по три символа. Каждая группа описывает доступы для разных типов пользователей. Первая описывает права доступа для владельца файла. rw-
означает, что владелец этого файла может как читать (r) этот файл, так и писать (w) в него. Последний прочерк означает, что этот файл нельзя исполнять. Исполнение описывается символом x
и будет рассмотрено в следующем уроке. Не важно, какой файл или директорию мы смотрим — порядок прав в этой группе всегда один и тот же чтение-запись-исполнение
, а прочерк означает отсутствие данного права.
Следующая группа прав относится к тем, кто входит в группу kirill.m
, так как именно этой группе принадлежит данный файл. Запись r--
говорит о наличии доступа только для чтения, а изменение запрещено. То же самое касается и тех, кто не входит в эту группу, то есть набор прав у последних двух одинаковый.
Попробуйте ответить на вопрос с подвохом: а кто может удалить этот файл? Для ответа на этот вопрос важно знать владельца, группу и права той директории, в которой лежит файл .bashrc
. Сам файл не может обозначить прав на своё удаление, они всегда берутся из того места, где он находится. Удалить файл можно только, если у вас есть возможность писать в эту директорию (в соответствии с тем, к какому типу пользователей вы относитесь).
$ ls -la /home/ | grep kirill
drwxr-xr-x 5 kirill.m kirill.m 4096 Aug 29 11:34 kirill.m
Домашняя директория имеет другие права. Первое отличие — это d
вместо -
в самом начале. d
говорит о том, что перед нами директория. Права для владельца rwx
, а для всех остальных r-x
. Из этого описания видно, что кроме пользователя никто не может писать внутрь домашней директории этого пользователя.
Что такое x
в отношении директорий? Это право позволяет перемещаться в директорию и обращаться ко всем расположенным в ней файлам и каталогам. Обращаться можно при условии, что эти файлы доступны на чтение или запись или выполнение: например, если положить доступный на чтение файл в директорию с правом x
, то вы сможете прочитать этот файл. Если же убрать с директории право x
, то вы вовсе лишитесь доступа к файлу.
Но что тогда такое чтение? Здесь всё более интуитивно понятно: директория, по сути, является списком файлов, поэтому право на чтение позволяет прочитать этот список файлов, а именно вывести список имён файлов, содержащихся в директории. Однако, если хотите посмотреть не простой список имён файлов, а список с дополнительной информацией (как при выводе ls -l
), то требуется ещё и право x
, потому что в этом случае надо обращаться к файлам за их метаданными (владелец, группа, дата изменения, права и др.). В любом случае, без права r
на каталог вы не сможете посмотреть его содержимое.
В литературе (статьях, книгах, руководствах) иногда используется другой способ описания прав доступа: 775
. Это не одно число, а три числа, каждое из которых представляет собой группу rwx
для наших типов пользователя в том же порядке: для владельца, входящих в группу и всех остальных. 0
— означает, что нет никаких прав для данного типа пользователей.
A | B | C | D | |
---|---|---|---|---|
1 | # | Permission | rwx | Binary |
2 | 7 | read, write and execute | rwx | 111 |
3 | 6 | read and write | rw- | 110 |
4 | 5 | read and execute | r-x | 101 |
5 | 4 | read only | r-- | 100 |
6 | 3 | write and execute | -wx | 011 |
7 | 2 | write only | -w- | 010 |
8 | 1 | execute only | --x | 001 |
drwxr-xr-x
в числовой форме соответствует 755
, а -rw-r--r--
— 644
.
Однако пользователь root
находится вне этой системы. Для него не имеет никакого значения наличие любых прав — суперпользователь может всё.
Вам ответят команда поддержки Хекслета или другие студенты.
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт