PHP - exec() / shell_exec() Problem

  • Hallo liebes Board,

    ich bin schon seit 1 1/2 Stunden dran ein Skript zu schreiben, dass ein Shellskript aufruft und dises Vollständig ausführt.

    Folgenden Code habe ich getippt:

    PHP Skript:

    PHP
    <?php
    
    
    if (isset($_POST['joomla'])) {
    
        $cmd = "sh /var/www/virtual/tm-xxx.net/htdocs/repository/repository_joomla.sh 1.tm-xxx.net";
        $run = exec($cmd);
        echo $run;
    }
    ?>

    Shellskript:

    Code
    rm -R /var/www/virtual/$1/htdocs/*
    cp -R /var/www/virtual/repository.tm-xxx.net/htdocs/repository_joomla/* /var/www/virtual/$1/htdocs/
    echo Das Joomla CMS wurde erfolgreich auf die Domain $1 kopiert.

    Also wenn ich nun das PHP Skript ausführe bekomme ich --> Das Joomla CMS wurde erfolgreich auf die Domain XXX.de kopiert. <-- raus. Aber die beiden Befehle wurden nicht ausgeführt.

    Woran kann das liegen?
    Wie kann ich es beheben?
    Gibt es eine Alternative?

    Ich weiß, die Umsetzung ist nicht der "burner", aber darum geht es momentan nicht sondern nur um die Sache an sich, da es auf einem Server ausgeführt wird, welcher nicht am Netz hängt sondern nur zu Testzwecken dient.

    Ich bitte um schnelle Hilfe! Vielen Dank!

    Grüße

    3 Mal editiert, zuletzt von HPM-Solution (22. Juni 2011 um 18:44)

  • versuch mal die * wegzulassen. beim loeschen koenntest du, je nach einstellung des os, noch ein -f am ende einfuegen. dann waere noch die frage ob $1 auch richtig interpretiert wird

  • Das selbe habe ich mir auch schon gedacht. Das Shellskript hat root:root Zugehörigkeiten und 755 Rechte. Ich denke, dass der PHP User rumzickt. Nur weis denn keiner eine Lösung, hatte noch nie einer so ein Problem ? ..

    // Edit:

    Wenn ich die Sterne weglasse hat es keine Auswirkung auf das Skript.
    Ja die $1 wird definitif richtig interpretiert. Er gibt mir das echo des Shellskripts ja auch inkl. Domain wieder.

  • oh dachte es waere bei dem echo fertig, habe den scrollbalken uebersehen. laeuft der apache auch unter root? probier mal eine datei auf der gleiche ebene zu kopieren, also innerhalb deiner htdocs...leg das script auch in den gleichen ordner um basedir probleme ausschliessen zu koennen

  • Zitat


    Das Shellskript hat root:root Zugehörigkeiten und 755 Rechte

    Da hast du es doch.
    7 Besitzer, darf alles
    5 Gruppe, darf lesen
    5 Andere, darf lesen

    Da der php-process wahrscheinlich nicht als root läuft, darf er also nur lesen, nicht schreiben ;)


  • X( Ich liebe Linux ^^ Naja mal kein Kommentar. Werde es mal auf 7 setzen. Danke schonmal an euch alle für die Hilfe.

    Echt geiles Board *gG*

    //EDIT:

    Nein auch die Rechtevergabe hat mich nicht weitergebracht.

    Einmal editiert, zuletzt von HPM-Solution (22. Juni 2011 um 19:44)

  • korrigiere mich bitte wenn ich falsch liege aber werden nicht die ordner-rechte beim ausfuehren des scriptes ueberprueft? afaik reicht beim script selbst ein 0755 da es nur die rechte des scriptes betrifft, nicht von dem was innerhalb des scriptes abgearbeitet wird

  • Ja. Da hast du Recht. Ich denke aber das es iregdnwo an den Rechten liegt und er es nicht machen will weil das PHP System aus vielen VirtuellenUsern besteht und die VU's haben nicht die Rechte um in andere Verzeichnisse was reinzukopieren. Ergo kann ich es sowieso vergessen ...

  • du koenntest versuchen das php script den eigentuemer root zu geben, chmode auf 0755 setzen, und es dann nochmals starten lassen. oder teste es mal mit safe_mode off ob es generell funktionieren wird oder ob es noch mehr barrieren gibt

  • safe_mod ist bei mir meißtens off. Disable_Fuinctions sind auch alle raus. Inhaber war breits der Root user und 755 oder höher hatten bereits auch beide Skripte.

  • und wenn das php- und das shell-script als besitzer wwwrun haben? mhh wenn es kein produktivsystem ist koenntest du die ordner kurz auf 0777 stellen und schauen was dann passiert

  • 1. Apache (und damit php) laufen meist unter dem user www-run, haben also nur lesende Rechte auf eine Datei die root gehört und auf 755 steht (php = Andere)
    2. Das ist so. Nichts mit "Rechte beim Ausführen überprüft" oder weiss der Kuckuck.
    3. Dem Script andere Rechte zu geben ist Unfug.
    4. Du musst die Rechte des Ordners neu setzen. Besser noch: den Besitzer ändern auf www-run (oder wie der Apache-user auch bei dir heissen mag), weil:

    5. NIEMALS Ordner mit 777 ausstatten. NIEMALS.


  • 1-4] afaik ueberpreuft php beim ausfuehren des scriptes unter bestimmten umstaenden die uid [php->ordner] - wie ich schon geschrieben habe sind die rechte des shell-scriptes 'egal' da es um die ordner-rechte geht. wieso wiederholst du das dann bitte? 5] wenn es kein produktivsystem ist kannst du die rechte setzen wie du willst, weil, wie der name es schon vermuten laesst, es sich um kein produktivsystem handelt