Server via PHP starten und stoppen

Dieses Thema im Forum "Technischer Support" wurde erstellt von JunkyKeks, 4. Juni 2016.

  1. JunkyKeks
    Offline

    JunkyKeks

    Registriert seit:
    3. Januar 2016
    Beiträge:
    48
    Ort:
    Spenge, bei Bielefeld
    Minecraft:
    JunkyKeks
    Hallo,
    ich bin absoluter PHP-Anfänger und versuche mittlerweile seit Stunden einen PHP-Script für mein privates Webinterface zu programmieren, bei dem der Server gestartet bzw. gestoppt wird. Bei Google bin ich mittlerweile auf der 8. Seite... Man klickt also auf diesen Bootstrap-Button...


    <button type="button" class="btn btn-success">Start</button>

    Es soll also lediglich die start.sh aus diesem verzeichnis meines vServers ausführen, wenn man den Button drückt.

    /home/minecraft/server/start.sh

    Ich wäre für jede Hilfe dankbar!

    Mit freundlichen Grüßen
    JunkyKeks
     
    #1
  2. jensIO
    Offline

    jensIO

    Registriert seit:
    28. Juli 2015
    Beiträge:
    602
    Ort:
    Internet, im Neuland
    Minecraft:
    jens1o
    http://php.net/manual/de/function.exec.php
    http://php.net/manual/de/function.system.php

    exec gibt dabei(standardmäßig) das Ergebnis nicht aus, während system es ausgibt. Du musst allerdings darauf achten, dass der www-data User Zugriff auf die Datei hat und der Safemode deaktiviert ist.


    Außerdem musst du entweder dieses Skript direkt aufrufen(<a href="start.php" class="btn btn-success">Server starten</a>), oder du löst es mit einer asynchronen Ajax Request aus.
     
    #2
  3. JunkyKeks
    Offline

    JunkyKeks

    Registriert seit:
    3. Januar 2016
    Beiträge:
    48
    Ort:
    Spenge, bei Bielefeld
    Minecraft:
    JunkyKeks
    Hallo,
    werde ich morgen einmal versuchen... Verstehe leider nur teilweise, was du meinst ^^
     
    #3
  4. jensIO
    Offline

    jensIO

    Registriert seit:
    28. Juli 2015
    Beiträge:
    602
    Ort:
    Internet, im Neuland
    Minecraft:
    jens1o
    Mit diesen Funktionen kannst du ein Skript ausführen lassen, mehr ist da nicht.
     
    #4
  5. Cyrox
    Offline

    Cyrox

    #5
  6. chavix_kevin
    Offline

    chavix_kevin

    Registriert seit:
    9. März 2015
    Beiträge:
    3
    Naja, 'Mist' ist das nicht. Man kann das durchaus verwenden, sollte sich aber gegen Script Injection und anderen Sicherheitsrisiken absichern. Voraussetzung ist da natürlich Fachwissen... Da der TO aber selbst sagt, er sei unerfahren, würde ich es gleich lassen. Wieso muss man sich immer gleich dem "komplizierten" Sachen zuwenden?
     
    #6
    softx und jensIO gefällt das.
  7. jensIO
    Offline

    jensIO

    Registriert seit:
    28. Juli 2015
    Beiträge:
    602
    Ort:
    Internet, im Neuland
    Minecraft:
    jens1o
    Wenn er nur eine fixe Datei mit einer Konstante aufruft.
    PHP:
    1.  if(!defined("MC_PATH")) define("MC_PATH", "/home/minecraft/server/start.sh");
    Und dabei keine Parameter hinzugibt(welche Variabel sind) kann da so schnell nichts passieren. Ansonsten muss man eben seine Parameter überprüfen, bspw. mit folgenden Snippet:
    PHP:
    1. // Dieses Snippet prüft Parameter anhand eines switch Statements
    2. switch($_REQUEST["parameter"]) {
    3.         case "moreram":
    4.         // fallback
    5.         case "reset-whitelist":
    6.         case "maintenance-mode":
    7.                  break;
    8.         default:
    9.                  throw new \Exception("Der gewünschte Parameter ist nicht erlaubt.");
    10. }
    11. // serverstart here
    12.        
    (Ich nutze hier das Superglobale $_REQUEST Array, weil es(unter anderem) POST und GET hat, und damit hierbei am flexiblesten ist.)

    Damit ist man mit dem Fachwissen abgesichert, ich weiß auch nicht wieso man diesen Bedürfnis, ein ACP zu haben, am Anfang hat.
     
    #7
  8. Cyrox
    Offline

    Cyrox

    Hacks funktionieren in grob zwei Schritten. Zuerst versucht man einen Fuß in die Tür zu bekommen und danach setzt man an und hebelt den Rest auf.
    Die Funktionen exec() und system() ersetzen den hebel durch C4.
    Denkt einfach mal zwei oder drei Schritte weiter. Auf dem Webspace wird nicht nur dieses Script laufen. Aktiviert ihr besagte funktionen müsst ihr nicht nur sicherstellen, dass das Script keine Lücken hat. Ihr müsst sicherstellen, dass ALLE Scripte die auf dem gleichen Space laufen keine Lücken haben.
    Fragt doch mal Matthias was los war als das Forum vor ein paar Jahren gehackt wurde. exec() und system() waren aktiv und so konnte nicht nur das Forum übernommen, sondern direkt auch eine RemoteShell installiert werden.
    Grundprinzip: Je weniger Rechte etwas brauch um zu laufen, desto besser ist es.
     
    #8
    Vazug und jensIO gefällt das.
  9. JunkyKeks
    Offline

    JunkyKeks

    Registriert seit:
    3. Januar 2016
    Beiträge:
    48
    Ort:
    Spenge, bei Bielefeld
    Minecraft:
    JunkyKeks
    Ich wäre dankbar, wenn mir jemand einen fertigverwendbaren Skript mit Erklärung macht, damit ich dies nachvollziehen kann und zukünftig selber machen kann! :)
     
    #9
  10. GameSphere
    Offline

    GameSphere

    Registriert seit:
    27. August 2015
    Beiträge:
    64
    Uiuiuiui hier wird über Sicherheits-Risiken gesprochen, jetzt aber :D

    Ich muss beiden Parteien teilweise zustimmen.
    Ja, die Lösung mit dem Script funktioniert...
    Ja, die Lösung mit dem Script birgt Sicherheits-Risiken
    Nein, ich habe keine Fertige Lösung für das Problem.
    Ja, ich habe einen Vorschlag, wie man es kombinieren könnte :p

    Ich mag mich an ein Projekt erinnern, welches ich vor Jahren mal umgesetzt habe, dort ging es um die selbe Thematik.
    Anfänglich wurde es mit einem PHP exec() Funktion aufgerufen, welche den Server neu startete. Da der entsprechende Webserver nur aus dem VPN-Technik Netzwerk erreichbar war, konnte ich und der Betreiber mit dem Sicherheitsrisiko leben, da nur ca. 3 Personen über VPN Access verfügten.

    Als das ganze später dann auch von "extern" aufgerufen werden sollte hatten wir uns dazu entschieden einen Medienbruch einzubauen.

    Wurde ein Restart verlangt, wurde dies von der Webseite entsprechend in einer SQL-Datenbank vermerkt.
    Auf dem Spiele-Server wurde dann wiederum in einem Chron-Job ein Script ausgeführt, welches die Datenbank geprüft hat, ob ein Neustart erforderlich ist und wenn ja, wurde der Server eben neu gestartet (oder was dann auch immer in der Aktionsabfolge hinterlegt wurde)

    Ich hoffe ich konnte hier jemand auf eine Idee bringen, wie man das ganze so umsetzen könnte, dass alle Parteien was davon haben.
     
    #10
    chavix_kevin und jensIO gefällt das.