Ошибка Permission denied (доступ запрещён) означает, что система не разрешила выполнить действие: прочитать файл, записать в каталог или запустить программу. Причины бывают разные — от прав на файлы до настроек веб-сервера или даже ограничений для sudo. Ниже разберём типичные ситуации и что делать в каждой из них.
Сообщение Permission denied говорит о том, что у пользователя или процесса (например, веб-сервера) нет нужных прав на объект: файл или директорию. В Linux права задаются владельцем, группой и тремя действиями — чтение (r), запись (w), выполнение (x). Если нужного бита нет — система откажет в доступе и выдаст эту ошибку.
Чаще всего с этим сталкиваются, когда веб-сервер (пользователь www-data или apache) не может записывать или создавать файлы в директории сайта, например в /var/www/html. Ничего страшного! Для решения этой проблемы можно выполнить несколько простых шагов.
Чтобы веб-сервер снова обрёл нужные права, нужно убедиться, что у него есть доступ к директориям, где 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 .
Эти команды сделают все файлы доступными для чтения и записи веб-сервером, а также откроют доступ для записи в нужные директории. Так мы облегчим серверу его нелёгкую задачу!
После изменения прав возможно потребуется перезапустить веб-сервер, чтобы он «забыл» о старых настройках и подружился с новыми.
sudo systemctl restart apache2 # Если используете Apache
sudo systemctl restart nginx # Если используете Nginx
Если ошибка осталась, не сдавайтесь! Возможно, SELinux или AppArmor (если они включены) также блокируют доступ к файлам. Для быстрой проверки можно временно отключить SELinux:
# Для временного отключения SELinux (только для тестирования)
sudo setenforce 0
Если после отключения всё заработало — значит, дело в политике SELinux; тогда правильнее настроить контексты или правила, а не оставлять SELinux выключенным. На постоянной основе отключать его не рекомендуется.
Если при запуске скрипта командой ./script.sh появляется Permission denied, значит у файла нет права на выполнение. Система разрешает запускать программу по имени только если у неё установлен бит выполнения (x).
Решение: выдать право на выполнение файла:
chmod +x script.sh
./script.sh
Либо запускать скрипт явно через интерпретатор (тогда бит выполнения не обязателен):
bash script.sh
Иногда даже команда с 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 — владелец читает и пишет, остальные только читают.cd или при обращении к файлам по пути.Пробуйте, тестируйте и возвращайтесь сюда за новыми инструкциями, если возникнут сложности!