macOS EACCESСредняя

Ошибка Permission Denied на macOS: причины и 5 способов исправить

Статья объясняет, почему macOS блокирует доступ к файлам или папкам с ошибкой «Permission denied», и предлагает пять проверенных способов восстановить права: от простого использования sudo до настройки System Integrity Protection.

Низкая

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

Ошибка Permission Denied (или Operation not permitted) в macOS сигнализирует, что текущий пользователь или процесс не имеет необходимых прав для выполнения операции с файлом, папкой или системным ресурсом. Текст ошибки может варьироваться:

# В Terminal
zsh: permission denied: ./script.sh
rm: everest.txt: Permission denied

# В приложении (например, при копировании)
«Невозможно выполнить операцию», так как у вас недостаточно прав доступа к «имя_файла».

Она возникает при попытке:

  • Запуска скрипта или программы без флага +x.
  • Удаления/изменения системного или чужого файла.
  • Доступа к защищённой системой папке (например, /System, /usr).
  • Записи на диск только для чтения (например, CD-ROM или заблокированный образ).

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

  1. Недостаточные права текущего пользователя
    Файл принадлежит другому пользователю (например, root) или группе, и у вашего аккаунта нет прав на запись/исполнение.
  2. Активированный System Integrity Protection (SIP)
    SIP защищает системные каталоги (/System, /usr, /bin, /sbin) и некоторые файлы в /Library от модификации, даже для пользователя root.
  3. Повреждённые или устаревшие ACL (Access Control Lists)
    macOS использует ACL для детального управления доступом. Если ACL конфликтует с базовыми правами (chmod), система может блокировать доступ.
  4. Файл имеет флаг «immutable» или «append-only»
    Через chflags можно установить флаги uchg (user immutable) или schg (system immutable), которые запрещают любые изменения.
  5. Файловая система только для чтения
    Диск смонтирован в режиме «только чтение» (например, внешний NTFS-накопитель без поддержки записи или повреждённый APFS-том).

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

Если ошибка возникает при работе с системными файлами или файлами другого пользователя, используйте sudo (Super User Do). Эта команда выполняет операцию от имени администратора.

Шаги:

  1. Откройте Terminal (Приложения → Утилиты → Terminal).
  2. Перед командой, вызывающей ошибку, добавьте sudo. Например:
    sudo rm /path/to/file.txt
    sudo cp source.txt /System/Library/
    
  3. Введите пароль вашего аккаунта (символы не отображаются — это нормально).
  4. Нажмите Enter.

⚠️ Важно: sudo даёт полный доступ. Убедитесь, что команда и путь верны, чтобы случайно не удалить системные файлы.

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

Команда chmod (change mode) меняет права доступа (чтение r, запись w, выполнение x) для владельца, группы и остальных.

Шаги:

  1. Определите текущие права:
    ls -la /path/to/file
    
    Пример вывода: -rw-r--r-- 1 user staff 1234 Feb 16 10:00 file.txt
  2. Добавьте право на выполнение (если нужно запустить скрипт):
    chmod +x /path/to/file.sh
    
  3. Установите стандартные права (владелец: чтение+запись+выполнение, группа/остальные: чтение+выполнение):
    chmod 755 /path/to/file
    
    Цифры соответствуют: 7=rwx, 5=r-x, 5=r-x.
  4. Для полного доступа всем (осторожно!):
    chmod 777 /path/to/file
    

Способ 3: Смена владельца через chown

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

Шаги:

  1. Узнайте текущего владельца:
    ls -la /path/to/file
    
    Владелец указан во второй колонке.
  2. Смените владельца на текущего пользователя:
    sudo chown $USER /path/to/file
    
    $USER автоматически подставляет ваше имя пользователя macOS.
  3. Для смены группы (например, на staff):
    sudo chown :staff /path/to/file
    
  4. Для рекурсивного изменения (все файлы в папке):
    sudo chown -R $USER /path/to/folder/
    

Способ 4: Отключение System Integrity Protection (SIP) для системных файлов

Если ошибка возникает при доступе к защищённым SIP-папкам (например, /System/Library/LaunchDaemons), временно отключите SIP. Используйте только если другие методы не помогли!

Шаги:

  1. Перезагрузите Mac в Recovery Mode:
    Для Mac с Apple Silicon: зажмите кнопку питания → «Параметры загрузки» → «Продолжить в режиме восстановления».
    Для Intel: перезагрузите и удерживайте Cmd + R.
  2. Откройте Terminal из меню «Утилиты».
  3. Отключите SIP:
    csrutil disable
    
  4. Перезагрузите Mac в обычном режиме.
  5. Выполните нужную операцию (изменение/удаление файла).
  6. Обязательно верните SIP:
    • Снова зайдите в Recovery Mode.
    • Выполните csrutil enable.
    • Перезагрузитесь.

💡 Совет: После отключения SIP проверьте целостность системных файлов через sudo /usr/libexec/repair_packages --repair --standard-pkgs --volume /.

Способ 5: Сброс ACL и флагов файла

Повреждённые ACL или флаги (например, uchg) могут блокировать доступ даже при правильных chmod/chown.

Шаги:

  1. Проверьте ACL:
    ls -le /path/to/file
    
    Если вывод содержит строки с 0:, 1: — это ACL-записи.
  2. Удалите все ACL (сброс к стандартным правам):
    sudo chmod -N /path/to/file
    
  3. Проверьте и удалите флаги (schg, uchg, sappnd и др.):
    ls -lO /path/to/file
    
    Флаги отображаются после колонки с правами (например, schg).
  4. Снимите флаги:
    sudo chflags nouchg /path/to/file  # удалить user immutable
    sudo chflags noschg /path/to/file  # удалить system immutable
    
  5. Для массового сброса флагов в папке:
    sudo chflags -R nouchg /path/to/folder/
    

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

  • Избегайте sudo без необходимости. Запускайте команды от обычного пользователя, если это возможно.
  • Проверяйте права при копировании файлов между разными дисками/системами (Windows → macOS). После копирования устанавливайте корректные права через chmod.
  • Не отключайте SIP постоянным образом. Используйте его только для разовых операций, затем включайте обратно.
  • Регулярно проверяйте ACL на важных системных папках, особенно после установки ПО из ненадёжных источников: ls -le /path.
  • Используйте графические утилиты (например, Get Info в Finder или BatChmod) для визуального управления правами, если не уверены в командах.
  • Резервное копирование перед изменением прав системных файлов через Time Machine или cp -a.

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

Чем отличается chmod от chown при исправлении Permission Denied?
Можно ли полностью отключить System Integrity Protection (SIP) для доступа к системным файлам?
Есть ли графический способ исправить Permission Denied без Terminal?
Почему после копирования файлов с Windows на Mac возникает Permission Denied?

Полезное

Определите точный контекст ошибки
Проверьте текущие права и владельца
Используйте sudo для временного повышения прав
Измените права доступа через chmod
Измените владельца файла через chown