chmod 777, 755, 644: что означают права доступа в Linux

6 ноября 2026 г.
chmod 777, 755, 644: что означают права доступа в Linux

Скрипт не запускается, и терминал выдаёт bash: ./deploy.sh: Permission denied. Или обратная история: сайт лежит, потому что кто-то ночью сделал chmod -R 777 и забыл, зачем. На уровне HTTP то же самое выглядит как 403 Forbidden, только в браузере, а в терминале сообщение выглядит как отказ операционной системы. Права доступа в Linux кажутся тайной шифром ровно до тех пор, пока не расшифруешь три цифры, и после этого становится проще, чем кажется.

Три группы и три действия

У каждого файла есть владелец, группа и категория «все остальные». Права задаются отдельно для каждой группы, поэтому в записи всегда три тройки символов. Самих действий тоже ровно три: читать, писать и выполнять.

  • r, read, чтение: увидеть содержимое файла или список имён в каталоге, соответствует биту 4;
  • w, write, запись: изменить содержимое файла, создать, удалить или переименовать файл в каталоге, бит 2;
  • x, execute, выполнение: запустить файл как программу, а для каталога это право перейти внутрь него, бит 1;
  • u, user, владелец: тот, кому файл принадлежит; g, group, группа: пользователи из группы файла; o, others, остальные: все прочие, включая анонимных посетителей сайта.

Смысл разделения на группы простой: на сервере есть не только вы. У веб-сервера своя группа, у приложения своя, у деплоя своя. Права настраивают так, чтобы каждая часть системы делала ровно то, что ей нужно, и ничего больше.

Восьмеричная запись: почему r это 4, w это 2, x это 1

Три действия складываются в одно число по битам, и получается восьмеричная цифра от 0 до 7. Read весит 4, write весит 2, execute весит 1. Одна цифра кодирует права одной группы, а три цифры подряд, по одной на владельца, группу и остальных, кодируют полный набор.

Восемь возможных цифр
0 = 0         ---   нет прав
1 = 1         --x   только выполнение
2 = 2         -w-   только запись
3 = 2 + 1     -wx   запись и выполнение
4 = 4         r--   только чтение
5 = 4 + 1     r-x   чтение и выполнение
6 = 4 + 2     rw-   чтение и запись
7 = 4 + 2 + 1 rwx   все три права

Из этой таблицы сразу видно, откуда берутся три знакомые цифры. В 644 первая цифра это 6, то есть 4 плюс 2, чтение и запись; вторая и третья это 4, то есть только чтение. В 755 первая цифра это 7, а вторая и третья это 5, то есть 4 плюс 1, чтение и выполнение.

Что значат 644, 755, 777, 600 и 700

  • 644, то есть rw-r--r--: обычный файл, который нужно читать, а править может только владелец. Стандарт для текстовых файлов, конфигов, .htaccess и файлов сайта;
  • 755, то есть rwxr-xr-x: файл, который нужно запускать, или каталог, в который нужно заходить. Владелец читает, пишет и выполняет, группа и остальные читают и выполняют, но не пишут;
  • 777, то есть rwxrwxrwx: все права для всех. На работающем сервере это почти всегда ошибка;
  • 600, то есть rw-------: файл доступен только владельцу. Так обращаются с паролями, ключами и файлами .env;
  • 700, то есть rwx------: каталог или скрипт, доступный исключительно владельцу. Личный каталог пользователя и ~/.ssh выглядят именно так;
  • 750, то есть rwxr-x---: каталог, в который может зайти своя группа. Рабочая настройка для каталога приложения.

Про 777 стоит сказать отдельно, потому что именно его чаще всего советуют в интернете. Право записи для группы «остальные» означает, что абсолютно любой пользователь на сервере, включая скомпрометированный сайт из соседнего аккаунта, может создать и изменить файл. Если этот файл исполняемый или подключается веб-сервером, туда можно положить свой код, и он выполнится от имени сервера. Для каталога uploads с картинками это путь к загрузке вредоносного файла, для конфига с паролем от базы это путь к утечке.

Символьная запись rwxr-xr-x

Восьмеричные числа удобны в скриптах, но держать в голове, что значит 755, необязательно. Символьная запись читается прямо: десять символов, три группы по три позиции, в порядке владелец, группа, остальные. Дефис означает, что права нет.

Есть и третий формат, в котором каждое право выписано отдельной операцией. Он удобен тем, что меняет ровно то, что нужно, и не трогает остальное: u+x добавит право выполнения владельцу, g-w уберёт право записи у группы, o=r оставит у остальных только чтение. Порядок операций в команде значения не имеет, а вот порядок букв в символьной записи важен.

Один набор прав в трёх записях
Числом:     755
Символьно:  rwxr-xr-x
По частям:  chmod u+r,u+w,u+x,g+r,g+x,o+r,o+x
Для файла:  chmod 755 filename
Для каталога: chmod 755 directory/

Каталогу нужен x, и вот почему

Для файла права читаются привычно: r открывает содержимое, w меняет его, x запускает. Для каталога смысл другой, и именно здесь новички чаще всего ошибаются, потому что интуиция подсказывает «чем больше, тем лучше».

  • r на каталоге это право увидеть список имён файлов;
  • w на каталоге это право создавать в нём файлы, удалять их и переименовать;
  • x на каталоге это право пройти внутрь: перейти в каталог и открыть файлы, которые внутри;
  • r и w без x дают странный эффект: имена видно, но войти нельзя;
  • x без r даёт обратный эффект: войти можно, а список файлов посмотреть нельзя.

Отсюда практическое правило: каталог без права x нерабочий, какие бы права ни стояли. И обратное тоже верно: если каталог закрыт на 700, а файл внутри выставлен на 644, владелец всё равно не прочитает файл, потому что перейти внутрь нельзя. Права файла не действуют в обход прав каталога, в котором он лежит.

umask: откуда берутся 644 и 755

Права нового файла не придумываются в момент создания, а вычисляются из маски umask. Маска задаёт права, которые запрещены. Файл создаётся как 666, каталог как 777, и из этих базовых значений вычитается маска.

Маска по умолчанию в большинстве дистрибутивов Linux равна 022. Значит, у нового файла запрещены запись для группы и для остальных, и получается 644, а у нового каталога запрещено право записи для остальных, и получается 755. Именно поэтому на свежем сервере все файлы и каталоги выглядят одинаково, и именно поэтому «права слетели» обычно означает, что кто-то менял маску или копировал файлы с другими правами.

Как маска превращает базовые права в итоговые
Базовые права: файл 666, каталог 777

umask 022 (по умолчанию) → файлы 644, каталоги 755
umask 002              → файлы 664, каталоги 775
umask 027              → файлы 640, каталоги 750
umask 077              → файлы 600, каталоги 700
umask 000              → файлы 666, каталоги 777

Текущую маску показывает команда umask, изменить её можно командой umask 027 в том же терминале, после чего новые файлы будут создаваться с более закрытыми правами. Деталь, о которой забывают: маска влияет только на новые объекты, права уже существующих файлов и каталогов не меняются.

Как это выглядит в ls -l

Команда ls -l показывает в начале каждой строки десять символов. Первый отвечает за тип объекта, остальные девять это права в символьной записи, а дальше идут число ссылок, владелец, группа, размер, дата и имя.

Вывод ls -l
-rw-r--r--  1 www-data www-data   1234 Nov  3 10:12 index.php
drwxr-xr-x  2 www-data www-data   4096 Nov  3 10:12 uploads
-rwxr-xr-x  1 deploy    deploy     512 Nov  3 09:40 backup.sh
-rw-------  1 deploy    deploy       96 Nov  3 09:38 .env
lrwxrwxrwx  1 www-data www-data      12 Nov  3 10:12 current -> releases

Первый символ расшифровывается так: дефис это обычный файл, d это каталог, l это символическая ссылка, c это символьное устройство, b это блочное устройство. Дальше идут три группы по три символа, и из них сразу читается ответ: index.php это 644, uploads это 755, backup.sh это 755, .env это 600. У символической ссылки права показываются как 777, но они ничего не значат, потому что доступ определяется правами цели, на которую ссылка указывает.

Подбираем права без догадок

Откройте калькулятор прав доступа: он показывает четыре представления одного набора сразу, восьмеричное число, символьную запись, перечисление отдельных прав и готовую команду. Есть пресеты 644, 755, 777, 700, 600, 750, 666 и 400, переключатель «файл или каталог» и поле, куда можно вписать число и получить расшифровку. Например, 755 превращается в rwxr-xr-x и в команду chmod 755 filename, а для каталога подставляется chmod 755 directory/.

Отдельная задача рядом с правами это расписание задач. Если скрипт запускается по cron, у него должен быть бит исполнения, а лог или файл блокировки лучше закрыть: 644 для лога, 600 для файла с чувствительными данными. Разобрать само выражение расписания помогает разбор cron-выражений, а как из этих строк получается расписание в человекочитаемом виде, разобрано в статье о cron в простых словах.

Типичные ошибки

  • chmod -R 777 на весь сайт. Проблема не в том, что перестанет работать, а в том, что заработает слишком широко;
  • забытый x на каталоге: 666 на каталоге выглядит безобидно, хотя внутрь оно не пустит;
  • попытка сделать каталог исполняемым, чтобы запустить лежащий в нём скрипт: право x ставится на самом файле, а каталогу x нужен для обхода;
  • смена прав на файле вместо каталога: скрипт не запустится, потому что не хватает x на самом .sh, а не на папке рядом;
  • права на .htaccess: значение 777 позволяет любому посетителю дописать в файл свои директивы, правильное значение там 644;
  • chmod 600 на публичной папке: загруженные файлы перестанут отдаваться, если процесс веб-сервера работает от другого пользователя;
  • chmod 755 на файле с данными: если это конфиг, пароль или ключ, то execute тут не нужен, достаточно 644 или 600.

Частые вопросы

Почему скрипт перестал запускаться после переноса сайта?

Чаще всего дело не в самих правах, а в том, что при копировании потерялся бит исполнения или сменился владелец файлов. Посмотрите вывод ls -l для проблемного файла и сравните с ожидаемым. Символическая ссылка, созданная до переноса, может вести в никуда, и тогда проблема выглядит как права, хотя на самом деле это ссылка.

Чем отличаются 644 и 664?

Второй цифрой. В 664 у группы появляется 6, то есть 4 плюс 2, чтение и запись, а у остальных остаётся 4, то есть только чтение. На одиночном файле в рабочей папке разница невелика, но на общем каталоге 664 позволяет коллеге по группе менять содержимое. Сравнение с 775 то же: у каталога во второй позиции стоит 7 вместо 5, то есть группе добавляется запись.

Что такое setuid, setgid и sticky bit?

Это дополнительные биты, которые записываются четвёртой цифрой перед основными тремя. Setuid даёт программе права владельца файла, setgid заставляет новые файлы наследовать группу каталога, а sticky bit, он же t, запрещает удалять файлы из каталога кому-либо, кроме владельца файла, владельца каталога и суперпользователя. Классический пример с sticky bit это каталог /tmp, он выглядит как drwxrwxrwt.

Чем chmod отличается от chown?

У файла три независимых атрибута, и путать их не стоит. chmod меняет права, chown меняет владельца, chgrp меняет группу. Если скрипт не запускается из-за отсутствующего бита исполнения, помогает chmod, а если не совпадает владелец, нужен chown. На сервере с несколькими пользователями владельца и группу обычно задают один раз, а права подбирают точечно.

Нужно ли ставить 755 на скрипты cron?

Да, если задача запускает файл напрямую. Классическая настройка выглядит так: сам скрипт получает 755, лог или файл блокировки 644, а если туда пишется что-то чувствительное, то 600. Кстати, у cron ограниченный PATH, поэтому в команде лучше указывать абсолютные пути к интерпретатору и к самому скрипту.

Правило большого пальца короткое: 644 для обычных файлов, 755 для каталогов и исполняемых файлов, 600 для всего, что содержит секреты. Всё, что выходит за рамки этих трёх значений, стоит считать осознанным решением и записывать рядом с командой, почему выбрано именно оно.

Читайте также