Anzeige:
Ergebnis 1 bis 13 von 13

Thema: Shellbefehl ausführen

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.06.2003
    Ort
    Köln
    Beiträge
    52

    Shellbefehl ausführen

    Hi !

    Ich bin gerade dabei ein PHP-Skript zu basteln, was eine Email per PGP verschlüsselt und versendet.

    Nun habe ich das Problem, das ich als angemeldeter User root oder wwwrun das Skript ausführen kann, aber nicht als "system()"- Aufruf unter PHP.

    Code:
    system("<path>/gpg -e -r '<PGP-KEY ID>' -o <verschlüsselte-datei> -a <klartext-datei>");
    Wie gesagt, die User können den Befehl auf der Shell ausführen aber der User wwwrun führt den Befehl nicht in der PHP-Umgebung aus ....

    Könnt ihr mir dabei helfen ??
    Unwissenheit ist Staerke

  2. #2
    Registrierter Benutzer
    Registriert seit
    03.07.2007
    Beiträge
    23
    hast du mal ins error_log des webservers geschaut?

    chmod ***7 <path>/gpg würde die datei für jeden ausführbar machen, aber ich denke das ist keine gute lösung...

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.06.2003
    Ort
    Köln
    Beiträge
    52
    Hi !

    Der User wwwrun hat die Berechtigung den Befehl auszuführen, wenn ich mich als wwwrun anmelde, kann ich den Befehl erfolgreich absetzen. Nur wenn ich den Befehl über system() ausgeben möchte - passiert überhaupt nichts

    Ich bin etwas verwirrt ...

    In der errorlog steht kein bischen drinne ....
    Unwissenheit ist Staerke

  4. #4
    Registrierter Benutzer
    Registriert seit
    03.07.2007
    Beiträge
    23
    hm wenn der user theoretisch die datei ausführen kann dann denke ich wird es ne sicherheits einstellung von php sein?

    sicher bin ich mir da aber gerade nicht, ich frag gleich mal unseren php-guru hier

  5. #5
    Registrierter Benutzer
    Registriert seit
    07.06.2003
    Ort
    Köln
    Beiträge
    52
    Das wäre prima, weil ich nicht verstehe wer sich dagegen sträubt
    Unwissenheit ist Staerke

  6. #6
    Registrierter Benutzer
    Registriert seit
    13.07.2007
    Beiträge
    7
    Hallo,

    da ich nicht das ganze Forum flooden möchte schreibe ich meine Frage mal mit hier rein.

    Ich habe auf meinem Root-Server (Debian Etch) zwei Programme installiert, die ich gerne via PHP "fernsteuern" würde. Dafür ist es allerdings erforderlich, das ich mit einem bestimmten User angemeldet bin wenn ich die Shellbefehle ausführe.

    Um das ganze etwas genauer zu beschreiben;

    Ich habe eine Software die .flv-Files von YouTube runterläd. Diese sollen ins home-Directory des Users grabit downgeloaded werden. Zusätzlich benötige ich die Rückgabe des Programms um die geladene Datei weiter verarbeiten zu können.
    Sieht in der Shell etwa so aus:
    Code:
    cd /home/grabit
    youtube-dl http://youtube.com/watch?v=LnlKgtbny50
    Zweiter teil;

    Die gedownloadete Datei soll via ffmpeg convertiert werden.
    Code:
    ffmpeg -i LnlKgtbny50.flv -s 320x240 -y LnlKgtbny50.mpg
    Anschließend noch ins Directory des Webservers kopiert, und danach gelöscht werden.
    Code:
    cp /home/grabit/LnlKgtbny50.mpg /var/www/virtual/domain.xxx/htdocs/grabit/LnlKgtbny50.mpg
    rm /home/grabit/LnlKgtbny50.mpg
    rm /home/grabit/LnlKgtbny50.flv
    Das ganze möchte ich wie schon erwähnt als Benutzer "grabit" ausführen.

    Gibt es da eine Möglichkeit?

    Gruß
    Der Jay

  7. #7
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Zitat Zitat von ExeCRabLE Beitrag anzeigen
    Hi !

    Ich bin gerade dabei ein PHP-Skript zu basteln, was eine Email per PGP verschlüsselt und versendet.

    Nun habe ich das Problem, das ich als angemeldeter User root oder wwwrun das Skript ausführen kann, aber nicht als "system()"- Aufruf unter PHP....
    Versuch doch mal, die Ausgabe und Fehlerausgabe des Befehls in eine Datei zu packen und schau Dir an, ob da was Brauchbares drin steht:
    Code:
    system("<path>/gpg -e -r '<PGP-KEY ID>' -o <verschlüsselte-datei> -a <klartext-datei> >/pfad/zur/logdatei 2>&1");
    Achte aber darauf, dass das Verzeichnis der Logdatei Schreibrechte für wwwrun hat. Wenn da keine Datei ankommt, dann verhindert wohl die PHP-Konfig den system()-Aufruf, ich glaube mich an so etwas wie safe_mode erinnern zu können. Was sagt phpinfo()?

    Jan

  8. #8
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Genau. Erstmal die phpinfo() prüfen, ob die Funktion erlaubt ist.
    Dann versuch es mal mit shell_exec(), vielleicht tuts der ja.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  9. #9
    Registrierter Benutzer
    Registriert seit
    07.06.2003
    Ort
    Köln
    Beiträge
    52
    Juhu - eine Fehlermeldung

    Code:
    gpg: fatal: can't create directory `//.gnupg': Permission denied
    secmem usage: 0/0 bytes in 0/0 blocks of pool 0/32768
    Die Berechtigung auf das "gnugp"-Verzeichniss liegen auf 774. Das sollte eigentlich reichen. Was mich verunsichert ist die Angabe "//.gnupg".

    Lass ich mich da gerade verwirren, oder fehlt da eine PATH Umgebung ?!
    Unwissenheit ist Staerke

  10. #10
    Registrierter Benutzer
    Registriert seit
    07.06.2003
    Ort
    Köln
    Beiträge
    52
    shell_exec gibt die gleiche Fehlermeldung - was bei der jetzt bekannten Logmeldung auch nicht verwundert ...
    Unwissenheit ist Staerke

  11. #11
    Registrierter Benutzer
    Registriert seit
    07.06.2003
    Ort
    Köln
    Beiträge
    52
    Ok, ich habe das Problem gefunden und es funktioniert jetzt !!!

    man muss vor dem system() Auruf noch eine Umgebungvariable mit übergeben :

    Code:
    putenv("GNUPGHOME=<userhome>/.gnupg/")
    Das wars - jetzt geht alles wie es gehen sollte. Ich finde die Funktion einfach klasse ....
    Unwissenheit ist Staerke

  12. #12
    Registrierter Benutzer
    Registriert seit
    07.06.2003
    Ort
    Köln
    Beiträge
    52

    zum 2.

    Moin !

    Also, nach dem ich das Problem auf einem Server gelöst habe, habe ich jetzt auf einem anderem Server ein anderes Problem bei der Ausführung von gpg.

    Ich habe dieses mal das Problem, das der system()-Aufruf mit folgendem Fehler in der error.log des Apache abgelegt wird :

    Code:
    sh: line 1: /gpg: No such file or directory
    Ich habe das System genauso wie beim ersten Posting eingerichtet und der Web-user hast die Berechtigung (manuell ausgeführt) und es funktioniert. Wenn ich die PGP Befehlzeile per System-aufruf absetze, kommt keinerlei Fehlermeldungen, ausser die obige. Ich kann aber nicht herausfinden, wieso die Fehlermeldung erscheint - ich hoffe ihr habt da eine Ahnung.

    Ciao
    Unwissenheit ist Staerke

  13. #13
    Registrierter Benutzer
    Registriert seit
    07.06.2003
    Ort
    Köln
    Beiträge
    52
    Ok, mein Fehler

    Ich hatte "safe_mode on" auf der Domain laufen ...
    Unwissenheit ist Staerke

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •