2 min read

chmod и chown: права доступа в Linux без путаницы

chmod и chown: права доступа в Linux без путаницы

Права доступа — то, с чем рано или поздно сталкивается каждый, кто работает с Linux. "Permission denied" вылезает в самый неподходящий момент. Разбираю, как chmod и chown устроены — не через зубрёжку комбинаций, а через понимание формата.

Что делает каждая команда

chmod (change mode) — меняет права доступа к файлу или директории. chown (change owner) — меняет владельца и группу файла или директории.

Это разные вещи: chmod решает, что можно делать с файлом, chown — кому.

chmod: числовой формат

Каждое право — число:

  • 4 — чтение (r)
  • 2 — запись (w)
  • 1 — выполнение (x)

Складываешь нужные значения и получаешь права для каждой категории — владелец, группа, остальные:

chmod 755 myfile

Расшифровка:

  • Владелец: rwx (7 = 4+2+1)
  • Группа: r-x (5 = 4+1)
  • Остальные: r-x (5 = 4+1)

Когда привыкаешь читать число как сумму прав — расшифровка любой комбинации занимает секунды.

chmod: символьный формат

Формат:

chmod [категория][операция][права] file

Где:

  • Категория: u (владелец), g (группа), o (остальные), a (все)
  • Операция: + (добавить), - (убрать), = (задать точно)
  • Права: r (чтение), w (запись), x (выполнение)

Пример — добавить право на выполнение для владельца:

chmod u+x myscript.sh

Удобно, когда нужно изменить одно конкретное право, не трогая остальные.

chown: смена владельца

Сменить владельца файла:

chown user myfile

Сменить владельца и группу одновременно:

chown user:group myfile

Рекурсивно для директории и всего её содержимого:

chown -R user:group my_directory

Типичные примеры

chmod:

Разрешить выполнение всем:

chmod +x script.sh

Полные права владельцу, никаких — остальным:

chmod 700 private_file

Дать группе право на запись:

chmod g+w shared_folder

Задать точные права для всех категорий:

chmod u=rwx,g=rx,o=rx public_file

chown:

Сменить владельца:

chown alice myfile

Сменить владельца и группу для директории рекурсивно:

chown -R alice:developers my_directory

Рекурсивное изменение

Применить права ко всей директории сразу:

chmod -R 755 my_directory

Осторожно с этим на больших деревьях каталогов — рекурсивный chmod применит одни и те же права и к файлам, и к папкам, что не всегда правильно (папкам обычно нужен x для входа, файлам — не всегда).

Полезные опции

  • chmod -v — подробный вывод изменений
  • chmod -c — вывести только изменённые файлы
  • chmod --reference=file — применить права как у другого файла
  • chown --from=olduser newuser file — сменить владельца, только если текущий совпадает с olduser
  • chown --reference=file file2 — задать владельца и группу как у другого файла

По безопасности

  1. Не раздавай лишние права, особенно 777 — это открывает файл на запись и выполнение для всех
  2. Для скриптов обычно достаточно 755
  3. Чувствительные файлы — конфиги, ключи — держи на 600
  4. Меняй владельца только когда это реально нужно, не "на всякий случай"

Эти две команды — основа управления доступом в Linux. Понимание того, как они работают, экономит время на отладке "Permission denied" и снижает риск открыть лишнее.


Если хочешь обсудить похожую задачу — пиши на [email protected] или заходи на 1it.pro.

Связаться с нами
Telegram
WhatsApp
Email