luci-app-commands: запуск shell-команд из веб-интерфейса OpenWrt

Пакет luci-app-commands решает конкретную задачу: выполнение shell-команд на роутере OpenWrt прямо из веб-интерфейса LuCI, без подключения по SSH. Если после установки пакета пункт с командами не появился в меню или кнопка запуска возвращает пустой результат, чаще всего причина в отсутствии конфигурационного файла /etc/config/luci_commands либо в том, что веб-сервер LuCI не был перезапущен после установки.

Ниже разберём установку пакета, структуру его конфигурации, типичные ошибки и меры безопасности. Материал ориентирован на стандартную сборку OpenWrt с LuCI; расположение пунктов меню может незначительно отличаться в зависимости от версии прошивки и темы оформления.

Что такое luci-app-commands и зачем он нужен

luci-app-commands — это модуль для веб-интерфейса LuCI, который позволяет заранее описать набор shell-команд и запускать их нажатием кнопки в браузере. Результат выполнения (stdout и stderr) отображается прямо на странице, что удобно для быстрой диагностики без терминала.

Типичные сценарии использования:

  • 📡 Проверка состояния сети: ping, traceroute, вывод таблицы маршрутов.
  • 🔄 Перезапуск сервисов: например, /etc/init.d/openvpn restart одной кнопкой.
  • 📊 Просмотр диагностики: logread, uptime, df -h без входа по SSH.
  • 🛠 Запуск собственных скриптов обслуживания, размещённых на роутере.

Модуль не заменяет полноценный SSH-доступ: интерактивные команды, требующие ввода во время выполнения, через него работать не будут. Он рассчитан на заранее подготовленные, предсказуемые операции.

Установка пакета

Установка выполняется стандартным менеджером пакетов opkg. Подключитесь к роутеру по SSH и обновите списки пакетов, затем установите модуль:

opkg update

opkg install luci-app-commands

После установки необходимо перезапустить веб-сервер uhttpd, иначе новый пункт меню может не появиться:

/etc/init.d/uhttpd restart

Также пакет можно найти и установить через сам LuCI: раздел System → Software, поиск по имени luci-app-commands. Перед установкой нажмите обновление списка пакетов, иначе opkg может сообщить, что пакет не найден.

⚠️ Внимание: если на роутере мало свободного места во внутренней памяти, установка пакетов может завершиться ошибкой. Проверьте свободное пространство командой df -h до начала установки.

После перезапуска веб-сервера в LuCI появляется раздел System → Custom Commands (название пункта может отличаться в зависимости от версии и перевода).

Настройка собственных команд

Команды описываются в конфигурационном файле /etc/config/luci_commands в формате UCI. Каждая запись содержит как минимум имя (отображается в интерфейсе) и саму команду. Пример структуры:

config command

option name 'Перезапуск VPN'

option command '/etc/init.d/openvpn restart'

После редактирования файла изменения обычно подхватываются при обновлении страницы LuCI; если новая команда не появилась, перезапустите uhttpd. Часть настроек доступна и через веб-интерфейс в самом разделе Custom Commands, где можно добавлять и удалять записи без правки файла вручную.

☑️ Проверка после добавления команды

Выполнено: 0 / 5

Порядок безопасной проверки новой команды такой: сначала выполните её вручную в SSH-сеансе и убедитесь, что она отрабатывает без запроса ввода и возвращает ожидаемый результат. Только после этого добавляйте её в конфигурацию LuCI. Это исключает ситуацию, когда кнопка в интерфейсе есть, а команда молча завершается с ошибкой.

Типичные ошибки и их диагностика

Самая частая жалоба — кнопка есть, но вывод пустой или появляется сообщение об ошибке. Возможные причины стоит проверять в таком порядке:

СимптомВозможная причинаЧто проверить
Пункт меню отсутствуетuhttpd не перезапущен после установкиПерезапуск /etc/init.d/uhttpd restart
Пустой вывод командыКоманда завершается с ошибкой или требует вводаРучной запуск команды через SSH
Команда не отображается в спискеСинтаксическая ошибка в UCI-файлеПроверка uci show luci_commands
Скрипт не запускаетсяНет прав на исполнениеls -l на файл скрипта, chmod +x
Ошибка доступа в LuCIОграничения ACL для пользователяПрава учётной записи в разделе System → Administration

Для диагностики полезен просмотр системного журнала командой logread сразу после нажатия кнопки: если команда падает, в логе часто видно сообщение об ошибке. Также проверьте вывод uci show luci_commands — он покажет, как система реально распарсила вашу конфигурацию, и поможет найти опечатки.

📊 Как вы используете luci-app-commands?
Быстрая диагностика сети
Перезапуск сервисов
Запуск своих скриптов
Только изучаю возможности

Безопасность при работе с командами

Каждая команда, добавленная в luci-app-commands, выполняется с правами процесса веб-интерфейса — фактически с правами root. Это означает, что любой, кто имеет доступ к LuCI, может запустить любую из описанных команд. Поэтому в конфигурацию нельзя добавлять команды с деструктивным действием без подтверждения: очистку разделов, сброс настроек, удаление файлов.

⚠️ Внимание: не открывайте веб-интерфейс LuCI в интернет и не используйте простые пароли root. В сочетании с luci-app-commands скомпрометированный доступ к LuCI равносилен полному контролю над роутером.

Разумные меры предосторожности:

  • 🔐 Ограничьте доступ к LuCI только из локальной сети или через VPN.
  • 🧾 Добавляйте в конфигурацию только команды с предсказуемым, обратимым результатом.
  • 👤 Если версия OpenWrt поддерживает разграничение прав в LuCI, выдайте доступ к разделу команд только доверенным учётным записям.
  • 📝 Проверяйте содержимое /etc/config/luci_commands после любых сторонних изменений в системе.
Почему нельзя добавлять интерактивные команды

Команды вроде passwd, top или любые скрипты, ожидающие ввода с клавиатуры, при запуске через LuCI «зависнут» или завершатся с ошибкой: у процесса нет терминала для взаимодействия. Используйте только неинтерактивные команды, а для скриптов предусмотрите неинтерактивный режим через параметры или файлы ответов.

Полезные примеры команд для повседневной диагностики

Набор команд, которые чаще всего добавляют в модуль, строится вокруг диагностики и перезапуска сервисов. Вам могут пригодиться вывод состояния интерфейсов (ifstatus wan через ubus), просмотр аренды DHCP, проверка доступности шлюза и перезапуск проблемных служб.

config command

option name 'Статус WAN'

option command 'ubus call network.interface.wan status'

При добавлении команд с пробелами и спецсимволами следите за экранированием в UCI — проще всего обернуть сложную логику в отдельный скрипт и вызывать из конфигурации именно его. Так конфигурация остаётся читаемой, а отладку вы проводите над скриптом в терминале.

Удаление пакета

Если модуль больше не нужен, удалите его стандартным способом:

opkg remove luci-app-commands

Файл конфигурации /etc/config/luci_commands при этом может остаться в системе — это нормально для opkg. Если вы планируете полностью убрать следы модуля, удалите и его, предварительно сохранив копию, если команды понадобятся позже. После удаления пакета перезапустите uhttpd, чтобы пункт меню исчез из интерфейса.

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

Почему после установки luci-app-commands пункт меню не появился?

Наиболее вероятная причина — веб-сервер uhttpd не был перезапущен. Выполните /etc/init.d/uhttpd restart и обновите страницу LuCI с очисткой кэша браузера. Также проверьте, что пакет действительно установлен: opkg list-installed | grep luci-app-commands.

Можно ли добавлять команды через веб-интерфейс, а не правкой файла?

Да, в разделе Custom Commands обычно доступно добавление и удаление записей через форму. Изменения записываются в тот же файл /etc/config/luci_commands. Точный набор доступных опций зависит от версии пакета.

Команда работает в SSH, но не работает через LuCI. Что делать?

Проверьте три вещи: не требует ли команда интерактивного ввода, корректно ли она записана в UCI (uci show luci_commands) и есть ли права на исполнение у вызываемого скрипта. Также посмотрите logread сразу после нажатия кнопки.

Безопасно ли использовать luci-app-commands на роутере с доступом из интернета?

Открывать LuCI в интернет не рекомендуется независимо от установленных модулей. С luci-app-commands риск выше: злоумышленник, получивший доступ к веб-интерфейсу, сможет выполнять подготовленные команды с правами root. Ограничьте доступ к LuCI локальной сетью или VPN.

Куда пропадает конфигурация при обновлении прошивки?

При обновлении OpenWrt с сохранением настроек файлы из /etc/config/ обычно сохраняются, но сам установленный пакет нужно ставить заново. После обновления переустановите luci-app-commands и проверьте, что конфигурация на месте и команды работают.