Зарегистрируйтесь, чтобы продолжить обучение

Права доступа Основы командной строки

Часто разработчики сталкиваются с ошибкой доступа:

touch /etc/myfile

touch: cannot touch '/etc/myfile': Permission denied

Она указывает, что текущий пользователь не имеет прав на создание файлов в каталоге /etc. Почему? Все дело в правах доступа, которые мы изучим в этом уроке.

Кроме имени пользователя и группы, с каждым файлом ассоциированы права доступа:

  • r — чтение (read)
  • w — запись (write)
  • x — исполнение (execute)

Причем эти права задаются для трех типов пользователей:

  • Владельца (User)
  • Пользователей, входящих в ту же группу (Group)
  • Остальных (Other) — тех, кто не попал в предыдущие две

Разберем на примере:

# Пример строчки из вывода команды ls -la
-rw-r--r-- 1 kirill.m kirill.m 3771 Aug 31  2015 .bashrc

Запись слева представляет собой один из вариантов описания прав доступа (permissions). Для удобства чтения разделим эту запись на группы символов:

  • - — этот символ обозначает, что перед нами файл
  • rw- — права первого типа (для владельца файла). Владелец может читать этот файл (r) и писать в него (w). Прочерк в конце означает, что этот файл нельзя исполнять
  • r-- — права второго типа (для группы владельца). В нашем случае такие права есть у тех, кто входит в группу kirill.m. Запись r-- говорит о наличии доступа только для чтения, а изменение и исполнение запрещены.
  • r-- — права третьей группы (все остальные). В нашем случае права совпадают со второй группой, поэтому файл доступен только для чтения

Не важно, какой файл или директорию мы смотрим — порядок прав в этой группе всегда один и тот же — чтение-запись-исполнение, а прочерк означает отсутствие этого права:

File Permissions

А кто может удалить этот файл? Для ответа на этот вопрос важно знать владельца, группу и права той директории, в которой лежит файл .bashrc. Сам файл не может обозначить прав на свое удаление, потому что права всегда берутся из той директории, в которой файл находится.

Удалить файл можно, только если у вас есть возможность писать в эту директорию:

ls -la /home/ | grep kirill

drwxr-xr-x  5 kirill.m          kirill.m          4096 Aug 29 11:34 kirill.m

Домашняя директория имеет другие права:

  • В самом начале вместо - стоит d, которая обозначает директорию
  • Права для владельца — rwx, а для всех остальных — r-x. Из этого описания видно, что только пользователь может писать внутрь своей домашней директории

Что такое x в отношении директорий? Это право позволяет перемещаться в директорию и обращаться ко всем расположенным в ней файлам и каталогам. Обращаться можно при условии, что эти файлы доступны на чтение, запись или выполнение. Например, если положить доступный на чтение файл в директорию с правом x, то вы сможете прочитать этот файл. Если убрать с этой директории право x, то вы лишитесь доступа к файлу.

Но что тогда такое чтение? Здесь все более интуитивно понятно. По сути, директория — это список файлов, поэтому право на чтение позволяет прочитать этот список, а именно вывести список имен файлов, содержащихся в директории.

Но представим, что вы хотите посмотреть не простой список имен файлов, а список с дополнительной информацией — как при выводе ls -l. Тогда потребуется еще и право x, потому что в этом случае надо обращаться к файлам за их метаданными (владелец, группа, дата изменения, права и др.). В любом случае без права r вы не сможете посмотреть содержимое директории.

В статьях, книгах и руководствах иногда используется другой способ описания прав доступа: 755. Это не одно число, а три числа. Каждое из которых представляет собой группу rwx для наших типов пользователя в том же порядке: для владельца, входящих в группу и всех остальных. Число 0 означает, что нет никаких прав для данного типа пользователей:

A B C D
# Permission rwx Binary
7 read, write and execute rwx 111
6 read and write 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. В самом простом использовании команда принимает имя пользователя и файл (или директорию) для которого нужно сменить пользователя:

chown kirill .bashrc

Для изменения прав доступа к файлам и директориям можно использовать утилиту chmod. Утилита принимает права доступа и путь к файлу. Права доступа можно записывать обоими способами. С помощью знаков + и - права добавляются или удаляются соответственно:

chmod +r file.txt
chmod 754 file.txt

Дополнительные материалы

  1. Изменение владельца файла или каталога
  2. Изменение прав доступа

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Верстка на HTML5 и CSS3, Программирование на JavaScript в браузере, разработка клиентских приложений используя React
10 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на Python, Разработка веб-приложений и сервисов используя Django, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
Тестирование веб-приложений, чек-листы и тест-кейсы, этапы тестирования, DevTools, Postman, SQL, Git, HTTP/HTTPS, API
4 месяца
с нуля
Старт 26 декабря
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Google таблицы, SQL, Python, Superset, Tableau, Pandas, визуализация данных, Anaconda, Jupyter Notebook, A/B-тесты, ROI
9 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на PHP, Разработка веб-приложений и сервисов используя Laravel, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на JavaScript в браузере и на сервере (Node.js), разработка бекендов на Fastify и фронтенда на React
16 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на JavaScript, разработка веб-приложений, bff и сервисов используя Fastify, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Git, JavaScript, Playwright, бэкенд-тесты, юнит-тесты, API-тесты, UI-тесты, Github Actions, HTTP/HTTPS, API, Docker, SQL
8 месяцев
c опытом
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»