Урок 6 из 8 · 20 мин · обновлено

Права и пользователи: chmod и sudo

Как читать права доступа в выводе ls -l, что значат r, w и x для владельца, группы и остальных, как менять права командой chmod, в том числе числами 644 и 755, и когда нужен sudo.

Кто владеет файлом

Linux с самого начала создавался для многих пользователей на одном компьютере. Поэтому у каждого файла есть владелец, группа и права: кто может его читать, менять и запускать.

Терминал
ls -l
Результат
-rw-r--r-- 1 anna anna  412 окт 20 10:31 app.log
drwxr-xr-x 4 anna anna 4096 окт 21 09:12 photos
-rw-r--r-- 1 anna anna    0 окт 21 09:40 notes.txt

Разберём первую строку:

  • - — тип: - — файл, d — папка;
  • rw-r--r-- — права, о них ниже;
  • anna anna — владелец и группа;
  • 412 — размер в байтах, дальше дата изменения и имя.

r, w, x

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

Буква Для файла Для папки
r читать содержимое видеть список файлов
w изменять создавать и удалять файлы внутри
x запускать как программу входить в папку

rw-r--r-- значит: владелец читает и изменяет, группа и остальные только читают. Прочерк — права нет.

chmod: изменить права

Команда chmod меняет права. Проще всего — буквами:

Терминал
chmod +x errors.sh
chmod o-r notes.txt
  • +x — добавить право на запуск;
  • o-r — убрать у остальных (o, others) право читать. Есть ещё u — владелец, g — группа, a — все.

На практике права часто пишут числами. Каждая буква имеет вес: r = 4, w = 2, x = 1. Права одной тройки — сумма: rw- = 4 + 2 = 6, r-x = 4 + 1 = 5.

  • 644 — rw-r--r--: обычный файл;
  • 755 — rwxr-xr-x: программа, скрипт или папка;
  • 600 — rw-------: личный файл, например с паролем или ключом;
  • 777 — всем всё. Почти всегда ошибка: так любой пользователь системы может изменить файл.
Терминал
chmod 600 secrets.txt

Ошибка Permission denied — «доступ запрещён» — значит, что прав не хватает. Сначала посмотрите ls -l: чей это файл и какие у него права.

sudo: от имени администратора

В Linux есть главный пользователь — root, ему можно всё. Обычные пользователи временно получают его права командой sudo:

Терминал
sudo apt update

Система спросит ваш пароль. При вводе символы не отображаются — так и задумано.

Правила:

  • sudo нужен для действий с системой: установить программу, поменять системные настройки, прочитать системные логи;
  • со своими файлами в домашней папке sudo не нужен;
  • не добавляйте sudo «на всякий случай», если команда не сработала. Сначала поймите, почему отказано. Под sudo любая опечатка становится опаснее.

Сменить владельца файла можно командой sudo chown пользователь файл, но в повседневной работе это нужно редко.

Попробуйте сами. В папке ~/practice создайте файл secrets.txt, сделайте так, чтобы читать и менять его мог только владелец, и проверьте права. Затем попробуйте запустить ./errors.sh до и после chmod +x — сам скрипт напишем в уроке 8, пока подойдёт пустой файл.

Решение
Терминал
touch secrets.txt
chmod 600 secrets.txt
ls -l secrets.txt
touch errors.sh
./errors.sh
chmod +x errors.sh
./errors.sh
Результат
-rw------- 1 anna anna 0 окт 21 10:02 secrets.txt
bash: ./errors.sh: Permission denied

После chmod 600 права стали rw-------. Первый запуск ./errors.sh отказан: у файла нет права x. После chmod +x пустой скрипт запускается и ничего не выводит — ошибки больше нет.

./ перед именем значит «файл из текущей папки». Без него оболочка будет искать программу среди системных команд и не найдёт.

Мини-тест: проверьте себя

Закрепите урок: несколько вопросов, разбор ответов — в конце.

  1. Что значат права -rw-r--r-- у файла?

  2. Скрипт не запускается с ошибкой Permission denied. Что нужно сделать?

  3. Какие права числом подходят для файла с паролями, который должен читать и менять только владелец?

  4. Когда нужен sudo?