Frage

Ich brauche eine Anwendung im Hintergrund auf meinem Web-Server zu laufen, aber ich brauche die Anwendung mit Root-Rechten in die Lage zu starten / stoppen.

Um dies zu tun, ich möchte einen Dienst ausgeführt haben, die Root-Rechte hat, so dass es die Anwendung töten können, und starten Sie es erneut, wenn es sein muss.

Schließlich muss ich der Lage sein, den Start zu senden und töten Befehle an den Dienst über Apache / PHP, so dass sie indirekt über das Web gesteuert werden.

Wie erstelle ich einen Linux-Service?
Wie kann ich mit einem Linux-Dienst auf diese Weise kommunizieren?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Mit dem Befehl exec in PHP-Skript-Shell-Dateien aufzurufen. Die Shell-Dateien können Setup mit dem „setuser“ Bit sein, so dass es als Eigentümer laufen (statt mit dem Web-Server der Berechtigungen von ausgeführt wird).

Natürlich müssen Sie sehr vorsichtig sein, -. Eine Menge Tests, Überwachung, usw.

Schließlich, denken Sie an das Service als dedizierter Benutzer ausgeführt wird, nicht als root. ZB wie Apache und die meisten anderen gut gemacht Dienste tun.

Hinzugefügt: Re: einen Dienst unter Linux läuft. Hängt von Ihrem Geschmack von Linux. Wenn Sie sicher sein wollen, dass Ihre App-Dienst automatisch neu gestartet wird, wenn es fehlschlägt, sowie Protokollierung, Kasse runit:

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

http://smarden.org/runit

Hinzugefügt: Statt setuid Bit, ich denke, Frank Vorschlag (in Kommentaren) von sudo-System ist besser

.

Andere Tipps

Also, Sie haben drei Stücke hier:

  • Ihr Web-Server ohne Root-Rechte
  • Eine Anwendung
  • Ein Dämon, der die Anwendung Überwachung

Ihr Problem ist nicht der Daemon startet, es schreibt sie, und mit ihr von dem Web-Server zu kommunizieren, ohne Root-Rechte zu benötigen.

Ein Dämon kann als eine nicht interaktive Anwendung im Hintergrund gestartet so einfach sein:

# my_dameon &

Ich bin kein PHP-Entwickler, sondern auch für Nachrichtenwarteschlange und PHP Suche, entdeckte ich beanstalkd
 Mit Blick auf das Beispiel auf der ersten Seite es scheint, dass Sie es folgendes tun können:

  • Der Apache / PHP eine Botschaft sendet beanstalkd
  • Ihr Daemon liest die Nachricht aus beanstalkd. Basierend auf dem Befehl startet es oder töten oder die Hintergrundanwendung neu zu laden.

Sie können Ihren Dämon in PHP schreiben, da es Client in vielen Sprachen
Sie können auch überprüfen diese Frage

Sie können einen Daemon erstellen, die die folgenden Befehle akzeptiert:

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

den Daemon starten sollte nicht schwer sein. Nur Ausführung daemon_name start von einem PHP-Skript sollte es laufen. Nach dem Start können Sie die PID des Prozesses auf eine Sperrdatei (zum Anhalten, Neustarten oder Umladung später) schreiben. Der Daemon sollte Signale verarbeiten.

In einem PHP-Skript können Sie dann daemon_name stop aufrufen. Dies sollte einen neuen Daemon zu starten, die die Sperrdatei überprüfen würden und die PID des laufenden Dämon und ein Signal senden, die durch den laufenden Daemon behandelt werden würden. Die Sperrdatei entfernt werden sollte / gelöscht und dann die stop Initiieren Daemon / Prozess beenden kann.

Ich glaube, Sie bei inetd aussehen sollten, die so konfiguriert werden kann alle Arten von Dienstleistungen zu laufen, und es läuft als root. Sie könnten dann ein relativ einfaches Programm schreiben, das nicht selbst root privilegiert ist, die aber, wenn sie von root tut die Aufgaben ausführen Sie brauchen getan.

Soweit mit dem Service in Verbindung steht Ihnen nicht sagen, welche Art von Service ist es jedoch vorausgesetzt, Sie es gerade schreiben sich die am häufigsten verwendeten Methoden über UNIX-Sockets oder MMAP comunicate wäre. Hängt von Ihren Bedürfnissen wirklich.

Ach ja, sollte es darauf hin, sind bereits Anwendungen für Web-Management von Linux-Systemen. Webmin ist ein wirklich gut, die so konfiguriert werden kann, so viel oder so wenig Kontrolle zu ermöglichen, wie Sie benötigen.

Als @shodanex schon sagt, Beanstalkd Verwendung wäre eine ausgezeichnete Möglichkeit, eine Web-Front-End von einem Lauf-as-root Befehlszeile Arbeiter zu trennen. Es kann nur trivialerweise genau eingestellt werden, laufen, was erforderlich war.

den Arbeiter ausführen zu können, Pear der System_Daemon erzeugen kann und einen Daemon laufende Skript ausführen, mit Start / Stopp / Neustart.

Wenn diese sehr, sehr vorsichtig sein, zu tun. Verwenden Sie keine Benutzerdaten aus dem Web in dem Befehl exec vorgelegt. dies könnte jemand erlauben, beliebig Befehle auf dem Computer ausgeführt werden.

Auch zweite I Frank eine sudo-Regel verwenden, so dass Sie, dass bestimmten Befehl mit den Berechtigungen ausführen können Sie brauchen, aber sonst nichts. Es wird mehr auf diese Weise sichern.

Natürlich mit

sudo apt-get install openbsd-inetd

Sie können Sie einen gewünschten Dienst

erstellen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top