Что означает ошибка EACCES (Permission denied)
Ошибка Permission denied (системный код EACCES) сообщает, что ядро Linux заблокировало вашу попытку выполнить операцию с файлом, каталогом или устройством. Полный текст в терминале обычно выглядит так: bash: ./setup.sh: Permission denied, cp: cannot create regular file '/etc/app.conf': Permission denied или ls: cannot open directory '/root': Permission denied.
Сообщение появляется сразу после ввода команды, запуска скрипта или попытки открыть файл в графическом интерфейсе. Система проверяет таблицу прав доступа (inode) перед каждым обращением к диску. Если ваша учётная запись не входит в список разрешённых пользователей или групп, операция прерывается мгновенно. Это базовый механизм безопасности Debian, предотвращающий случайное или злонамеренное изменение данных.
Причины возникновения
- Отсутствие флага выполнения (
x) у скачанных скриптов, бинарников или Python-файлов. - Попытка записать данные в системные директории (
/etc,/var/log,/usr/local,/sys), которые по умолчанию доступны только для чтения обычным пользователям. - Файл принадлежит
rootили другому пользователю, а вы работаете под стандартной учётной записью. - Раздел смонтирован с флагом
noexec(часто встречается на внешних USB-накопителях, в/tmpили при использовании политик безопасностиfstab). - Конфликт с мандатными политиками безопасности (SELinux, AppArmor), которые ограничивают доступ на уровне контекста процесса, даже если стандартные права
rwxвыставлены верно.
Способы решения
Способ 1: Добавление прав на выполнение скрипта
Если терминал выдаёт ошибку при попытке запустить .sh, .py или скомпилированный файл, системе нужно явно разрешить его исполнение.
- Откройте терминал и перейдите в каталог с файлом:
cd ~/загрузки - Проверьте текущие метаданные:
Вы увидите что-то вродеls -l скрипт.sh-rw-r--r--. Флагxотсутствует. - Добавьте разрешение на выполнение:
chmod +x скрипт.sh - Запустите файл, указав относительный путь:
./скрипт.sh
💡 Совет: Если файл содержит некорректные окончания строк (CRLF вместо LF), Bash всё равно может отказать в запуске с похожей ошибкой. Конвертируйте файл через
dos2unix скрипт.shперед выполнениемchmod.
Способ 2: Смена владельца ресурсов
Часто ошибка возникает при работе с проектами, скопированными из архива или созданными от имени root через sudo cp. Верните права вашему аккаунту.
sudo chown -R $USER:$USER /путь/к/рабочей/папке
Команда рекурсивно (-R) изменит владельца и группу на вашу текущую учётную запись. Переменная $USER автоматически подставит имя текущего пользователя, поэтому вам не нужно вводить его вручную. После этого любые программы, запущенные из-под вашего профиля, получат полный доступ к содержимому.
Способ 3: Временное повышение привилегий через sudo
Иногда доступ к файлу действительно требует прав администратора (например, редактирование конфигураций сетевых сервисов или лог-файлов). Используйте sudo только для конкретной команды, а не для запуска целой оболочки.
sudo nano /etc/nginx/nginx.conf
Если вам нужно скопировать файл в защищённую директорию, укажите полный путь или используйте sudo tee, чтобы избежать проблем с перенаправлением вывода:
echo "новое_значение=1" | sudo tee -a /etc/sysctl.conf
Способ 4: Проверка флагов монтирования раздела
Внешние диски или специальные директории могут монтироваться с ограничением noexec, которое запрещает запуск любых программ независимо от chmod.
- Проверьте параметры текущего раздела:
Если в выводе присутствуетmount | grep /media/ваш_дискnoexec, запуск файлов будет заблокирован. - Перемонтируйте раздел с флагом
exec(требует правroot):sudo mount -o remount,exec /media/ваш_диск - Для постоянного решения отредактируйте
/etc/fstab, заменивnoexecнаexecв строке с нужным UUID, и выполнитеsudo mount -a.
⚠️ Важно: Включение флага
execна съёмных носителях снижает безопасность. Не запускайте файлы с неизвестным происхождением и используйте этот метод только для доверенных устройств.
Профилактика
- Храните пользовательские проекты, скрипты и загрузки исключительно в домашней директории (
~/), где Debian автоматически назначает вас владельцем. - Добавляйте свою учётную запись в специализированные группы вместо использования постоянного
sudo. Например, для доступа к Docker выполнитеsudo usermod -aG docker $USER, а для управления принтерами —sudo usermod -aG lpadmin $USER. - Проверяйте настройки монтирования внешних накопителей в
/etc/fstab. Указывайтеuid=1000,gid=1000,execдля дисков, которые вы используете для разработки. - Регулярно сканируйте рабочие директории на наличие файлов с подозрительными правами:
find ~ -type f -perm -o+wпокажет объекты, доступные для записи всем пользователям, что требует немедленного ограничения черезchmod go-w.