Linux 0x80070005Средняя

0x80070005 Permission Denied: как исправить ошибку доступа в Linux

Ошибка 0x80070005 (Permission Denied) возникает при недостаточных правах доступа к файлам или командам. В этом гайде вы узнаете, как диагностировать и решать проблемы с правами в Linux с помощью стандартных инструментов.

Обновлено 14 февраля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 11+CentOS 8+Все дистрибутивы Linux

Причины ошибки Permission Denied в Linux

Ошибка Permission Denied (в некоторых случаях с кодом 0x80070005, особенно в WSL или Wine) возникает, когда процесс не имеет достаточных прав для доступа к файлу, каталогу или системному ресурсу. В Linux это одна из самых частых проблем, связанных с управлением доступом.

Основные причины:

  1. Недостаточные права пользователя — вы пытаетесь изменить системный файл от обычного пользователя.
  2. Неправильные права файла — например, файл имеет права -rw-------, и вы не являетесь владельцем.
  3. Файловая система смонтирована с опциями noexec, nosuid или ro — запрещает выполнение, смену владельца или запись.
  4. Файл заблокирован другим процессом — особенно актуально для исполняемых файлов или библиотек.
  5. Нехватка места или inodes на диске — система не может создать временные файлы.
  6. ** SELinux/AppArmor** — политики безопасности могут блокировать доступ даже при правильных правах.

⚠️ Важно: Код 0x80070005 — это Windows-код ошибки ERROR_ACCESS_DENIED. В Linux аналогичная ошибка имеет код EACCES (13) и обычно выводится как строка "Permission denied". Если вы видите именно 0x80070005, скорее всего, работаете в WSL, Wine или через SSH-клиент Windows.

Основные способы решения

1. Проверка текущих прав и владельца

Первым делом нужно понять, кто имеет доступ к файлу и какие права установлены.

ls -l /путь/к/файлу

Пример вывода:

-rwxr-xr-- 1 root www-data 1234 Feb 14 12:00 script.sh

Расшифровка:

  • - — тип файла (дефис = обычный файл)
  • rwx — права владельца (чтение, запись, выполнение)
  • r-x — права группы (чтение, выполнение)
  • r-- — права остальных (только чтение)
  • root — владелец
  • www-data — группа

Если вы не владелец и не входите в группу, а права для "остальных" не включают нужное действие (например, нет x для выполнения), возникнет ошибка.

2. Изменение прав доступа (chmod)

Команда chmod изменяет права доступа. Есть два способа:

Символьный режим (рекомендуется для простых случаев):

chmod u+x файл          # Добавить выполнение владельцу
chmod g+w файл          # Добавить запись группе
chmod o-r файл          # Убрать чтение у остальных
chmod a+x файл          # Добавить выполнение всем

Цифровой режим (точный контроль):

Права считаются как сумма битов: r=4, w=2, x=1. Примеры:

  • 755 = rwxr-xr-x (владелец: полные, группа/остальные: чтение+выполнение)
  • 644 = rw-r--r-- (владелец: чтение+запись, остальные: только чтение)
  • 777 = rwxrwxrwx (полные права всем — опасно!)
chmod 755 скрипт.sh    # Установить безопасные права для исполняемого файла
chmod 644 конфиг.ini   # Только владелец может изменять

Для рекурсивного изменения (все файлы в каталоге):

chmod -R 755 /var/www/html

💡 Совет: Не используйте 777 на производственных серверах. Это серьезная уязвимость безопасности.

3. Смена владельца (chown)

Если файл принадлежит другому пользователю (например, root), измените владельца:

sudo chown пользователь:группа файл

Пример:

sudo chown alice:developers project.txt

Для рекурсивной смены:

sudo chown -R alice:developers /home/alice/projects

⚠️ Важно: Не меняйте владельца системных файлов без необходимости. Это может нарушить работу программ.

4. Проверка монтирования файловой системы

Если файл находится на отдельном разделе (например, /mnt/backup), проверьте опции монтирования:

mount | grep /mnt/backup

Пример проблемного вывода:

/dev/sdb1 on /mnt/backup type ext4 (ro,noexec,relatime)

Здесь:

  • ro — только чтение (read-only)
  • noexec — запрет на выполнение файлов

Решение: Перемонтируйте с нужными опциями (требует sudo):

sudo mount -o remount,rw,exec /dev/sdb1 /mnt/backup

Чтобы изменения сохранились после перезагрузки, отредактируйте /etc/fstab:

sudo nano /etc/fstab

Измените строку, убрав ro,noexec или добавив rw,exec:

UUID=xxxx-xxxx /mnt/backup ext4 defaults,rw,exec 0 2

5. Проверка блокировки файла другим процессом

Иногда файл используется другим процессом (например, открыт в редакторе или запущен как демон). Найдите процесс:

lsof | grep файл

Пример вывода:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
vim     1234 alice  cwd    DIR  8,1     4096    2 /home/alice

Завершите процесс (если это безопасно):

kill 1234

Для принудительного завершения:

kill -9 1234

6. Проверка свободного места и inodes

Нехватка места на диске или inodes (индексовых дескрипторов) также вызывает Permission Denied.

Проверьте место:

df -h /путь/к/каталогу

Проверьте inodes:

df -i /путь/к/каталогу

Если место или inodes заканчиваются:

  • Очистите временные файлы (/tmp, кэш браузера)
  • Удалите ненужные логи (sudo journalctl --vacuum-time=3d)
  • Увеличьте размер раздела или добавьте новый диск.

7. Проверка SELinux/AppArmor (если используется)

На дистрибутивах типа RHEL/CentOS/Fedora включен SELinux, на Ubuntu — AppArmor. Они могут блокировать доступ даже при правильных правах.

Для SELinux: Проверьте контекст файла:

ls -Z файл

Если контекст не соответствует (например, у веб-файла должен быть httpd_sys_content_t), исправьте:

sudo chcon -t httpd_sys_content_t файл

Временно отключите SELinux для диагностики (не для продакшена):

sudo setenforce 0

Для AppArmor: Проверьте профили:

sudo aa-status

Если приложение в режиме enforce, попробуйте перевести в complain:

sudo aa-complain /etc/apparmor.d/usr.bin.ваше_приложение

8. Использование sudo правильно

Если команда требует прав root, используйте sudo:

sudo apt update
sudo systemctl restart nginx

Но если sudo сам не работает (например, "Permission denied" при попытке его запустить), возможно:

  • Пользователь не в группе sudo (проверьте groups)
  • Файл sudo имеет неправильные права (должен быть -rwsr-xr-x)

Проверьте права sudo:

ls -l /usr/bin/sudo

Если нет s (setuid) в правах владельца (-rwsr-xr-x), исправьте:

sudo chmod 4755 /usr/bin/sudo

Расширенные методы: ACL и capabilities

Если стандартных прав недостаточно, используйте ACL (Access Control Lists) для гибкого управления.

Установка и использование ACL

Убедитесь, что файловая система смонтирована с поддержкой ACL (обычно acl в опциях). Проверьте:

mount | grep /путь

Если нет acl, добавьте в /etc/fstab и перемонтируйте.

Установка ACL:

# Дать полный доступ пользователю alice
sudo setfacl -m u:alice:rwx файл

# Дать доступ группе developers
sudo setfacl -m g:developers:rwx файл

# Посмотреть ACL
getfacl файл

Пример вывода getfacl:

# file: файл
# owner: root
# group: root
user::rwx
user:alice:rwx
group::r-x
mask::rwx
other::r--

Capabilities для бинарников

Некоторые программы требуют особых привилегий (например, bind к портам <1024). Вместо запуска от root используйте capabilities:

# Дать программе возможность bind к привилегированным портам
sudo setcap 'cap_net_bind_service=+ep' /usr/bin/веб-сервер

Проверьте capabilities:

getcap /usr/bin/веб-сервер

Профилактика проблем с правами доступа

  1. Создавайте файлы с правильными правами по умолчанию:
    • Установите umask в ~/.bashrc (например, umask 002 для групповой записи).
    • Для каталогов: mkdir -m 775 новый_каталог.
  2. Используйте группы для совместного доступа:
    • Создайте группу: sudo groupdev разработчики
    • Добавьте пользователей: sudo usermod -aG разработчики alice
    • Назначьте группу каталогу: sudo chgrp разработчики /proj
    • Установите SGID для каталога: chmod 2775 /proj (новые файлы будут наследовать группу).
  3. Регулярно аудитируйте права:
    • Найдите файлы с SUID/SGID: find / -type f -perm -4000 -o -perm -2000 2>/dev/null
    • Найдите файлы, доступные всем: find / -type f -perm -o=w 2>/dev/null
  4. Настройте правильный контекст SELinux/AppArmor для сервисов.
  5. Не запускайте приложения от root без необходимости — используйте sudo только для конкретных команд.

Дополнительные ресурсы

Для углубленного изучения:

  • man chmod, man chown, man acl, man selinux
  • Официальная документация вашего дистрибутива (Ubuntu Wiki, RHEL Documentation)
  • Статья "Understanding Linux File Permissions" на kernel.org

Часто задаваемые вопросы

Что означает ошибка 0x80070005 в Linux?
Как быстро дать права на выполнение файла в Linux?
Почему даже с sudo команда не работает?
Можно ли полностью отключить проверку прав доступа в Linux?

Полезное

Определите текущие права доступа
Измените права доступа с помощью chmod
Смените владельца файла при необходимости
Проверьте, не заблокирован ли файл другим процессом
Убедитесь в доступности диска и inodes
Перезапустите приложение или службу