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— сменить владельца, только если текущий совпадает сolduserchown --reference=file file2— задать владельца и группу как у другого файла
По безопасности
- Не раздавай лишние права, особенно
777— это открывает файл на запись и выполнение для всех - Для скриптов обычно достаточно
755 - Чувствительные файлы — конфиги, ключи — держи на
600 - Меняй владельца только когда это реально нужно, не "на всякий случай"
Эти две команды — основа управления доступом в Linux. Понимание того, как они работают, экономит время на отладке "Permission denied" и снижает риск открыть лишнее.
Если хочешь обсудить похожую задачу — пиши на [email protected] или заходи на 1it.pro.