Problem mit Befehl ausführen als Webuser

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich habe ein Problem wenn mein Webuser, wwwdata ein Skript ausführen soll.

    Normal geht das für alles wenn ichs im /ect/sudoers erlaube.
    es geht für die Skripte die ich eintrage prima

    jetzt habe ich folgendes Skript:
    xbmcpi.sh

    den send Befehl macht er aber den ssh befehl um den XBMCPI remote runterfahren macht er nicht. WIESO?

    ich habe /usr/bin/ssh im /etc/sudoers
    ich habe das xbmcpi.sh in der sudoers

    was fehlt?

  • Das Script wird ausgeführt also muss das Script in /etc/sudoers eingetragen werden

    sobald ein Script mit sudo ausgeführt wird, werden alle im Script enthaltenen Befehle mit root-Rechten ausgeführt


    Ansonsten bitte dein PHP Script sowie den Logeintrag aus /var/log/apache2/error.log zeigen ...

  • funktioniert denn der Aufruf "manuell"?

    Ansonsten evtl. Anführungszeichen?

    Code
    /usr/bin/ssh pi@192.168.2.106 'sudo /sbin/shutdown -h now  >/dev/null'
  • Manuell geht's
    Also muss es an den rechten liegen

    Also brauch ich sudo nicht mehr im Skript

    Schaue gleich mal nach Logs

    Code
    [Tue Jan 07 18:48:11 2014] [error] [client 192.168.2.102] PHP Notice:  Undefined variable: HTTP_REFERER in /var/www/homepage/steuerung/shellstart.php on line 2, referer: https://192.168.2.104/homepage/index_steuerung.php
    Permission denied, please try again.
    Permission denied, please try again.
    Permission denied (publickey,password).

    Einmal editiert, zuletzt von StillResonance1614 (7. Januar 2014 um 18:48)

  • Jein, sudo brauchst du _im_ Script weiterhin dort, wo es "remote" ausgeführt werden soll (was beim 'stop' der Fall is)


    Zeig doch mal bitte den Inhalt von shellstart.php

    (und fix den HTTP_REFERER Fehler)

    Und beachte die Fehlermeldung: Permission denied (publickey,password).

  • wie fix ich den ? hab das nur so kopiert weil cihs net besser weis mit dem Refferer

    also ich hab es sudo vor ssh weggenommen mehr net

    shelstart.php


  • wie fix ich den ? hab das nur so kopiert weil cihs net besser weis mit dem Refferer

    Naja, achte halt mal auf die Fehlermeldung:

    Code
    [Tue Jan 07 18:48:11 2014] [error] [client 192.168.2.102] PHP Notice:  Undefined variable: HTTP_REFERER in /var/www/homepage/steuerung/shellstart.php on line 2, referer:

    Was sagt die aus? -> das die Variable HTTP_REFERER nicht festgelegt wurde ... Somit kann deine if Abfrage if (!$HTTP_REFERER) so auch nicht funktionieren..

    Sauberer wäre es, generell zu prüfen ob eine Variable überhaupt gesetzt ist:


    [/quote]

    Da sehe ich noch ein paar Fehler der dir weitere Fehlermeldung ins Log werfen könnte:

    • Du prüfst nicht ob $_GET["aufruf"] überhaupt gesetzt/übergeben wurde
    • Die unteren if Schleifen sehen bischen falsch aus da der Befehl unter der if Schleife steht - das wird so nicht funktionieren.. Entweder du machst das wie in den ersten beiden Zeilen indem du $befehl in die selbe Zeile wie die if-Abfrage setzt .... also so:
      [code=php]
      if ($aufruf=="xbmcan") $befehl = "sudo /home/pi/Skripte/xbmcpi.sh start";
      if ($aufruf=="xbmcaus") $befehl = "sudo /home/pi/Skripte/xbmcpi.sh stop";
      [/php]
      Oder du nutzt wie normalerweise üblich { zum öffnen der Bedingungs-Erfüllungs-Funktion und } zum beenden, also so:
      [code=php]
      if ($aufruf=="xbmcan") {
      $befehl = "sudo /home/pi/Skripte/xbmcpi.sh start";
      }
      if ($aufruf=="xbmcaus") {
      $befehl = "sudo /home/pi/Skripte/xbmcpi.sh stop";
      }
      [/php]

    Und dann würde ich dir raten anstelle von shell_exec(); lieber exec(); zu nutzen, da wird dir nämlich zum einen die Ausgabe in ein Array geschrieben sowie ein möglicher exit Code in eine weitere Variable, die du dann abfragen kannst ob erfolgreich usw:
    [code=php]
    exec("$befehl", $output, $return_var);

    if ($return_var != 0) {
    echo "ERROR executing <b>$befehl</b><br/>";
    }
    if (!empty($output)) {
    echo "<p>";
    foreach ($output AS $line) { echo "$line<br/>"; }
    echo "</p>";
    }
    [/php]

    Und zu guter letzt wärs für die Entwicklungsphase gut wenn du in jedem PHP File ganz oben (nach dem ' <?php ') folgendes einfügst:[code=php]
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    [/php]

  • super danke

    aber er hatte die befehle immer ausgeführt hab ja andere Sachen die Klappen, die is ja eigentlich in einer Zeile ist ja nur CR dahinter und das überließt php doch

    und die httpREF hab ich damit er wieder auf meine ursprüngliche Seite geht.

    Baue es gleich mal um ;)

    der obere hat folgenden Fehler:

    Code
    [Tue Jan 07 20:24:38 2014] [error] [client 192.168.2.102] PHP Parse error:  syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /var/www/homepage/steuerung/shellstart.php on line 6, referer: https://192.168.2.104/homepage/index_steuerung.php

    und trotz
    exec();
    immer noch permisson denied


    shutdown geht jetzt, irgendwie hatte er nen alten oder flaschen ssh key

    Einmal editiert, zuletzt von StillResonance1614 (7. Januar 2014 um 21:03)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!