Что означает ошибка Permission denied
Ошибка Permission denied (отказано в доступе) — это стандартное сообщение об ошибке в Linux, которое сигнализирует о том, что у текущего пользователя недостаточно прав для выполнения запрошенной операции с файлом или директорией. В системном коде ошибки она соответствует коду EACCES (Error Access).
Типичные сообщения, которые вы можете увидеть:
bash: ./script.sh: Permission denied
bash: /var/www/index.html: Permission denied
cp: cannot create regular file '/root/file': Permission denied
Ошибка возникает при попытках:
- Запустить исполняемый файл без бита выполнения (x)
- Записать данные в файл или директорию без права записи (w)
- Прочитать файл без права чтения (r)
- Изменить права или владельца файла без прав суперпользователя
Причины возникновения
- Отсутствие бита выполнения — файл не помечен как исполняемый. Особенно часто встречается при запуске скачанных скриптов.
- Недостаточные права на файл — файл имеет права
r--илиr-x, а требуется запись. - Файл принадлежит другому пользователю — даже при правах 777 доступ может быть ограничен SELinux или AppArmor.
- Нет доступа к родительской директории — система проверяет права на все директории по пути к файлу.
- Файловая система смонтирована только для чтения — например, DVD-диск или раздел с опцией
ro. - Ограничения SELinux/AppArmor — в CentOS и Ubuntu могут блокировать доступ даже при корректных правах.
- Попытка работы с системными файлами — файлы в
/etc,/var,/rootтребуют прав root.
Способы решения
Способ 1: Проверка и изменение прав доступа (chmod)
首先 определите текущие права на файл:
ls -la /путь/к/файлу
Для обычных файлов установите права на чтение и запись:
chmod 644 /путь/к/файлу
Для исполняемых файлов и скриптов:
chmod +x /путь/к/скрипту.sh
chmod 755 /путь/к/скрипту.sh
Для директорий, где нужно создавать файлы:
chmod 755 /путь/к/директории
💡 Совет: Права 755 означают полный доступ для владельца и чтение/выполнение для остальных. Права 777 дают полный доступ всем, но не рекомендуются по соображениям безопасности.
Способ 2: Смена владельца файла (chown)
Если файл принадлежит другому пользователю, измените владельца:
# Смена владельца и группы
sudo chown пользователь:группа /путь/к/файлу
# Смена только владельца
sudo chown пользователь /путь/к/файлу
# Рекурсивно для директории
sudo chown -R пользователь:группа /путь/к/директории
Например, чтобы передать права на веб-сервер:
sudo chown -R www-data:www-data /var/www/html
Способ 3: Использование sudo для временного повышения прав
Для одноразового выполнения команды с правами суперпользователя добавьте sudo:
sudo ./script.sh
sudo cp source.txt /etc/config.conf
sudo nano /etc/hosts
При первом использовании система запросит пароль. Если ваш пользователь не добавлен в группу sudo, см. Способ 5.
Способ 4: Добавление пользователя в группу sudo
Если вы получаете ошибку «user is not in the sudoers file», необходимо добавить вашего пользователя в группу sudo:
# Для Debian/Ubuntu/Mint
sudo usermod -aG sudo имя_пользователя
# Для CentOS/RHEL
sudo usermod -aG wheel имя_пользователя
После этого потребуется перелогин или выполнение:
newgrp sudo # для Ubuntu
newgrp wheel # для CentOS
Способ 5: Проверка и исправление ограничений SELinux
В дистрибутивах на базе Red Hat (CentOS, Fedora, RHEL) причиной ошибки могут быть политики SELinux. Проверьте текущий режим:
getenforce
Если установлен режим Enforcing, временно переключите на Permissive для диагностики:
sudo setenforce 0
⚠️ Важно: Отключение SELinux — временная мера для диагностики. Для постоянного решения настройте правильные контексты SELinux:
sudo chcon -R -t httpd_sys_content_t /var/www/html
Профилактика
Чтобы избежать ошибок Permission denied в будущем:
- Работайте в своей домашней директории — файлы в
~/автоматически принадлежат вам с полными правами. - Проверяйте права перед скачиванием скриптов — всегда добавляйте бит выполнения через
chmod +xпосле загрузки. - Используйте виртуальные окружения для Python-проектов, чтобы избежать конфликтов с системными правами.
- Не запускайте приложения от root без необходимости — это создаёт файлы с владельцем root, к которым у обычного пользователя нет доступа.
- Изучите базовые права доступа: чтение (r=4), запись (w=2), выполнение (x=1). Суммируйте их: 7 = полные права, 6 = чтение+запись, 5 = чтение+выполнение.