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

StackOverflow https://stackoverflow.com/questions/984748

Вопрос

Мне нужно, чтобы приложение работало в фоновом режиме на моем веб-сервере, но мне нужно иметь возможность запускать/останавливать приложение с правами root.

Для этого я хочу, чтобы работала служба с правами root, чтобы она могла закрыть приложение и запустить его снова, если это необходимо.

Наконец, мне нужно иметь возможность отправлять команды запуска и уничтожения службе через Apache/PHP, чтобы ею можно было косвенно управлять через Интернет.

Как создать службу Linux?
Как мне таким образом связаться со службой Linux?

Заранее спасибо!

Это было полезно?

Решение

Используйте команду exec в своем PHP-скрипте для вызова файлов оболочки.Файлы оболочки можно настроить с помощью бита «setuser», чтобы они запускались от имени своего владельца (вместо того, чтобы работать с разрешениями веб-сервера).

Конечно, вам нужно быть очень осторожным — много тестировать, контролировать и т. д.

Наконец, подумайте о том, что служба работает от имени выделенного пользователя, а не от имени пользователя root.Например, как это делают Apache и большинство других хорошо сделанных сервисов.

Добавлен:Ре:запуск службы в Linux.Зависит от вашего вкуса Linux.Если вы хотите быть уверены, что служба вашего приложения будет автоматически перезапущена в случае сбоя, а также будет вести журнал, проверьте Runit:

https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/opensource/?p=202

http://smarden.org/runit

Добавлен:Я думаю, что вместо бита setuid предложение Фрэнка (в комментарии) использовать систему sudo лучше.

Другие советы

Итак, у вас есть три части:

  • Ваш веб-сервер без привилегий root
  • Приложение
  • Демон, который контролирует приложение

Ваша проблема не в запуске демона, а в его написании и общении с ним с веб-сервера без необходимости привилегий root.

Демон может представлять собой простое неинтерактивное приложение, запускаемое в фоновом режиме:

# my_dameon &

Я не разработчик PHP, но в поисках очереди сообщений и PHP я обнаружил бобовый стебель
Глядя на пример на первой странице, кажется, что вы можете использовать его для следующих целей:

  • Apache/php отправляет сообщение beanstalkd
  • Ваш демон читает сообщение от beanstalkd.В зависимости от команды он запускает или убивает, или перезагружает фоновое приложение.

Вы можете написать свой демон на php, так как там есть клиент на многих языках
Вы также можете проверить этот вопрос

Вы можете создать демон, который принимает следующие команды:

  • daemon_name start
  • daemon_name stop
  • daemon_name restart
  • deamon_name reload

Запуск демона не должен вызвать затруднений.Просто выполняю daemon_name start из PHP-скрипта следует запустить его.После запуска вы можете записать PID процесса в файл блокировки (для последующей остановки, перезапуска или перезагрузки).Демон должен обрабатывать сигналы.

Затем в PHP-скрипте вы можете вызвать daemon_name stop.Это должно запустить новый демон, который проверит файл блокировки, получит PID работающего демона и отправит сигнал, который будет обработан работающим демоном.Файл блокировки следует удалить/очистить, а затем stop инициирующий демон/процесс может завершиться.

Я думаю, тебе стоит посмотреть inetd, который можно настроить для запуска всех видов служб и он работает от имени пользователя root.Затем вы могли бы написать относительно простую программу, которая сама по себе не имеет привилегий root, но которая при запуске от root выполняет необходимые вам задачи.

Что касается связи со службой, вы не указали, какой это тип службы, однако, если вы пишете ее самостоятельно, наиболее распространенными методами будет связь через сокеты UNIX или MMAP.Зависит от ваших потребностей.

Ах да, следует отметить, что уже существуют приложения для веб-управления Linux-системами. Вебмин это действительно хороший вариант, который можно настроить так, чтобы обеспечить столько контроля, сколько вам нужно.

Как предполагает @shodanex, использование Beanstalkd будет отличным способом отключить веб-интерфейс от исполнителя командной строки, работающего от имени root.Его можно было тривиально настроить так, чтобы он запускал только то, что требовалось.

Чтобы запустить работника, System_Daemon от Pear может генерировать и запускать скрипт, запускающий демон, с помощью start/stop/restart.

Делая это, будьте очень осторожны.Никогда не используйте в команде exec данные, предоставленные пользователем из Интернета.это может позволить кому-то произвольно выполнять команды на вашем компьютере.

Кроме того, во-вторых, Фрэнк использует правило sudo, чтобы вы могли запускать эту конкретную команду с необходимыми вам разрешениями, но не более того.Так будет безопаснее.

Конечно с

sudo apt-get install openbsd-inetd

вы можете создать услугу, которую хотите

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top