open atlas
↑ К треку
Командная строка CLI · 05 · 01

rwx и chmod

Каждый файл Linux несёт девять битов прав — чтение, запись, выполнение для владельца, группы и остальных. chmod устанавливает их числом (например, 640 = rw-r-----) или символьно (u+x, go-w). Освой это — и ты контролируешь, кто что может.

CLI Junior ◷ 22 min
Уровень
ОсновыJuniorMiddleSenior

Ты создаёшь скрипт, запускаешь его — и получаешь Permission denied. Или копируешь конфиг-файл, и вдруг любой пользователь системы может прочитать пароль от базы данных. Оба случая имеют одну причину: права доступа Linux. У каждого файла и каталога ровно девять битов прав. Как только ты научишься читать их и осознанно выставлять, перестанешь копировать chmod 777 вслепую и начнёшь задавать права, которые действительно соответствуют намерению.

Цель

После этого урока ты сможешь читать девять rwx-битов из вывода ls -l, декодировать любое восьмеричное число вроде 640 или 755 в понятный вид, и устанавливать права числовым синтаксисом (chmod 640) и символьным (chmod u+x, chmod go-w).

1

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 (выполнение). Дефис - означает, что данное право отсутствует.

2

Каждый бит имеет фиксированное восьмеричное значение: r=4, w=2, x=1. Чтобы перевести тройку прав в число, сложи значения установленных битов:

БитыВычислениеВосьмеричная цифра
rwx4+2+17
rw-4+2+06
r-x4+0+15
r--4+0+04
-wx0+2+13
-w-0+2+02
--x0+0+11
---0+0+00

Трёхзначное восьмеричное число вроде 640 означает: пользователь=6 (rw-), группа=4 (r--), остальные=0 (---). Итог: rw-r-----.

3

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 — приватные каталоги: только владелец может просматривать и входить
4

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-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.