Pregunta

Necesito una aplicación que se ejecuta en segundo plano en mi servidor web, pero tengo que ser capaz de iniciar / detener la aplicación con privilegios de root.

Con el fin de hacer esto, yo quiero tener una ejecución de servicio que tiene privilegios de administrador, de modo que pueda matar a la aplicación, y empezar de nuevo si es necesario.

Por último, tengo que ser capaz de enviar el comienzo y matar comandos al servicio a través de Apache / PHP, por lo que puede ser controlada de manera indirecta a través de la web.

¿Cómo se crea un servicio Linux?
¿Cómo puedo comunicarme con un servicio Linux de esta manera?

Gracias de antemano!

¿Fue útil?

Solución

Utilice el comando exec en el script PHP para llamar a los archivos de concha. Shell los archivos se pueden configurar con el bit "setuser" para que se ejecute como su propietario (en lugar de correr con los permisos del servidor web).

Por supuesto, tendrá que ser muy cuidadoso -. Un montón de pruebas, monitoreo, etc.

Por último, pensar en el servicio que se ejecuta como un usuario dedicado, no como root. Por ejemplo, como Apache y la mayoría de otros servicios hacen bien hecho.

Alta: Re: ejecutar un servicio en Linux. Depende de su distribución de Linux. Si usted quiere estar seguro de que será automáticamente reinicia el servicio de aplicación, si se produce un error, además de la explotación forestal, la caja Runit:

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

http://smarden.org/runit

Alta: En lugar de bit setuid, creo que la sugerencia de Frank (en el comentario) de usar el sistema sudo es mejor

.

Otros consejos

Por lo tanto, usted tiene tres piezas aquí:

  • Su servidor web sin privilegios de root
  • Una aplicación
  • Un demonio que está supervisando la aplicación

Su problema no está lanzando el demonio, que está escribiendo, y la comunicación con él desde el servidor web, sin necesidad de privilegios de root.

Un demonio puede ser tan simple como una aplicación no interactiva lanzada en el fondo:

# my_dameon &

No soy un developper php, pero la búsqueda de cola de mensajes y php, descubrí beanstalkd
 Mirando el ejemplo en la primera página, parece que se puede utilizar para hacer lo siguiente:

  • El Apache / PHP envía algún mensaje a beanstalkd
  • El demonio lee el mensaje de beanstalkd. Basado en el comando que inicia o matar o volver a cargar la aplicación en segundo plano.

Puede escribir su demonio en php, ya que hay cliente en muchos idiomas
También puede comprobar esta pregunta

Se puede crear un demonio que acepta los siguientes comandos:

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

Inicio del daemon no debería ser difícil. Sólo ejecutar daemon_name start desde un script PHP debe ejecutarlo. Después del arranque, se puede escribir el PID del proceso a un archivo de bloqueo (para detener, reiniciar o volver a cargar más adelante). El demonio debe manejar señales.

En un script PHP, a continuación, puede invocar daemon_name stop. Esto debe encender un nuevo demonio que comprobar el archivo de bloqueo y obtener el PID del demonio que se ejecuta y envía una señal que sería gestionado por el demonio en ejecución. El archivo de bloqueo se debe quitar / despejado y entonces el stop iniciar daemon / proceso puede dejar de fumar.

Creo que usted debe buscar en inetd, que puede ser configurado para ejecutar todo tipo de servicios, y se ejecuta como root. A continuación, podría escribir un programa relativamente simple que no es en sí la raíz privilegiada, pero que cuando se ejecutan por el superusuario realiza las tareas que necesita hacer.

En cuanto a la comunicación con el servicio que no ha dicho qué tipo de servicio es, sin embargo, asumiendo que usted está escribiendo usted mismo los métodos más comunes sería para comunicarse a través de sockets UNIX o MMAP. Depende de sus necesidades en realidad.

Oh sí, cabe señalar que ya hay aplicaciones para la gestión de red de sistemas Linux. Webmin es una muy buena que puede ser configurado para permitir el control tanto o tan poco como sea necesario.

Como @shodanex sugiere, utilizando beanstalkd sería una excelente forma de desconectar una interfaz web de un trabajador de la línea de comandos de rodaje como root. Es trivial podría establecerse sólo para funcionar exactamente lo que se requiere.

Para ejecutar el trabajador, System_Daemon de pera puede generar y ejecutar un script demonio-funcionando, con arranque / parada / reinicio.

Cuando se hace esto sea muy cuidadoso. Nunca utilice cualquier usuario presentado datos de la web en el comando exec. esto podría permitir a alguien para ejecutar comandos de forma arbitraria en su máquina.

También he segunda Frank utilizar una regla sudo para que pueda ejecutar ese comando específico con los permisos necesarios, pero nada más. Será más seguro de esa manera.

Por supuesto, con

sudo apt-get install openbsd-inetd

se puede crear un servicio que desea

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top