rwx и chmod
Каждый файл Linux несёт девять битов прав — чтение, запись, выполнение для владельца, группы и остальных. chmod устанавливает их числом (например, 640 = rw-r-----) или символьно (u+x, go-w). Освой это — и ты контролируешь, кто что может.
Ты создаёшь скрипт, запускаешь его — и получаешь Permission denied. Или копируешь конфиг-файл, и вдруг любой пользователь системы может прочитать пароль от базы данных. Оба случая имеют одну причину: права доступа Linux. У каждого файла и каталога ровно девять битов прав. Как только ты научишься читать их и осознанно выставлять, перестанешь копировать chmod 777 вслепую и начнёшь задавать права, которые действительно соответствуют намерению.
После этого урока ты сможешь читать девять rwx-битов из вывода ls -l, декодировать любое восьмеричное число вроде 640 или 755 в понятный вид, и устанавливать права числовым синтаксисом (chmod 640) и символьным (chmod u+x, chmod go-w).
ls -l показывает права как десять символов. Запусти ls -l в любом каталоге и увидишь строки вида:
ls -l /etc/passwd-rw-r--r-- 1 root root 2048 Jun 10 12:00 /etc/passwdПервый столбец — десять символов. Самый первый — тип файла (- = обычный файл, d = каталог, l = символическая ссылка). Остальные девять — биты прав: три группы по три символа:
- Символы 2–4: права пользователя (владельца файла)
- Символы 5–7: права группы (группы-владельца файла)
- Символы 8–10: права остальных (все, кто не владелец и не в группе)
В каждой группе три позиции: r (чтение), w (запись), x (выполнение). Дефис - означает, что данное право отсутствует.
Каждый бит имеет фиксированное восьмеричное значение: r=4, w=2, x=1. Чтобы перевести тройку прав в число, сложи значения установленных битов:
| Биты | Вычисление | Восьмеричная цифра |
|---|---|---|
rwx | 4+2+1 | 7 |
rw- | 4+2+0 | 6 |
r-x | 4+0+1 | 5 |
r-- | 4+0+0 | 4 |
-wx | 0+2+1 | 3 |
-w- | 0+2+0 | 2 |
--x | 0+0+1 | 1 |
--- | 0+0+0 | 0 |
Трёхзначное восьмеричное число вроде 640 означает: пользователь=6 (rw-), группа=4 (r--), остальные=0 (---). Итог: rw-r-----.
chmod устанавливает права числом. Укажи трёхзначное восьмеричное число и файл:
chmod 640 secrets.conf
ls -l secrets.conf-rw-r----- 1 alice devs 512 Jun 10 13:00 secrets.confВладелец может читать и писать. Члены группы могут читать. Все остальные заблокированы. Это правильный режим для конфиг-файла, который нужен коллегам, но не должен быть доступен посторонним.
Часто используемые числовые режимы:
755— скрипты и каталоги: владелец имеет полный контроль, остальные могут читать и выполнять644— обычные файлы: владелец читает/пишет, остальные только читают640— чувствительный конфиг: владелец читает/пишет, группа читает, остальные исключены600— приватные ключи и секреты: только владелец может читать и писать700— приватные каталоги: только владелец может просматривать и входить
chmod также принимает символьный синтаксис. Символьный синтаксис называет, кого изменяем (u=user/владелец, g=group, o=other, a=все трое), оператор (+ добавить, - убрать, = задать точно) и какие биты (r, w, x):
chmod u+x deploy.sh # добавить выполнение для владельца
chmod go-w shared.txt # убрать запись у группы и остальных
chmod a=r public.html # всем — только чтениеСимвольный синтаксис удобен, когда нужно изменить один бит, не зная и не трогая остальные. Числовой — когда нужно задать полный режим точно.
Настройка скрипта деплоя.
У тебя есть скрипт deploy.sh, который должен быть исполняемым для владельца и читаемым для группы deploy, но невидимым для всех остальных.
ls -l deploy.sh-rw-rw-rw- 1 alice deploy 300 Jun 10 14:00 deploy.shСейчас он доступен всем для чтения и записи — проблема безопасности. Исправим:
chmod 750 deploy.sh
ls -l deploy.sh-rwxr-x--- 1 alice deploy 300 Jun 10 14:00 deploy.shДекодируем 750: пользователь=7 (rwx), группа=5 (r-x), остальные=0 (---). Alice может читать, писать и выполнять. Члены группы deploy могут читать и выполнять. Никто другой даже не видит содержимое файла.
То же самое символьным синтаксисом:
chmod u=rwx,g=rx,o= deploy.sh▸Почему это работает
На macOS команда chmod работает идентично — тот же числовой и символьный синтаксис, та же модель rwx. Единственное видимое отличие: ls -l на macOS может добавить символ @ после строки прав, если у файла есть расширенные атрибуты. Восьмеричные значения и синтаксис chmod неизменны.
▸Частая ошибка
chmod 777 даёт чтение, запись и выполнение всем пользователям системы (user=7, group=7, other=7). Это почти никогда не правильный ответ. Обычно к нему тянутся из-за Permission denied: хочется, чтобы ошибка исчезла. Правильное решение — выяснить причину отказа в доступе: неправильный владелец, не та группа или отсутствующий бит выполнения — и задать минимально необходимое право. chmod 777 на файл, доступный через веб, позволяет любому процессу на сервере перезаписать его. На конфиг-файле — раскрывает учётные данные всем локальным пользователям.
Файл показывает -rw-r----- в выводе ls -l. Какой его числовой (восьмеричный) режим?
У каждого файла Linux есть девять битов прав, разбитых на три тройки — user, group, other — каждая содержит r (чтение=4), w (запись=2), x (выполнение=1). Сложи значения в каждой тройке, чтобы получить восьмеричную цифру: rw- = 6, r-- = 4, --- = 0, значит rw-r----- = 640. chmod принимает трёхзначное восьмеричное число для установки всех девяти битов сразу или символьные выражения вроде u+x и go-w для изменения отдельных битов. Используй минимально необходимые права — никогда не хватайся за 777 как за быстрое решение.
Практика
Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.