Урок 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 пустой скрипт запускается и ничего не выводит — ошибки больше нет.
./ перед именем значит «файл из текущей папки». Без него оболочка будет искать программу среди системных команд и не найдёт.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Что значат права -rw-r--r-- у файла?
Первый символ — тип (- — файл), дальше по три символа: владелец rw-, группа r--, остальные r--.
-
Скрипт не запускается с ошибкой Permission denied. Что нужно сделать?
Чтобы файл можно было запускать как программу, нужно право x. sudo тут ни при чём и только добавит риска.
-
Какие права числом подходят для файла с паролями, который должен читать и менять только владелец?
6 — чтение и запись для владельца, 0 и 0 — ничего для группы и остальных. 777 открыл бы файл всем.
-
Когда нужен sudo?
sudo даёт права администратора. Со своими файлами он не нужен, а лишний sudo повышает цену ошибки.