• Bitte beachte, dass wir eine Serverliste sind!
    Wenn du ein Problem auf einem Server hast (z.B. Entbannantrag, etc), dann ist das Forum hier der falsche Ort.
  • Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Server via PHP starten und stoppen

JunkyKeks

Kuhfänger
Registriert
3 Januar 2016
Beiträge
55
Diamanten
302
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
 

jens1o

Workaholic
Registriert
28 Juli 2015
Beiträge
644
Alter
23
Diamanten
254
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.
 
C

chavix_kevin

Guest
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?
 

jens1o

Workaholic
Registriert
28 Juli 2015
Beiträge
644
Alter
23
Diamanten
254
Minecraft
jens1o
sind nicht nur sicherheitsrisikos
Wenn er nur eine fixe Datei mit einer Konstante aufruft.
PHP:
 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:
// Dieses Snippet prüft Parameter anhand eines switch Statements
switch($_REQUEST["parameter"]) {
        case "moreram":
        // fallback
        case "reset-whitelist":
        case "maintenance-mode":
                 break;
        default:
                 throw new \Exception("Der gewünschte Parameter ist nicht erlaubt.");
}
// serverstart here
(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.
 
C

Cyrox

Guest
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.
 

GameSphere

Kuhfänger
Registriert
27 August 2015
Beiträge
64
Diamanten
0
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.
 
Oben