kostenloser Webspace werbefrei: lima-city


Per PHP Ubuntu-Befehl ausführen?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    jnuk

    jnuk hat kostenlosen Webspace.

    Hi Leute,
    ich habe vor einen Minecraft-Server zu erstellen. Da mein Dad aber nicht will, dass er den ganzen Tag läuft, würde ich gerne wissen ob es möglich ist, über PHP Ubuntu-Befehle auszuführen (Um den Server zu stoppen). Hab zwar schon gegoogelt, aber nichts gefunden, oder wenn, dann klappt es nicht.
    Danke für eure Hilfe im Voraus!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hier geht's u.A. darum, den Serverbefehl "dig" auszuführen. Sollte auch mit allen anderen Befehlen klappen :)

    Aus Sicherheitsgründen jedoch kannst du nicht immer und überall irgendwelche Serverbefehle ausführen. Wenn es sich nicht um deinen eigenen Server handelt bzw. um einen Server, auf dem du entsprechende Rechte bestitzt, kannst du das Vorhaben vergessen.
  4. Autor dieses Themas

    jnuk

    jnuk hat kostenlosen Webspace.

    Danke für die schnelle Antwort.
    Aus Sicherheitsgründen jedoch kannst du nicht immer und überall irgendwelche Serverbefehle ausführen.
    Wie meinst du das?
    Wenn es sich nicht um deinen eigenen Server handelt bzw. um einen Server, auf dem du entsprechende Rechte bestitzt, kannst du das Vorhaben vergessen.
    Es ist mein Server, also sollte das kein Problem darstellen.

    Könnteste bitte n Beispiel machen? Ich versteh das so nicht (bin ziemlich neu in PHP)
  5. thelegenddragoon

    Kostenloser Webspace von thelegenddragoon, auf Homepage erstellen warten

    thelegenddragoon hat kostenlosen Webspace.


    Ehm nur mal eine Frage.
    Was genau für einen "Minecraft Server" willst du machen ?


    Denn es gibt ja zwei Sorten Root und Hamachi.

    Wäre nett wenn du mal genau beschreibst wofür du das machen willst, weil ich dir dann helfen kann, da ich selber mal einen Minecraft Server geleitet habe.
  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Um einen Systembefehl auszuführen kannst du system(), exec(), passthru(), popen(), und ein paar andere Befehle nutzen. Dazu müssen diese Kommandos aber in PHP aktiviert sein.
    Wichtiger Hinweis: übergib niemals Benutzereingaben ungefiltert an eine dieser Funktionen.
    Weitere Infos dazu hier.
  7. Autor dieses Themas

    jnuk

    jnuk hat kostenlosen Webspace.

    @thelegenddragoon
    Ist ein Root-Server, der mit DynDNS arbeitet. Ist schon fertig eingerichtet und funktioniert.

    @hackyourlife
    Danke
  8. Autor dieses Themas

    jnuk

    jnuk hat kostenlosen Webspace.

    Hat sich noch nicht ganz erledigt...
    Könnte mir bitte jemand ein Beispiel machen, wie ich den Server dann herunterfahre (Mit shutdown -h now ), denn ich bekomms irgendwie nicht hin.
  9. jnuk schrieb:
    Hat sich noch nicht ganz erledigt...
    Könnte mir bitte jemand ein Beispiel machen, wie ich den Server dann herunterfahre (Mit shutdown -h now ), denn ich bekomms irgendwie nicht hin.
    du schreibt in eine datei - sagen wir in 'tschuess.php' - auf dem auszuschaltenden server das hier rein:
    <?php
    echo `sudo shutdown -h now 2>&1`;
    (die komischen dinger heißen backticks [`] und sind equivalent mit exec() und co.)
    'sudo' ist dazu unerlässlich, weil shutdown nur root ausführen darf. allerdings dann must du deinen Apache in die sudoer liste aufnehmen, sonnst geht das ganze nicht! NICHT UNGEFÄHRLICH!!!!
    bei mir heißt es allerdings '-H', was nicht gleich '-h' ist! daher sehe dir 'man shutdown' im bash an. das geht aber natürlich auch über php:
    <?php
    echo `man shutdown 2>&1`;

    die datei kannst du über dein DynDNS natürlich auch abfragen (http://<deindyndns>/<passto>/tschuess.php)
    sowas ist aber - wie vor mir schon gesagt wurde, sehr sehr riskant!!!!
    du kannst das ganze aber auch so einrichten, dass du die seite nur von deinem LAN erreichst (IP).

    ==== EDIT ====
    halt halt!
    so einfach ist das doch nicht mit 'sudo ...'. wie man eine konsole in php anwirft, kann ich dir leider nicht sagen. sonnst kannst das passwort nicht eingeben ;o((
    shade.
    wenn jemand das weißt, bitte hier unbedingt posten ;)

    Beitrag zuletzt geändert: 26.12.2011 1:16:26 von hemiolos
  10. Autor dieses Themas

    jnuk

    jnuk hat kostenlosen Webspace.

    so einfach ist das doch nicht mit 'sudo ...'. wie man eine konsole in php anwirft, kann ich dir leider nicht sagen. sonnst kannst das passwort nicht eingeben ;o((
    shade.
    wenn jemand das weißt, bitte hier unbedingt posten ;)

    Aber der LAMPP-Server muss ja schon als Root ausgeführt werden, sonst würde er gar nicht starten! Hat dann der Befehl nicht automatisch auch Root-Rechte?
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    jnuk schrieb:
    so einfach ist das doch nicht mit 'sudo ...'. wie man eine konsole in php anwirft, kann ich dir leider nicht sagen. sonnst kannst das passwort nicht eingeben ;o((
    shade.
    wenn jemand das weißt, bitte hier unbedingt posten ;)

    Aber der LAMPP-Server muss ja schon als Root ausgeführt werden, sonst würde er gar nicht starten! Hat dann der Befehl nicht automatisch auch Root-Rechte?
    Wenn ein Prozess als root ausgeführt wird (Webserver) heißt das noch lange nicht dass auch alle Childs (PHP-Interpreter) als root ausgeführt werden (obwohl das das Standardverhalten ist)!
    Normalerweise will man genau nicht dass z.B. der PHP/Perl/...-Interpreter als root ausgeführt wird, da das natürlich ein Sicherheitsrisiko darstellt. Der Webserver startet also solche Prozesse mit einem anderen Benutzer.
    Ich kann hier aber nicht weiterhelfen und sagen wie man das einstellt (welcher Benutzer für den Scriptinterpreter verwendet werden soll).

    Nachdem aber immer mehrere Wege zum Ziel führen: du kannst das auch mit einem (hässlichen) Umweg erreichen:
    Schreib einen Server der als Dämon im Hintergrund läuft und auf irgend einem Port auf eine Verbindung wartet. Wenn sich jetzt ein Client verbindet fährt er das System mit "shutdown -h now" herunter. Den Dämon startest du als root, dadurch wird shutdown auch als root ausgeführt (da es den Benutzer vom Elternprozess erbt).
    Im PHP-Script baust du eine Socket-Verbindung zu deinem Server auf und fährst so das System herunter.
    Wie gesagt: Hack, funktioniert aber. ;-)
  12. Autor dieses Themas

    jnuk

    jnuk hat kostenlosen Webspace.

    Ok werd ich gleich mal ausprobieren! :smile:

    EDIT:
    Wenn ich also einen zweiten ROOT-LAMPP-Server z.B. auf dem Port 1234 laufen lasse und dann in der index.php schreib:
    <?php
    echo `sudo shutdown -h now 2>&1`;
    ?>
    sollte es funktionieren?

    Beitrag zuletzt geändert: 27.12.2011 14:10:54 von jnuk
  13. karlsve

    Moderator Kostenloser Webspace von karlsve

    karlsve hat kostenlosen Webspace.

    Siehe unten!

    Es interessiert mich jedoch, warum du den gesamten Server herunterfahren willst. Du kannst ihn nämlich auch nicht per Webscript wieder starten sondern musst es manuell machen. Wenn es ein Minecraft-Server ist, dann wäre es empfehlenswert nur den Minecraft-Daemon zu stoppen.

    PLUS:

    Überlege lieber ob der Webserver wirklich ROOT-Zugriff haben sollte. Das ist eine Sicherheitslücke!

    Welcome to BOTNET!

    Beitrag zuletzt geändert: 27.12.2011 14:44:56 von karlsve
  14. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    @jnuk:
    Nein, da hast du was nicht ganz verstanden.
    Du hast einen LAMPP-Server mit einem PHP-Script (der muss nicht einal als root laufen!):
    <?php
    $sock = fsockopen('localhost', 1234);
    fclose($sock);
    ?>


    Dann hast du ein Programm (in C):
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdint.h>
    #include <string.h>
    
    #ifdef WIN32
    	#include <winsock.h>
    
    	#define close   closesocket
    #else
    	#include <unistd.h>
    	#include <sys/socket.h>
    	#include <sys/types.h>
    	#include <arpa/inet.h>
    	#include <netinet/in.h>
    	#include <netdb.h>
    #endif
    
    #define	PORT 1234
    
    int main(int argc, char** argv) {
    	struct	sockaddr_in peerx;
    	int	sdl,
    		sda,
    		psz,
    		on = 1;
    
    	peerx.sin_addr.s_addr	= INADDR_ANY;
    	peerx.sin_port		= htons(PORT);
    	peerx.sin_family	= AF_INET;
    
    	sdl = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if(sdl < 0) {
    		printf("error");
    		return(-1);
    	}
    	if(setsockopt(sdl, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on)) < 0) {
    		printf("error");
    		return(-1);
    	}
    	if(bind(sdl, (struct sockaddr*)&peerx, sizeof(struct sockaddr_in)) < 0) {
    		printf("error");
    		return(-1);
    	}
    	listen(sdl, SOMAXCONN);
    	while(1) {
    		psz = sizeof(struct sockaddr_in);
    		sda = accept(sdl, (struct sockaddr *)&peerx, &psz);
    		if(sda < 0) {
    			printf("- accept() failed, continue within one second\n");
    			close(sdl);
    			return(-1);
    		}
    		system("shutdown -h now");
    		close(sda);
    	}
    	return(0);
    }


    Dieses (C-)Programm startest du als root.

    Funktionsweise: das C-Programm hat das Recht shutdown auszuführen. Du sagst jetzt dem C-Programm über ein Socket von PHP aus dass es jetzt Zeit ist den PC herunterzufahren. Das C-Programm führt darauf hin shutdown als root aus was aus PHP eher schwerer möglich wäre. Das C-Programm muss dazu aber immer im Hintergrund laufen.

    Beitrag zuletzt geändert: 27.12.2011 14:41:23 von hackyourlife
  15. also wenn ich mir den ganzen schmus hier ansehe, wird es mir richtig schlecht.

    hackyourlife schrieb:
    ... blaaa
    Ich kann hier aber nicht weiterhelfen und sagen wie man das einstellt (welcher Benutzer für den Scriptinterpreter verwendet werden soll).
    ... blaaa
    mit dem einzigen halbwegs verständlichen satz disqualifizierst du dich selbst. den rest zu zerlegen nimmt einfach zu viel platz hier.

    karlsve schrieb:
    Es interessiert mich jedoch, warum du den gesamten Server herunterfahren willst.
    er schrieb: weil sein vater das so will? (strom sparen oder was auch immer?) man sollte ALLE beiträge lesen (und das voll durch ;)


    also ich habe mir gestern einige stunden mit exzessen beim lesen von man pages geschenkt darüber, was man mit php-scripten als root (teils bekannter weise) machen kann ;) aber das passt natürlich da nicht rein, weil es eben kein ubuntu-spezifikum ist, sondern ein hack/security issue. und genau aus diesem grund mache ich jetzt mal das thema unter 'prozesse/programme mit root rechten von php starten' auf. es gibt sicher noch leute, die etwas brauchbares dazu zu sagen haben, ohne herum zu schwafeln :o)

    lg euer
    hemi

    Beitrag zuletzt geändert: 30.12.2011 1:17:31 von hemiolos
  16. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Für Leute die etwas langsamer denken (und möglichst alles in PHP haben wollen):
    mach eine SSH-Verbindung zu localhost (wo ein SSH-Server laufen muss) auf, melde dich als root an, führ dein Kommando aus und schließ die SSH-Verbindung.

    Nachteil: wenn dein Script aus irgend einem Grund von jemandem im Quelltext gelesen wird hat er das root-Passwort.

    Referenz: SSH in PHP

    Die Lösung hier verlegt das "Sicherheitsproblem" in einen eigenen Prozess.

    hemiolos schrieb:
    also wenn ich mir den ganzen schmus hier ansehe, wird es mir richtig schlecht.
    ....
    es gibt sicher noch leute, die etwas brauchbares dazu zu sagen haben, ohne herum zu schwafeln :o)

    Erst durchdenken, dann kommentieren.

    Eine "sicherere" Lösung als das mit dem externen Prozess wirst du eher nicht finden.

    Das hier war nur eine Idee!!! Natürlich gibt es noch andere Möglichkeiten!

    Beitrag zuletzt geändert: 27.12.2011 19:31:43 von hackyourlife
  17. hackyourlife schrieb:
    ... Nachteil: wenn dein Script aus irgend einem Grund von jemandem im Quelltext gelesen wird hat er das root-Passwort.
    woher kommst du wohl auf diese überspannte idee? du glaubst etwa nicht wirklich, dass jemand (ich weiß nicht wer?) eine einzige php-datei schreibt mit HARDCODIERTEM? dem muss man doch dringend auf dem kopf hauen!
    oder hast du wirklich keine ahnung, wie man wichtiges von neugierigen lümmeln versteckt?
    du hast nachholbedarf!
  18. Autor dieses Themas

    jnuk

    jnuk hat kostenlosen Webspace.

    Die Idee mit SSH von hackyourlife ist ja an sich ganz gut. Und wegen dem Passwort hätte ich noch ne Idee:
    Ich könnte es doch ganz einfach in eine MySQL-Datenbank schreiben. Dann wäre es doch wenigstens Halbwegs sicher, oder?
    Dann frag ich es einfach mit mysql_query ab und fertig ist die Lauge!

    Beitrag zuletzt geändert: 28.12.2011 9:59:52 von jnuk
  19. c************y

  20. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    hemiolos schrieb:
    woher kommst du wohl auf diese überspannte idee? du glaubst etwa nicht wirklich, dass jemand (ich weiß nicht wer?) eine einzige php-datei schreibt mit HARDCODIERTEM? dem muss man doch dringend auf dem kopf hauen!
    oder hast du wirklich keine ahnung, wie man wichtiges von neugierigen lümmeln versteckt?
    du hast nachholbedarf!
    Natürlich weiß ich genug Möglichkeiten wie man was verstecken kann.
    Ich bin hier aber von langsameren (unwissenden) Leuten ausgegangen, die warscheinlich eher zu Hardcodiertem neigen, deshalb die Warnung.
  21. Autor dieses Themas

    jnuk

    jnuk hat kostenlosen Webspace.

    @christcomunity
    WoL funktioniert bei dem Server (benutze ich auch) und automatisches Herunterfahren ist nichts für mich, da hier ja immer zu festen Zeiten heruntergefahren wird.
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!