Linux: Permission denied — chmod, chown и безопасные права

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Выдайте минимально необходимые права, не используйте 777.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Если не помогло
  5. Как прочитать права
  6. Типовые правильные значения
  7. Когда проблема не в chmod

#Что означает ошибка

Сообщение
Permission denied

Сообщение Permission denied в Linux означает, что у процесса нет нужного разрешения на чтение, запись или выполнение объекта. Система прав в Linux построена на трёх категориях владельцев (пользователь, группа, остальные) и трёх типах доступа (r, w, x). Чтобы войти в каталог, нужно право x именно на каталог, а не только на файл внутри.

Многие новички решают проблему командой chmod 777, потому что она «работает». Но она открывает файл всем пользователям системы, а на веб-сервере позволяет злоумышленнику записать вредоносный код в каталог сайта. Правильно — выяснить, кто и что должен делать, и выдать минимально достаточные права.

Выдайте минимально необходимые права, не используйте 777.

#Причины и решения

Возможная причинаКак узнатьЧто делать
ВладелецНе тот.Проявляется как «Permission denied» или близкий по смыслу сбой.chown.
ПраваМало.Проявляется как «Permission denied» или близкий по смыслу сбой.chmod.
SELinux/AppArmorПолитика.Проявляется как «Permission denied» или близкий по смыслу сбой.Проверьте.
КаталогНет x.Проявляется как «Permission denied» или близкий по смыслу сбой.Добавьте.

#Пошаговое решение

  1. Проверьте праваВ терминале выполните id, затем ls -ld -- ПУТЬ для реального файла или каталога (вместо ПУТЬ подставьте путь из ошибки, в кавычках при пробелах). Чтобы увидеть права всех промежуточных каталогов, выполните namei -l -- ПУТЬ. По выводу определите, кому принадлежат файлы и есть ли право прохода (x) по каталогам. Не назначайте 777 и не меняйте владельца рекурсивно без понимания роли файлов.
  2. Смените владельцаОткройте терминал и выясните фактического владельца: ls -ld -- /фактический/путь и id. Если у файла должен быть другой владелец, согласуйте это с администратором и меняйте только конкретный файл: sudo chown ИМЯ_ПОЛЬЗОВАТЕЛЯ:ИМЯ_ГРУППЫ /фактический/файл, подставляя реально существующую учётную запись и путь. Не используйте chown -R для системных каталогов и сайтов по примеру: рекурсивная замена может сломать владельцев, защищённые файлы и работу сервера. При ошибке доступа к корпоративным данным сначала запросите права, а не захватывайте владение.
  3. Выдайте праваПроверьте namei -l -- /фактический/путь: для доступа к файлу нужны права на сам файл и право прохода x по каждому родительскому каталогу. Не назначайте всем chmod 777 или chmod -R 755: это может открыть секреты. Если файл должен читать только владелец, достаточно режима 600; если он предназначен для обычного чтения, режим 644 может подходить, но зависит от задачи. Для конкретного сценария согласуйте нужную группу и ACL (getfacl /фактический/путь, если утилита есть). После изменения повторите исходную операцию от того же пользователя и при неудаче запишите точный отказ.

#Если не помогло

Не выдавайте 777 на каталоги сайта: это снижает безопасность.

#Как прочитать права

Команда ls -l показывает строку вида -rw-r--r--: первый символ — тип объекта, затем три тройки для владельца, группы и остальных. Число 644 означает rw- для владельца и r-- для остальных; 755 — rwx для владельца и r-x для остальных; 600 — доступ только владельцу. Для каталогов нужен бит x, иначе внутрь не зайти.

#Типовые правильные значения

Файлы сайта — 644, каталоги — 755, закрытые ключи и конфиги с паролями — 600, каталог ~/.ssh — 700. Владельца задают командой chown, а для общего доступа удобнее добавить пользователей в группу и выдать групповые права, чем открывать доступ всем.

#Когда проблема не в chmod

Если права выглядят правильно, а доступ запрещён, проверьте SELinux или AppArmor, флаг immutable (lsattr), монтирование диска только для чтения и ACL (getfacl). Для сетевых и контейнерных томов часто важно совпадение идентификаторов UID и GID, а не имён пользователей.

Linux · Терминал (Bash)Команда
Показывает права на каждый компонент пути — удобно найти каталог без бита x.
ls -ld /var/www/site && namei -l /var/www/site/index.php
Linux · Терминал (Bash)Команда
Пакетная рекурсивная смена владельца заменена диагностикой прав; исправляйте только конкретный путь. Запуск: терминал Linux с правами, указанными в команде. Сначала проверьте имя устройства и целевой путь.
namei -l /var/www/site

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.