ubuntuusers.de

PHP soll Programm starten

Status: Ungelöst | Ubuntu-Version: Server 11.10 (Oneiric Ocelot)
Antworten |

zocker092

Anmeldungsdatum:
3. Juni 2011

Beiträge: 25

Hallo, Ich habe eine kleines Problem mit PHP und einem startscript. Ich habe vor ein kleines Webinterface zu machen welches einen Gameserver starten kann. Nur leider funktioniert das nicht so ganz. Wenn ich in PHP folgende zeile einfüge: shell_exec("/home/USER/minecraft/start.sh start"); kommt auch die rückmeldung das der server gestartet wurde und unter ps -ax erscheint auch der Screen Prozess und der Java Prozess. Nur leider bleibt die server.log leer und der server läuft nicht. Wenn ich über Putty /home/USER/minecraft/start.sh start eingebe startet der Server und läuft auch.

Hat villeicht jemand von euch eine Idee? Ich habe den dummen verdacht das ich nur irgendwo die Rechte falsch habe. Aber der PHP Script hat 777

Über einen Tipp wäre ich sehr Dankbar.

MFG zocker092

encbladexp Team-Icon

Ehemaliger
Avatar von encbladexp

Anmeldungsdatum:
16. Februar 2007

Beiträge: 17524

zocker092 schrieb:

Ich habe eine kleines Problem mit PHP und einem startscript.

Nein, hast du nicht.

Ich habe vor ein kleines Webinterface zu machen welches einen Gameserver starten kann.

Nein, auch das hast du nicht vor.

Wenn ich in PHP folgende zeile einfüge: shell_exec("/home/USER/minecraft/start.sh start");

Mir will keine wohlwollende und freundliche Formulierung einfallen um dir zu sagen was ich davon halte.

Ich habe den dummen verdacht das ich nur irgendwo die Rechte falsch habe.

Ich habe den dummen Verdacht das das ausführen von Binaries/Scripts durch den Webserver eine verdammt blöde Idee ist.

Über einen Tipp wäre ich sehr Dankbar.

Gerne: Lass es!

mfg Betz Stefan

zocker092

(Themenstarter)

Anmeldungsdatum:
3. Juni 2011

Beiträge: 25

Hmm aber was könnte ich dann machen? Weil ich möchte das meine freunde die server auch an bzw. abschalten können ohne das dies über putty machen müssen da 1. Ich Port 22 nicht im Router Freigeben möchte und 2. die keine ahnung von den Command lines haben bzw. mit Putty nicht anfangen können.

encbladexp Team-Icon

Ehemaliger
Avatar von encbladexp

Anmeldungsdatum:
16. Februar 2007

Beiträge: 17524

Warum sollte man einen Serverdienst an bzw. abschalten?

mfg Betz Stefan

zocker092

(Themenstarter)

Anmeldungsdatum:
3. Juni 2011

Beiträge: 25

Wenn der Minecraft Server mal abstürtzt oder ich von der einen auf die andere Map wehcseln möchte. Das will ich alles über das Webinterface machen nur wie gesagt bekomme ich es nicht hin das der Server korrekt gestartet wird.

illCP

Anmeldungsdatum:
26. Oktober 2010

Beiträge: 134

zocker092 schrieb:

Ich habe den dummen verdacht das ich nur irgendwo die Rechte falsch habe.

Die exec()-Kommandos dürften in PHP (bzw. im Apache-PHP-Modul) als anderer User ("www" soweit ich weiß?) ausgeführt werden.

Was die Sicherheit von sowas betrifft kann ich mich encbladexp nur anschließen: Soweit es eben geht vermeiden!

Wenn du das unbedingt so machen willst, achte bitte darauf, nicht einfach ungefilterte Parameter/Variablen (z.B. "$_POST['username']" für "USER") zu übergeben! Sobald du irgendetwas variables im exec-String brauchst, filtere diese Werte vorher mit einer Whitelist.

zocker092

(Themenstarter)

Anmeldungsdatum:
3. Juni 2011

Beiträge: 25

Hmm ich habe solangsam aber auch meine bedenken. Gibt es denn ein Programm welches ich über popen ansteuern kann damit dies den command ausführt? Weil ich nicht gerne den Safemode ausschalten will.

adlerweb

Anmeldungsdatum:
7. März 2012

Beiträge: Zähle...

Generell sollte das funktionieren, jedoch statet PHP via Web den Prozess (wie oben schon steht) vermutlich als www-data, also müssen die Dateirechte entsprechend gesetzt sein (chown -R www-data /home/USER/minecraft/ - wobei der Ordner unter einem anderen Pfad sicher besser aufgehoben wäre). Alternativ könnte man den Befehl über sudo tunneln um den Gameserver im Kontext eines anderen Users zu starten.

Bzgl. Safemode: In der Praxis bringt der ohnehin nichts, afair wird er demnächst sogar entfallen - wenns um Sicherheit geht sollte man besser an geeigneter Stelle anstetzten (FCGI, SuExec, ...)

TheDarkRose

Avatar von TheDarkRose

Anmeldungsdatum:
28. Juli 2010

Beiträge: 3459

Safemode is a trap. Open Basedir bringt schon eher was. Generell würde ich in solch einen Fall eher nur einen Flag in eine Datei setzen, diese per Bash Script und Cron pollen und dann durch dieses Bash Script den Restart durchführen.

zocker092

(Themenstarter)

Anmeldungsdatum:
3. Juni 2011

Beiträge: 25

adlerweb schrieb:

Generell sollte das funktionieren, jedoch statet PHP via Web den Prozess (wie oben schon steht) vermutlich als www-data, also müssen die Dateirechte entsprechend gesetzt sein (chown -R www-data /home/USER/minecraft/ - wobei der Ordner unter einem anderen Pfad sicher besser aufgehoben wäre). Alternativ könnte man den Befehl über sudo tunneln um den Gameserver im Kontext eines anderen Users zu starten.

Bzgl. Safemode: In der Praxis bringt der ohnehin nichts, afair wird er demnächst sogar entfallen - wenns um Sicherheit geht sollte man besser an geeigneter Stelle anstetzten (FCGI, SuExec, ...)

Die Rechte habe ich gesetzt, leider ohne erfolg. ☹

Antworten |