Что означает ошибка Permission Denied
Ошибка Permission Denied (или Operation not permitted) в macOS сигнализирует, что текущий пользователь или процесс не имеет необходимых прав для выполнения операции с файлом, папкой или системным ресурсом. Текст ошибки может варьироваться:
# В Terminal
zsh: permission denied: ./script.sh
rm: everest.txt: Permission denied
# В приложении (например, при копировании)
«Невозможно выполнить операцию», так как у вас недостаточно прав доступа к «имя_файла».
Она возникает при попытке:
- Запуска скрипта или программы без флага
+x. - Удаления/изменения системного или чужого файла.
- Доступа к защищённой системой папке (например,
/System,/usr). - Записи на диск только для чтения (например, CD-ROM или заблокированный образ).
Причины возникновения
- Недостаточные права текущего пользователя
Файл принадлежит другому пользователю (например,root) или группе, и у вашего аккаунта нет прав на запись/исполнение. - Активированный System Integrity Protection (SIP)
SIP защищает системные каталоги (/System,/usr,/bin,/sbin) и некоторые файлы в/Libraryот модификации, даже для пользователяroot. - Повреждённые или устаревшие ACL (Access Control Lists)
macOS использует ACL для детального управления доступом. Если ACL конфликтует с базовыми правами (chmod), система может блокировать доступ. - Файл имеет флаг «immutable» или «append-only»
Черезchflagsможно установить флагиuchg(user immutable) илиschg(system immutable), которые запрещают любые изменения. - Файловая система только для чтения
Диск смонтирован в режиме «только чтение» (например, внешний NTFS-накопитель без поддержки записи или повреждённый APFS-том).
Способ 1: Использование sudo для временного повышения прав
Если ошибка возникает при работе с системными файлами или файлами другого пользователя, используйте sudo (Super User Do). Эта команда выполняет операцию от имени администратора.
Шаги:
- Откройте Terminal (
Приложения → Утилиты → Terminal). - Перед командой, вызывающей ошибку, добавьте
sudo. Например:sudo rm /path/to/file.txt sudo cp source.txt /System/Library/ - Введите пароль вашего аккаунта (символы не отображаются — это нормально).
- Нажмите Enter.
⚠️ Важно:
sudoдаёт полный доступ. Убедитесь, что команда и путь верны, чтобы случайно не удалить системные файлы.
Способ 2: Изменение прав доступа через chmod
Команда chmod (change mode) меняет права доступа (чтение r, запись w, выполнение x) для владельца, группы и остальных.
Шаги:
- Определите текущие права:
Пример вывода:ls -la /path/to/file-rw-r--r-- 1 user staff 1234 Feb 16 10:00 file.txt - Добавьте право на выполнение (если нужно запустить скрипт):
chmod +x /path/to/file.sh - Установите стандартные права (владелец: чтение+запись+выполнение, группа/остальные: чтение+выполнение):
Цифры соответствуют:chmod 755 /path/to/file7=rwx,5=r-x,5=r-x. - Для полного доступа всем (осторожно!):
chmod 777 /path/to/file
Способ 3: Смена владельца через chown
Если файл принадлежит другому пользователю (например, root), смените владельца на вашего учётного имени.
Шаги:
- Узнайте текущего владельца:
Владелец указан во второй колонке.ls -la /path/to/file - Смените владельца на текущего пользователя:
sudo chown $USER /path/to/file$USERавтоматически подставляет ваше имя пользователя macOS. - Для смены группы (например, на
staff):sudo chown :staff /path/to/file - Для рекурсивного изменения (все файлы в папке):
sudo chown -R $USER /path/to/folder/
Способ 4: Отключение System Integrity Protection (SIP) для системных файлов
Если ошибка возникает при доступе к защищённым SIP-папкам (например, /System/Library/LaunchDaemons), временно отключите SIP. Используйте только если другие методы не помогли!
Шаги:
- Перезагрузите Mac в Recovery Mode:
Для Mac с Apple Silicon: зажмите кнопку питания → «Параметры загрузки» → «Продолжить в режиме восстановления».
Для Intel: перезагрузите и удерживайтеCmd + R. - Откройте Terminal из меню «Утилиты».
- Отключите SIP:
csrutil disable - Перезагрузите Mac в обычном режиме.
- Выполните нужную операцию (изменение/удаление файла).
- Обязательно верните SIP:
- Снова зайдите в Recovery Mode.
- Выполните
csrutil enable. - Перезагрузитесь.
💡 Совет: После отключения SIP проверьте целостность системных файлов через
sudo /usr/libexec/repair_packages --repair --standard-pkgs --volume /.
Способ 5: Сброс ACL и флагов файла
Повреждённые ACL или флаги (например, uchg) могут блокировать доступ даже при правильных chmod/chown.
Шаги:
- Проверьте ACL:
Если вывод содержит строки сls -le /path/to/file0:,1:— это ACL-записи. - Удалите все ACL (сброс к стандартным правам):
sudo chmod -N /path/to/file - Проверьте и удалите флаги (
schg,uchg,sappndи др.):
Флаги отображаются после колонки с правами (например,ls -lO /path/to/fileschg). - Снимите флаги:
sudo chflags nouchg /path/to/file # удалить user immutable sudo chflags noschg /path/to/file # удалить system immutable - Для массового сброса флагов в папке:
sudo chflags -R nouchg /path/to/folder/
Профилактика
- Избегайте
sudoбез необходимости. Запускайте команды от обычного пользователя, если это возможно. - Проверяйте права при копировании файлов между разными дисками/системами (Windows → macOS). После копирования устанавливайте корректные права через
chmod. - Не отключайте SIP постоянным образом. Используйте его только для разовых операций, затем включайте обратно.
- Регулярно проверяйте ACL на важных системных папках, особенно после установки ПО из ненадёжных источников:
ls -le /path. - Используйте графические утилиты (например,
Get Infoв Finder илиBatChmod) для визуального управления правами, если не уверены в командах. - Резервное копирование перед изменением прав системных файлов через
Time Machineилиcp -a.