Что означает ошибка Permission denied
Когда вы вводите команду в Terminal на macOS и получаете сообщение «Permission denied» (или «Доступ запрещён»), система сообщает, что выполнение команды заблокировано из-за отсутствия необходимых прав. Ошибка обычно сопровождается кодом выхода 1. Это происходит, когда:
- исполняемый файл не имеет права на выполнение,
- скрипт загружен из ненадёжного источника и macOS блокирует его,
- команда требует привилегированных прав (доступа администратора), но запущена без
sudo, - настройки безопасности Terminal ограничивают автоматизацию или запуск скриптов.
Причины возникновения
- Недостаток прав выполнения у файла или скрипта (
chmod). - Отсутствие прав администратора для системных команд (например,
brew,npm,docker). - Сбой в настройках безопасности (Gatekeeper, System Integrity Protection).
- Повреждённые или неправильно настроенные разрешения на файлы или каталоги.
- Запуск скрипта без предварительной проверки его исходного кода.
Способы решения
Способ 1: Исправьте права доступа к файлу
- Проверьте текущие права доступа с помощью
ls -l /path/to/file. - Если для пользователя отсутствует флаг x, выполните
chmod +x /path/to/file. - Убедитесь, что скрипт теперь можно запустить напрямую:
./script.sh.
# Пример: проверка и исправление прав доступа
ls -l /Users/username/Downloads/script.sh
chmod +x /Users/username/Downloads/script.sh
./script.sh
Способ 2: Используйте sudo для команд с привилегиями
- Определите команду, которая требует прав администратора (например,
brew install …). - Добавьте префикс
sudo:sudo command. - Введите пароль администратора, когда будет запрошен ввод.
# Пример: установка Homebrew с правами администратора
sudo brew install wget
Способ 3: Проверьте настройки безопасности Terminal
- Откройте Системные настройки → Безопасность и конфиденциальность → Конфиденциальность → Автоматизация.
- Убедитесь, что Terminal отмечен галочкой рядом с нужным приложением или скриптом.
- Если флажок отсутствует, добавьте приложение, чтобы разрешить автоматизацию.
💡 Совет: Разрешение автоматизации предотвращает блокировку скриптов системой безопасности при запуске из Terminal.
Способ 4: Переустановите приложение или переустановите повреждённые разрешения
- Удалите проблемное приложение (через Trash).
- Используйте Переустановить в Приложения → Утилиты → First Aid (если доступно) или переустановите пакет через
brew reinstall. - Проверьте права доступа снова с помощью
ls -l.
# Пример: переустановка через Homebrew
brew reinstall node
Способ 5: Используйте sudo для изменения владельца или группы файла
- Определите правильного владельца (обычно ваш пользователь) с помощью
whoami. - Измените владельца с помощью
sudo chown username:username /path/to/file. - Проверьте права доступа:
ls -l /path/to/file.
# Пример: изменение владельца файла
sudo chown $(whoami):$(whoami) /path/to/file
Профилактика
- Проверяйте права доступа после скачивания скриптов:
chmod +x filename. - Используйте
sudoдля всех команд, которые изменяют систему (установка пакетов, изменение конфигураций). - Обновляйте macOS и установленные приложения, чтобы устранить уязвимости.
- Настройте Gatekeeper в Системных настройках → Безопасность и конфиденциальность → Общие, чтобы разрешить запуск только доверенного ПО.
- Проверяйте безопасность скриптов перед их запуском; избегайте запуска неизвестных исходников.
- Ведите журнал команд (
syslog,loginitems) для отслеживания ошибок доступа.
Если ни один из способов не помог, ошибка может быть связана с более глубокой проблемой, например, с SIP (System Integrity Protection) или сбоем диска. В этом случае используйте fsck или обратитесь в поддержку Apple.