Глиф Учебники

Урок 4. Права доступа: chmod, chown и rwx

Курс «Командная строка Linux» · урок 4 из 10 · 5 минут чтения

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

Как читать права

Права показывает ls -l. Строка для одного файла выглядит так (дата у вас может быть записана по-другому — это зависит от языка системы):

Текст
-rw-r--r-- 1 ivan ivan 1520 Mar 12 10:20 notes.txt
ЧастьЧто значит
-тип: - — обычный файл, d — папка, l — символическая ссылка
rw-права владельца: чтение и запись
r--права группы: только чтение
r--права всех остальных: только чтение
ivan ivanвладелец и группа
1520размер в байтах

Три тройки букв — это права трёх сторон: владельца (u, user), группы (g, group) и остальных (o, others). Прочерк на месте буквы означает, что такого права нет. Свои группы показывает команда id или groups.

Что значат r, w и x

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

Две вещи, которые часто удивляют. Удалить файл можно, если есть право записи в папку, — права самого файла на это не влияют (исключение — общие папки вроде /tmp: там удалить можно только свои файлы). А папка без x бесполезна: даже зная имя файла внутри, открыть его не получится.

папка файл в ней изменить файл удалить файл rwx r-- нельзя можно r-x rw- можно нельзя войти в папку открыть файл rw- rw- нельзя нельзя показаны права владельца: r — чтение, w — запись, x — для папки вход
Менять файл разрешает его собственное w, удалять — право w у папки, а без x у папки в неё нельзя войти и нельзя открыть файл внутри.

chmod буквами

chmod (change mode) меняет права. Буквенная запись: кому (u, g, o или a — всем), что сделать (+ — добавить, - — убрать, = — задать ровно так) и какие права:

Bash
chmod u+x script.sh
chmod g-w report.txt
chmod o-rwx private.txt
chmod a+r readme.txt
chmod u=rw,go=r notes.txt
chmod u + x script.sh какие права — r, w, x что сделать — + добавить, - убрать, = задать ровно кому — u владелец, g группа, o остальные, a все u g o было rw- r-- r-- стало rwx r-- r-- владелец получил право запускать script.sh
В chmod u+x script.sh буква u выбирает владельца, знак + добавляет право, а x — право запуска: права rw-r--r-- становятся rwxr--r--.

Просто chmod +x script.sh — то же, что a+x, но с учётом настройки umask (о ней ниже). Обычно это право на запуск для всех.

chmod числами

Каждое право — число: r = 4, w = 2, x = 1. Права одной стороны — их сумма: rwx = 7, rw- = 6, r-x = 5, r-- = 4. Три цифры подряд — владелец, группа, остальные:

Bash
chmod 755 script.sh
chmod 644 index.html
chmod 600 ~/.ssh/id_ed25519
chmod 700 ~/private
chmod 7 5 5 script.sh владелец (u) 7 r 4 w 2 x 1 4 + 2 + 1 = 7 rwx группа (g) 5 r 4 - 0 x 1 4 + 0 + 1 = 5 r-x остальные (o) 5 r 4 - 0 x 1 4 + 0 + 1 = 5 r-x
Каждая цифра в chmod 755 — сумма прав r = 4, w = 2 и x = 1: 7 даёт владельцу rwx, а 5 даёт группе и остальным r-x.
ЧислоБуквамиКогда ставят
755rwxr-xr-xпрограммы, скрипты и папки: менять может только владелец
644rw-r--r--обычные файлы: сайты, документы, настройки
700rwx------личная папка, куда нельзя никому
600rw-------секреты: ключи SSH, файлы с паролями
775 и 664rwxrwxr-x, rw-rw-r--общая работа группы над файлами

chmod 777 разрешает всем пользователям системы и всем программам менять и запускать файл. На сервере это открытая дверь: взломанный сайт или чужая программа сможет подменить ваши файлы. Если «не хватает прав», правильнее поменять владельца (chown) или добавить пользователя в группу, а не открывать файл всем.

Владелец и группа

Bash
sudo chown ivan report.txt
sudo chown ivan:www-data /var/www/site
sudo chown -R ivan:ivan ~/projects
sudo chgrp www-data upload

Отдать свой файл другому пользователю может только администратор, поэтому chown почти всегда запускают через sudo. www-data — пользователь и группа, от которых в Ubuntu и Debian работает веб-сервер.

Типичная ситуация: вы создали файлы командой с sudo, и теперь они принадлежат root — менять их без sudo нельзя. Верните их себе: sudo chown -R $USER:$USER ~/projects.

Права на папку целиком

chmod -R меняет права у папки и всего, что внутри. Но chmod -R 755 сделает исполняемыми и обычные файлы, а chmod -R 644 — закроет вход во все папки. Правильно — отдельно для папок и для файлов:

Bash
find ~/site -type d -exec chmod 755 {} +
find ~/site -type f -exec chmod 644 {} +

Есть и короткий способ: большая X в chmod -R u+rwX,go+rX ~/site ставит право выполнения только папкам и тем файлам, которые уже были исполняемыми.

Не запускайте chmod -R и chown -R для системных папок (/, /usr, /etc, /var). Многие программы проверяют права своих файлов: после sudo chmod -R 777 /usr, например, перестаёт работать сам sudo, и систему придётся чинить с загрузочной флешки.

Права новых файлов: umask

Новые файлы получают права не случайно: из полных прав вычитается umask. Её показывает команда umask. При 0022 новые файлы получаются 644, а папки — 755; при 0002 — 664 и 775. Обычно её не трогают.

Root и sudo

Пользователь root — администратор: права доступа его почти не ограничивают. Команда sudo выполняет одну команду от имени root, если вам это разрешено. Поэтому sudo нужен для системных файлов в /etc и /var, но не нужен для файлов в домашней папке. Привычка писать sudo перед каждой командой опасна: ошибка с правами root ломает уже не ваши файлы, а систему.

Коротко

Проверьте себя

1. Какие права означает число 644?
2. Что даёт право x на папку?
3. Какой командой отдать папку /var/www/site пользователю ivan и группе www-data вместе со всем содержимым?
4. Сайт не может записать файл в папку. Какое решение правильное?