Linux EACCESВысокая

Как исправить Permission Denied в Ubuntu: причины и решения

Ошибка 'Permission denied' возникает из-за недостатка прав доступа в Ubuntu. В этой статье вы узнаете, как диагностировать проблему и исправить её с помощью chmod, chown, sudo и других инструментов.

Обновлено 17 февраля 2026 г.
5-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04 LTSUbuntu 22.04 LTSUbuntu 24.04 LTSLinux (general)

Что означает ошибка Permission Denied

Ошибка Permission denied (EACCES) в Ubuntu возникает, когда процесс пытается получить доступ к файлу или каталогу, но у текущего пользователя недостаточно прав. Текст ошибки в терминале обычно выглядит так:

bash: /путь/к/файлу: Permission denied

Или при выполнении команды:

ls: cannot open directory 'защищённый_каталог': Permission denied

Эта ошибка может появиться при попытке чтения, записи, удаления или выполнения файла, а также при доступе к сетевым ресурсам или устройствам.

Причины возникновения

Ошибка Permission denied имеет конкретные технические причины. Вот наиболее частые:

  1. Файл принадлежит другому пользователю — вы не являетесь владельцем файла, и права для "others" не разрешают ваш тип доступа (чтение/запись/выполнение).
  2. Группа файла не включает вашу группу — если вы не в группе-владельце, а права для "group" недостаточны.
  3. Права для "others" запрещены — даже если вы не в группе, права для остальных пользователей могут быть нулевыми.
  4. Родительский каталог недоступен — для входа в каталог нужны права на выполнение (x) у всех каталогов в пути. Если хотя бы один каталог запрещает выполнение, доступ к файлу блокируется.
  5. Файловая система смонтирована с опциями noexec, nosuid, nodev — например, если раздел смонтирован как noexec, выполнение любых файлов на нём запрещено.
  6. AppArmor или SELinux ограничивают доступ — в Ubuntu по умолчанию включён AppArmor, который может запрещать приложению доступ к определённым файлам даже при наличии стандартных прав.
  7. Файл открыт в монопольном режиме или заблокирован другим процессом (например, через flock).
  8. Попытка записи в файл, открытый только для чтения — даже если у вас есть права на запись, если файл открыт другим процессом с флагом O_RDONLY, запись может быть отклонена.
  9. Использование sudo для команды, но целевой файл требует прав root, а команда выполняется без sudo — например, apt update требует sudo, но если запустить без, будет permission denied.

Способы решения

Способ 1: Использование sudo для привилегированных операций

Если ошибка возникает при выполнении системных команд (например, apt, systemctl, доступ к /etc), вам нужны права суперпользователя.

  1. Добавьте sudo перед командой:
    sudo apt update
    
  2. Введите пароль вашего пользователя (учётная запись должна быть в группе sudo). Проверить группу:
    groups $USER
    
    Если sudo нет в выводе, добавьте пользователя в группу (требует уже существующих прав root):
    sudo usermod -aG sudo $USER
    
  3. После добавления в группу перелогиньтесь или выполните newgrp sudo.

⚠️ Важно: Не используйте sudo для всех команд. Применяйте его только когда это необходимо, чтобы избежать случайных изменений в системе.

Способ 2: Изменение прав доступа с помощью chmod

Если вы являетесь владельцем файла, но у вас нет нужных прав, измените их с помощью chmod.

  1. Проверьте текущие права:
    ls -l /путь/к/файлу
    

    Пример вывода: -rw-r--r-- 1 user group 0 Feb 17 12:00 файл Здесь: владелец (user) имеет rw-, группа (group) r--, другие r--.
  2. Добавьте права для владельца (u), группы (g) или других (o). Например, дать владельцу право на выполнение:
    chmod u+x /путь/к/файлу
    

    Или дать группе право на запись:
    chmod g+w /путь/к/файлу
    
  3. Используйте числовой режим для быстрой настройки:
    chmod 755 /путь/к/файлу   # владелец: rwx, группа и другие: r-x
    chmod 644 /путь/к/файлу   # владелец: rw-, группа и другие: r--
    
  4. Для каталогов обязательно включайте право на выполнение (x), иначе в них нельзя войти:
    chmod u+rx /путь/к/каталогу
    

Способ 3: Смена владельца с помощью chown

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

  1. Проверьте текущего владельца:
    ls -ld /путь/к/файлу
    
  2. Смените владельца на текущего пользователя (требует sudo):
    sudo chown $USER /путь/к/файлу
    

    Здесь $USER — переменная среды с именем вашего пользователя.
  3. Для рекурсивного изменения всех файлов в каталоге:
    sudo chown -R $USER /путь/к/каталогу
    
  4. Можно изменить и группу одновременно:
    sudo chown $USER:$USER /путь/к/файлу   # владелец и группа станут $USER
    
  5. Если нужно, чтобы группа осталась прежней, а владелец изменился:
    sudo chown новый_пользователь: /путь/к/файлу
    

Способ 4: Настройка групповых прав и добавление в группу

Для общих каталогов (например, /var/www или /home/shared) часто используют групповые права.

  1. Установите групповые права на каталог:
    sudo chgrp developers /путь/к/каталогу   # сменить группу на 'developers'
    sudo chmod 2775 /путь/к/каталогу        # setgid bit: новые файлы наследуют группу
    
  2. Добавьте вашего пользователя в группу:
    sudo usermod -aG developers $USER
    
  3. Перелогиньтесь или выполните newgrp developers для применения в текущей сессии.
  4. Проверьте, что у пользователя есть права:
    groups $USER
    

Способ 5: Проверка и настройка AppArmor (для Ubuntu)

AppArmor может ограничивать доступ приложений к файлам, даже если стандартные права разрешены.

  1. Проверьте статус AppArmor:
    sudo apparmor_status
    

    Если в выводе есть "apparmor module is loaded", он активен.
  2. Найдите профили, которые могут влиять на проблемный файл:
    sudo aa-status | grep -i "имя_приложения"
    

    Или просмотрите профили в /etc/apparmor.d/.
  3. Временно отключите профиль для теста (не рекомендуется для production):
    sudo apparmor_parser -R /etc/apparmor.d/usr.bin.ваше_приложение
    
  4. Для постоянного решения отредактируйте профиль:
    • Откройте файл профиля (например, /etc/apparmor.d/usr.bin.ваше_приложение).
    • Добавьте правило для доступа к файлу, например:
      /путь/к/файлу rw,
      
    • Перезагрузите профиль:
      sudo systemctl reload apparmor
      
  5. Если AppArmor не виноват, проверьте SELinux (редко в Ubuntu по умолчанию):
    getenforce
    

    Если "Enforcing", посмотрите логи: sudo ausearch -m avc -ts recent.

Способ 6: Проверка опций монтирования файловой системы

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

  1. Определите точку монтирования для файла:
    df -h /путь/к/файлу
    

    Вывод покажет раздел и точку монтирования (например, /dev/sdb1 on /mnt/data).
  2. Проверьте опции монтирования:
    mount | grep /mnt/data
    

    Пример: /dev/sdb1 on /mnt/data type ext4 (rw,noexec,relatime) — здесь noexec запрещает выполнение.
  3. Если есть noexec, измените опции в /etc/fstab:
    • Отредактируйте /etc/fstab с sudo:
      sudo nano /etc/fstab
      
    • Найдите строку для раздела и уберите noexec (или замените на exec).
    • Пример изменения:
      /dev/sdb1 /mnt/data ext4 defaults 0 2
      
    • Перемонтируйте раздел:
      sudo mount -o remount /mnt/data
      
  4. Для проверки после перемонтирования:
    mount | grep /mnt/data
    

Способ 7: Проверка блокировок и аномалий

В редких случаях ошибка вызвана блокировками файлов или особенностями файловой системы.

  1. Проверьте, не заблокирован ли файл другим процессом (используется flock или fcntl):
    lsof /путь/к/файлу
    

    Если файл открыт, завершите процесс (осторожно):
    sudo kill -9 <PID>
    
  2. Для сетевых файловых систем (NFS, Samba) проверьте права на сервере и опции монтирования (например, root_squash в NFS может менять root на nobody).
  3. Проверьте атрибуты файла (например, immutable bit через chattr):
    lsattr /путь/к/файлу
    

    Если есть i (immutable), снимите атрибут:
    sudo chattr -i /путь/к/файлу
    
  4. Проверьте, достаточно ли места на диске: df -h. Иногда при нехватке места операции могут завершаться с ошибкой доступа.

Профилактика

Чтобы избежать ошибки Permission denied в будущем:

  • Настраивайте права при создании файлов — используйте umask для определения стандартных прав. Для каталогов umask 002 даёт 775, для файлов 664.
  • Используйте групповые права для общих ресурсов — создавайте группу, добавляйте пользователей, ставьте chmod 2775 на каталоги.
  • Не запускайте приложения от root без необходимости — используйте sudo только для конкретных команд, а не для оболочки.
  • Регулярно аудитируйте права — проверяйте /etc, /var, домашние каталоги на избыточные права (например, chmod 777).
  • Конфигурируйте AppArmor/SELinux осторожно — при установке нового ПО проверяйте, есть ли профили, и настраивайте их под свои нужды.
  • Избегайте монтирования с noexec для разделов, где нужно выполнять файлы (например, /tmp или /home в некоторых сценариях).

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

Почему возникает ошибка Permission Denied в Ubuntu?
Как исправить Permission Denied без использования sudo?
Может ли Permission Denied быть вызван антивирусом или AppArmor?
Что делать, если Permission Denied остаётся после смены прав через chmod?

Полезное

Проверьте текущие права доступа
Определите, кто вы: владелец, группа или other
Измените права с помощью chmod
Смените владельца с помощью chown
Проверьте AppArmor/SELinux
Убедитесь в правах на родительские каталоги