Как справиться с ошибкой Permission Denied

Ошибка Permission denied (доступ запрещён) означает, что система не разрешила выполнить действие: прочитать файл, записать в каталог или запустить программу. Причины бывают разные — от прав на файлы до настроек веб-сервера или даже ограничений для sudo. Ниже разберём типичные ситуации и что делать в каждой из них.


Что такое Permission denied

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


Сценарий 1: Веб-сервер не может писать в директорию сайта

Чаще всего с этим сталкиваются, когда веб-сервер (пользователь www-data или apache) не может записывать или создавать файлы в директории сайта, например в /var/www/html. Ничего страшного! Для решения этой проблемы можно выполнить несколько простых шагов.

Шаг 1. Проверка и настройка прав доступа

Чтобы веб-сервер снова обрёл нужные права, нужно убедиться, что у него есть доступ к директориям, где CMS или приложение сохраняет данные.

# Перейдите в корневую директорию сайта
cd /var/www/html

# Установите права для всех директорий, чтобы веб-сервер мог записывать в них файлы
sudo find . -type d -exec chmod 755 {} \;

# Установите права для всех файлов, чтобы веб-сервер мог их читать и записывать
sudo find . -type f -exec chmod 644 {} \;

# Назначьте владельцем всех файлов и директорий пользователя веб-сервера (например, www-data)
sudo chown -R www-data:www-data .

Эти команды сделают все файлы доступными для чтения и записи веб-сервером, а также откроют доступ для записи в нужные директории. Так мы облегчим серверу его нелёгкую задачу!

Шаг 2. Перезапуск веб-сервера

После изменения прав возможно потребуется перезапустить веб-сервер, чтобы он «забыл» о старых настройках и подружился с новыми.

sudo systemctl restart apache2  # Если используете Apache
sudo systemctl restart nginx    # Если используете Nginx

Шаг 3. Дополнительные проверки: SELinux или AppArmor

Если ошибка осталась, не сдавайтесь! Возможно, SELinux или AppArmor (если они включены) также блокируют доступ к файлам. Для быстрой проверки можно временно отключить SELinux:

# Для временного отключения SELinux (только для тестирования)
sudo setenforce 0

Если после отключения всё заработало — значит, дело в политике SELinux; тогда правильнее настроить контексты или правила, а не оставлять SELinux выключенным. На постоянной основе отключать его не рекомендуется.


Сценарий 2: Permission denied при запуске скрипта (./script)

Если при запуске скрипта командой ./script.sh появляется Permission denied, значит у файла нет права на выполнение. Система разрешает запускать программу по имени только если у неё установлен бит выполнения (x).

Решение: выдать право на выполнение файла:

chmod +x script.sh
./script.sh

Либо запускать скрипт явно через интерпретатор (тогда бит выполнения не обязателен):

bash script.sh

Сценарий 3: Permission denied при использовании sudo

Иногда даже команда с sudo завершается с Permission denied. Такое бывает в нескольких случаях.

Пользователь не входит в группу sudo (wheel). Проверьте группу и при необходимости добавьте пользователя:

# Проверить группы пользователя
groups

# Добавить пользователя в группу wheel (от имени root или через другого администратора)
sudo usermod -aG wheel имя_пользователя

После смены группы нужно выйти из сессии и зайти снова (или перезагрузиться).

Команда или скрипт помечены как недопустимые в sudoers. Тогда система намеренно отказывает в выполнении даже с sudo. Проверьте правила в /etc/sudoers (лучше через visudo) и при необходимости добавьте нужную команду или снимите ограничение для данного пользователя.

Файл или каталог принадлежат root и не имеют прав на чтение/запись для других. В этом случае отказ в доступе выдаёт не sudo, а ядро при обращении к файлу. Здесь нужно поправить владельца или права (chown, chmod), как в сценарии с веб-сервером.


Кратко о правах доступа

Чтобы увереннее разбираться с Permission denied, полезно помнить основы:

  • Владелец и группа задаются командой chown, например: chown user:group файл.
  • Права задаются командой chmod: три цифры — владелец, группа, остальные. Например, 755 — владелец может всё (rwx), группа и остальные — чтение и выполнение (r-x); 644 — владелец читает и пишет, остальные только читают.
  • Для директорий бит выполнения (x) нужен, чтобы войти в каталог и обратиться к файлам внутри него. Без него будет «Permission denied» при cd или при обращении к файлам по пути.

Пробуйте, тестируйте и возвращайтесь сюда за новыми инструкциями, если возникнут сложности!