Debain Server - PHP Rechte

  • Hi,
    ich habe hier einen echt "wiederspenstigen server" :) Ich will per PHP folgenden bash-befehl ausführen:

    PHP
    $str="sudo ffmpeg -itsoffset 10 -i \"/xxx/xxx/xxx/".$filename.".mp4\" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 84x46 ".$filename.".jpg";
    // hab das mit/ohne sudo probiert


    Habe also folgendes ausprobiert:
    Bash file per php aufrufen (*.sh)
    Java per php aufrufen, dass den befehl abfeuert
    Java geschrieben, dass den Job erledigt, codecprobleme
    gerade C compiliert und damit den Befehl ausführen wollen (mit/ohne sudo)
    Keine Chance, per php gehts einfach nicht.
    Wenn ich mir aber den befehl nach der mehr oder weniger erfolgreichen ausführung ausgeben lasse und ihn dann in PuTTy eingebe, klappts immer (ausser das java-prog mit den code-probs).
    Da ich mich nicht mit Debain auskenne, schon garnicht mit der Server version bin ich hier schnell mit meinem Latein am ende. Weiss jemand wie ich PHP / Apache die Rechte gebe? Google lässt mich halbschlau.
    Habe daraus auch schon die /etc/sudoers versucht, geht nicht und ist mir pers. zu unsicher.

    P.S.:
    Das PHP Skript sowie die ganzen Executables haben 775 rechte.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Öhm, bei mir im FTP fehlt der ordner httpd im /etc verzeichnis.

    Zitat von PuTTY


    root:/etc# cd httpd
    -bash: cd: httpd: No such file or directory


    Aber ich werd dem wwwrun mal noch rechte geben. Was ist mit www-data ?
    Edit:
    Hat nicht geklappt. Meine sudoers sieht so aus:

    web1 ist ist der "Nutzer" der subdomain www.

    Aber es bleibt hoffnungslos.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    2 Mal editiert, zuletzt von Tobse (12. Oktober 2010 um 17:02)

  • Der safe mode ist aus. Nach httpd will ich wegen posting #03-11-2005, 23:28 (das letzte).
    P.S.: Der Bash befehl an HandBrakeCLI wird auch ausgeführt.

    PHP
    chdir("/var/www/web1/html/v2/html/uploader/");
            exec("cd ".dirname(__FILE__));
            $str="HandBrakeCLI -i  \"../../upload_tmp/".$f."\" -o \"../../videos/".$filename.".mp4\" -f mp4 --turbo --ipod-atom --optimize --arate ".$data[0]." -B ".$data[1]." --width ".$data[3]." --rate ".$data[4]." --encoder ".$data[5];
            exec($str);
            $str="sudo ffmpeg -itsoffset 10 -i \"/var/www/web1/html/v2/videos/".$filename.".mp4\" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 84x46 ".$filename.".jpg";
            exec($str);

    php.ini im anhang

    Dateien

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    3 Mal editiert, zuletzt von Tobse (12. Oktober 2010 um 18:19)

  • Ich will per PHP folgenden bash-befehl ausführen:

    PHP
    $str="sudo ffmpeg -itsoffset 10 -i \"/xxx/xxx/xxx/".$filename.".mp4\" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 84x46 ".$filename.".jpg";
    // hab das mit/ohne sudo probiert

    Wieso willst Du ffmpeg mit sudo starten? Das Hinterfrage ich hier als erstes. Es ist nämlich eigentlich gar nicht nötig?!

    Zitat

    Habe also folgendes ausprobiert:

    Bei all diesen versuchen übersiehst Du völlig, dass
    a) du eigentlich kein sudo brauchst
    b) du wenn Du es bräuchtest scheinbar kein Verständnis für das Rechte-System unter Linux hast

    Denn um einen Befehl auszuführen oder einen bestimmten Pfad aufzurufen, muss man nicht mit 3 oder 4 verschiedenen Programmiersprachen etwas herumprobieren sondern die Rechte für das was man tun möchte richtig setzen.

    Zitat

    Habe daraus auch schon die /etc/sudoers versucht, geht nicht und ist mir pers. zu unsicher.

    Was hast Du darüber versucht und was ist dir da unsicher? Natürlich ist es unsicher, wenn man für bestimmte Accounts einen passwortfreien Zugang gewährt, wie Du ihn hier haben möchtest. Aber wieso verwendest Du dann überhaupt "sudo" in deinem Befehl?

  • Es macht keinen unterschied ob mit oder ohne. Es funktioniert beides mal nicht. Der Befehl wird schlicht nicht ausgeführt, bzw. es enteht keine datei, anders alls wenn ich mir den ausgeführten befehl von php geben lasse und ihn im gleichen verzeichniss als root ausführe. Was hat mir das gesagt ? PHP brauch rechte xD Oder liege ich da falsch?

    Zitat von threadi


    b) du wenn Du es bräuchtest scheinbar kein Verständnis für das Rechte-System unter Linux hast


    Wie ich aus Ubuntu weiss, führt sudo einen Befehl als admin aus.
    EDIT:
    das gibt php aus:

    HTML
    <br />
    <b>Warning</b>:  copy(f7e146765fbd38ef89685d21e63a0241_1286908637.jpg) [<a href='function.copy'>function.copy</a>]: failed to open stream: No such file or directory in <b>/var/www/web1/html/v2/html/uploader/convert.php</b> on line <b>45</b><br />
    
    
    ffmpeg -itsoffset 10 -i "/var/www/web1/html/v2/videos/f7e146765fbd38ef89685d21e63a0241_1286908637.mp4" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 84x46 f7e146765fbd38ef89685d21e63a0241_1286908637.jpg

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    Einmal editiert, zuletzt von Tobse (12. Oktober 2010 um 20:38)

  • Es macht keinen unterschied ob mit oder ohne. Es funktioniert beides mal nicht. Der Befehl wird schlicht nicht ausgeführt

    Doch, wird er.

    Zitat

    PHP brauch rechte xD Oder liege ich da falsch?

    Ja.

    Zitat

    Wie ich aus Ubuntu weiss, führt sudo einen Befehl als admin aus.

    Super. Das ist aber nicht das Rechte-System von Linux. sudo ist nur ein einzelner Befehl der noch dazu auf Servern nicht durch den Webserver und somit auch nicht durch php verwendet werden sollte.

    Zitat

    das gibt php aus:

    HTML
    <br />
    <b>Warning</b>:  copy(f7e146765fbd38ef89685d21e63a0241_1286908637.jpg) [<a href='function.copy'>function.copy</a>]: failed to open stream: No such file or directory in <b>/var/www/web1/html/v2/html/uploader/convert.php</b> on line <b>45</b><br />
    
    
    ffmpeg -itsoffset 10 -i "/var/www/web1/html/v2/videos/f7e146765fbd38ef89685d21e63a0241_1286908637.mp4" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 84x46 f7e146765fbd38ef89685d21e63a0241_1286908637.jpg

    Frage 1: wieso führst Du copy aus? Du sagst doch du willst einen Befehl ausführen, aber dein Problem beruht in der copy()-Funktion. Und was das Problem ist steht auch direkt dahinter: die angebene Datei konnte nicht gefunden werden.
    Frage 2: Woher kommt das ffmpeg darunter? Sieht nach einem reinen echo aus.

    Also bitte:
    Zeig den PHP-Code (komplett!) den Du hast.
    Zeig den HTML-Code den Du beim Ausführen im Browser siehst.

  • Das ganze ist in einer ajax upload bar. Der befehl wird in einem string gespeichert und am ende aus debug- gründen nochmals ausgegeben. Das die datei nicht gefunden wurde sehe ich selbst. Aber nach dem upload iat nirgends wo das jpg file sein könnte etwas (also verzeichnis der php, speicherort von ffmpeg usw). Wenn ich aber den befehl, den php gerade ausgeführt hat und NICHT zu einem jpg geführt hat unter gleichen bedingungen (ausführungsverzeichnis, befehl ge "copy&paste"d) mit PuTTY ausführe klappts. Ich schliese daraus weder ein poroblem im copy() noch im echo(). Der code komtmt gleich.

    Ich habs gelöst. Der hacken war, dass nicht php sondern ffmpeg nicht die rechte hatte.
    in /etc/sudoers (per visduo):

    Code
    www-data        ALL=(ALL) NOPASSWD: /usr/bin/ffmpeg

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    Einmal editiert, zuletzt von Tobse (13. Oktober 2010 um 17:14)