Domanda

Ho bisogno di una domanda di essere in esecuzione in background sul mio server web, ma ho bisogno di essere in grado di avviare / arrestare l'applicazione con privilegi di root.

Per fare questo, voglio avere un servizio in esecuzione con privilegi di root, in modo che possa uccidere l'applicazione, e iniziare di nuovo se necessario.

Infine, ho bisogno di essere in grado di inviare l'inizio e uccidere i comandi al servizio tramite Apache / PHP, in modo che possa essere controllata indirettamente tramite il web.

Come faccio a creare un servizio di Linux?
Come faccio a comunicare con un servizio di Linux in questo modo?

Grazie in anticipo!

È stato utile?

Soluzione

Utilizzare il comando exec nello script PHP per chiamare i file di shell. I file di shell può essere configurato con il bit "setuser", così verrà eseguito come il suo proprietario (invece di correre con i permessi del server Web).

Naturalmente, è necessario stare molto attenti -. Un sacco di test, il monitoraggio, ecc

Infine, pensare al servizio in esecuzione come un utente dedicato, non come root. Ad esempio, come Apache e la maggior parte degli altri servizi ben fatto fanno.

Aggiunto: Re: l'esecuzione di un servizio Linux. Dipende dal vostro gusto di Linux. Se si vuole essere sicuri che il vostro servizio applicazione verrà automaticamente riavviato se fallisce, più la registrazione, cassa runit:

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

http://smarden.org/runit

Aggiunto: invece di bit setuid, penso che il suggerimento di Frank (in commento) di utilizzare il sistema sudo è meglio

.

Altri suggerimenti

Quindi, si dispone di tre pezzi qui:

  • Il server web senza privilegi di root
  • Una domanda
  • Un demone che sta monitorando l'applicazione

Il problema non sta lanciando il demone, si sta scrivendo, e comunicare con esso dal server web, senza bisogno di privilegi di root.

Un demone può essere semplice come un'applicazione non interattiva lanciata in background:

# my_dameon &

Io non sono uno sviluppatore PHP, ma alla ricerca di coda di messaggi e php, ho scoperto beanstalkd
 Guardando l'esempio in prima pagina a quanto pare si può utilizzare per effettuare le seguenti operazioni:

  • L'apache / php manda qualche messaggio a beanstalkd
  • Il tuo demone legge il messaggio da beanstalkd. Sulla base del comando inizia o uccidere o ricaricare l'applicazione in background.

È possibile scrivere il demone in php, in quanto ci sono cliente in molte lingue
È inoltre possibile controllare questa domanda

È possibile creare un demone che accetta i seguenti comandi:

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

Avviare il demone non dovrebbe essere difficile. L'esecuzione di daemon_name start da uno script PHP dovrebbe eseguirlo. Dopo l'avvio, è possibile scrivere il PID del processo in un file di blocco (per l'arresto, riavvio o ricaricare in seguito). Il demone dovrebbe gestire segnali.

In uno script PHP, si può quindi richiamare daemon_name stop. Questo dovrebbe accendere un nuovo daemon che controlla il file di blocco e ottenere il PID del daemon in esecuzione e inviare un segnale che sarebbe stato gestito dal demone in esecuzione. Il file di blocco deve essere rimosso / eliminato e poi il stop avvio daemon / processo può smettere.

Credo che si dovrebbe guardare inetd, che può essere configurato per eseguire tutti i tipi di servizi, e funziona come root. È quindi possibile scrivere un relativamente semplice programma che non è di per sé radice privilegiata, ma che quando viene eseguito da root non i compiti è necessario fare.

Per quanto riguarda la comunicazione con il servizio non hai detto che tipo di servizio che è, comunque supponendo che si sta scrivendo da soli i metodi più comuni potrebbe essere quella di comunicare via socket UNIX o MMAP. Dipende dalle vostre esigenze davvero.

Oh sì, dovrebbe sottolineano ci sono già applicazioni per la gestione web dei sistemi Linux. Webmin è uno veramente buono che può essere configurato per consentire tanto o poco controllo di cui hai bisogno.

Come @shodanex suggerisce, utilizzando Beanstalkd sarebbe un modo eccellente per disconnettere una web-front-end da un operaio riga di comando running-as-root. Si potrebbe banalmente essere impostato per funzionare solo esattamente ciò che era necessario.

Per eseguire il lavoratore, System_Daemon di pera possibile generare ed eseguire uno script daemon-running, con start / stop / restart.

quando si fa questo essere molto molto attenti. Non utilizzare qualsiasi utente presentato i dati dal web nel comando exec. questo potrebbe consentire a qualcuno di eseguire arbitrariamente comandi sulla vostra macchina.

Anche io secondo Frank utilizzare una regola sudo in modo da poter eseguire quel comando specifico con le autorizzazioni sono necessarie, ma nient'altro. Sarà più sicuro in questo modo.

Naturalmente con

sudo apt-get install openbsd-inetd

è possibile creare un servizio che si desidera

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top