Я хочу создать интерфейс, аналогичный интерфейсу DSL-маршрутизатора, где вы можете редактировать сетевые настройки в браузере и перезапускать маршрутизатор с новыми настройками. Я хочу отредактировать некоторые настройки в браузере и запустить сервис systemd с помощью кнопки или чего-то подобного. Например, я хочу отправить html-форму в скрипт Python CGI, который затем изменил бы файл eth1.network и перезапустил сетевой сервис. У меня есть встроенное устройство Linux с запущенным веб-сервером Apache.

Проблема в том, что веб-пользователю Apache не разрешено запускать / останавливать системные службы, и, конечно, я не хочу, чтобы www-data запускал / останавливал системные службы.

  • Как я могу запускать / останавливать системные сервисы из браузера, не предоставляя привилегии root пользователю www-data. Я знаю, что по соображениям безопасности веб-серверу никогда не следует разрешать доступ к службам или к чему-либо вне корневой папки «var / www /».

  • Как маршрутизатор DSL выполняет это? Одно решение, которое я нашел, здесь:Безопасно ли разрешать www-данным выполнять привилегированные команды, но я не знаю, как мне это реализовать. Я был бы признателен за любое руководство или примеры.

1 ответ1

0

ЗАПРЕЩАЕТСЯ запускать привилегированные команды под открытым доступом к www-data пользователя. Это способ искать проблемы.

Вы можете использовать URL-стук для таких вещей. Вы можете создать секретный URL и на сервере постоянно следить за изменениями в файле журнала apache с помощью tail -f , который не загружает сервер, поскольку он использовал функцию inotify ядра. Таким образом, когда вы вызываете ваш секретный URL, скрипт (независимо от того, является ли он оболочкой, python и т.д.), Который запускается под привилегированной учетной записью, будет запускать одну конкретную задачу. Итак, в основном это своего рода IPC между непривилегированным пользователем и операциями, которые необходимо выполнить с наивысшим (root?) привилегии. Вы должны внедрить некоторый механизм аутентификации для защиты этого секретного URL, чтобы избежать DDoS. Кроме того, если бы вы использовали HTTPS для таких вещей, тогда ваш секретный URL не был бы открыт для посредников.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .