Ошибка command not allowed появляется в терминале, когда система блокирует выполнение команды из-за ограничений прав доступа, политик безопасности или настроек конкретной оболочки. В отличие от «command not found» (команда не найдена), здесь команда существует, но её запуск запрещён — и это принципиально разные ситуации, требующие разных решений.
Сообщение встречается в macOS, Linux, на сетевом оборудовании (маршрутизаторы, коммутаторы), в SSH-сессиях и в некоторых приложениях со встроенной командной строкой. Точная формулировка и причина зависят от среды, поэтому первый шаг — определить, где именно возникла ошибка.
Где возникает ошибка command not allowed
Чаще всего с этим сообщением сталкиваются в четырёх сценариях. Во-первых, в терминале macOS при запуске утилит, заблокированных системой защиты. Во-вторых, в Linux при работе через ограниченную оболочку rbash или при политиках sudo, запрещающих конкретные команды. В-третьих, на сетевом оборудовании, где у учётной записи недостаточный уровень привилегий. В-четвёртых, в SSH-сессиях с принудительными ограничениями через authorized_keys или ForceCommand.
Обратите внимание на точный текст ошибки и контекст её появления. Формулировки вроде command not allowed, operation not permitted и permission denied указывают на разные механизмы блокировки, и путать их не стоит.
Command not allowed означает, что команда существует, но система намеренно запрещает её выполнение — искать нужно ограничение прав, а не отсутствующий файл.
Проверка прав доступа и sudo
Наиболее частая причина — команда требует привилегий, которых у текущей сессии нет. Проверьте, не предназначена ли она для запуска через sudo:
sudo ваша_команда
Если после sudo появляется сообщение вида user is not allowed to execute, значит, администратор ограничил список разрешённых команд в файле sudoers. В этом случае самостоятельно обойти ограничение нельзя — нужно обратиться к администратору системы или, если это ваш компьютер, проверить конфигурацию через sudo visudo.
Также убедитесь, что у исполняемого файла выставлен бит запуска. Проверить права можно командой ls -l путь_к_файлу, а при необходимости добавить право на исполнение:
chmod +x путь_к_файлу
☑️ Базовая диагностика command not allowed
Ограниченная оболочка и политики безопасности
Если вы работаете на сервере или корпоративной машине, ваша оболочка может быть ограниченной — например, rbash (restricted bash). В таком режиме запрещены смена каталога через cd, запуск команд с указанием пути и перенаправление вывода. Проверить тип оболочки можно командой echo $SHELL или echo $0.
⚠️ Внимание: попытки обойти ограниченную оболочку или политики sudo на чужом или корпоративном сервере могут нарушать правила организации и привести к блокировке учётной записи. Согласуйте расширение прав с администратором.
В macOS дополнительный слой защиты обеспечивают Gatekeeper и SIP (System Integrity Protection). Если система блокирует запуск утилиты от неустановленного разработчика, проверьте раздел безопасности в системных настройках — при наличии соответствующего пункта там появится предложение разрешить запуск. Точное расположение настройки зависит от версии macOS, поэтому сверяйтесь с документацией Apple для вашей версии.
Ошибка на сетевом оборудовании и в SSH
На маршрутизаторах и коммутаторах (Cisco, MikroTik и других) сообщение о запрете команды обычно означает недостаточный уровень привилегий учётной записи. Многие устройства разделяют режимы: просмотр конфигурации доступен всем, а изменение настроек — только после перехода в привилегированный режим, например через команду enable на оборудовании Cisco. Набор доступных команд и синтаксис различаются между вендорами и моделями, поэтому ориентируйтесь на официальную документацию конкретного устройства.
В SSH-сессиях администратор может принудительно ограничить набор команд через параметр command= в файле authorized_keys или директиву ForceCommand в конфигурации сервера. Тогда любая команда, кроме разрешённой, будет отклонена. Это штатное поведение, а не сбой — например, так настраивают доступ только для резервного копирования.
Если ошибка возникает только по SSH, но та же команда работает в локальной консоли сервера — почти наверняка дело в ограничениях SSH-конфигурации, а не в самой команде.
Сравнение похожих ошибок терминала
Правильная диагностика начинается с отличия похожих сообщений. Каждое указывает на свой механизм блокировки:
| Сообщение | Что означает | Куда смотреть |
|---|---|---|
| command not found | Команда не найдена в PATH | Установка пакета, переменная PATH |
| command not allowed | Команда запрещена политикой или оболочкой | sudoers, rbash, привилегии |
| permission denied | Нет прав на файл или действие | Права файла, владелец, chmod |
| operation not permitted | Блокировка на уровне системы | SIP, флаги файлов, capabilities |
| user is not in the sudoers file | Учётная запись не имеет прав sudo | Администратор, настройка sudoers |
Как видно, command not allowed почти всегда указывает на намеренно настроенное ограничение, а не на случайный сбой. Поэтому «лечится» она не переустановкой, а изменением прав или политики.
Что делать, если ничего не помогло
Если базовые проверки не дали результата, двигайтесь от простого к сложному. Сначала уточните, чья это система: на рабочем или арендованном сервере расширение прав решается только через администратора или поддержку хостинга. На собственном устройстве проверьте системные журналы — в Linux это journalctl или логи в /var/log/, в macOS — приложение «Консоль». Записи о блокировке часто содержат точную причину запрета.
⚠️ Внимание: не отключайте SIP в macOS и не правьте sudoers «вслепую», добавляя себе полные права без понимания последствий. Эти механизмы защищают систему от необратимых повреждений, а ошибка в sudoers способна полностью лишить вас административного доступа.
Как посмотреть разрешённые команды sudo
Выполните команду sudo -l — система покажет список команд, которые вашей учётной записи разрешено запускать через sudo. Если нужной команды в списке нет, её сможет добавить только администратор через visudo.
Если ошибка появляется внутри конкретного приложения со встроенной командной строкой (например, в СУБД, системах мониторинга или CLI-утилитах), изучите документацию этого приложения: многие из них имеют собственную модель ролей, где команды открываются только после назначения соответствующей роли пользователю.
Диагностика строится по цепочке: точный текст ошибки → среда возникновения → права и sudo → ограничения оболочки или SSH → системные журналы.
Часто задаваемые вопросы
Чем command not allowed отличается от command not found?
Command not found означает, что система не нашла исполняемый файл команды в путях поиска. Command not allowed — что команда существует, но её выполнение запрещено политикой безопасности, настройками sudo или ограниченной оболочкой.
Можно ли обойти ошибку, добавив sudo?
Только если ваша учётная запись включена в sudoers и команда не запрещена явно. Проверить доступные права можно командой sudo -l. Если команда запрещена политикой, добавление sudo не поможет.
Почему ошибка возникает на роутере или коммутаторе?
Сетевое оборудование разграничивает уровни привилегий: часть команд доступна только в привилегированном режиме или учётным записям с повышенными правами. Порядок перехода зависит от вендора и модели — сверяйтесь с документацией устройства.
Ошибка появляется только по SSH — в чём причина?
Вероятно, администратор ограничил сессию через параметр command= в authorized_keys или директиву ForceCommand в конфигурации SSH-сервера. Это штатное ограничение, снять которое может только администратор сервера.
Опасно ли отключать SIP в macOS ради запуска команды?
Да. System Integrity Protection защищает системные файлы и процессы от изменений. Отключать её стоит только при полном понимании рисков и желательно временно, вернув защиту после выполнения задачи.