Webinterface für Gameserver/Shellscript wird nicht ausgeführt

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von dj_mytze, 11.08.2008.

  1. #1 dj_mytze, 11.08.2008
    Zuletzt bearbeitet: 11.08.2008
    dj_mytze

    dj_mytze Schnuffi

    Dabei seit:
    18.03.2007
    Beiträge:
    33
    Zustimmungen:
    0
    Ort:
    near Göttingen
    Guten Abend,
    ich weis die Uhrzeit ist unmenschlich, aber ich sitz jetzt seit 4h dran und komm auf keine Lösung.
    Problem ist folgendes:
    Habe mehrere Gameserver und möchte selbige per Webinterface steuern(Start, Stop, Neustart). Zum starten der Server habe ich mir Scripte erstellt, die sich per Shell auch prima ausführen lassen. Allerdings möchte ich nicht mehreren Clan-Membern Shell-Zugriff gewähren bzw gehts auch ein wenig um den Komfort :P

    Also kurz gefasst:
    Die Server sollen sich per WI steuern lassen, lassen sie sich aber nicht :D

    Aktuelles Script(für einen Server):
    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>[P.S.S.]Gameserver Webinterface</title>
    </head>
    
    <body>
    </body>
    </html>
    
    <?php
    $act = $HTTP_GET_VARS['act'];
    $output = shell_exec("./fear-start status");
    
    //  Server starten
    if ($act=="start")
    {
      $output = shell_exec("./fear-start start");
      sleep (3);
      echo"<p><b>$output</b>  <font color='#FF0000'>Server gestartet</font></p>";
    }
    
    //   Server neustarten
    elseif ($act=="restart")
    {
      $output = shell_exec("./fear-start restart");
      sleep (3);
      echo"<p><b>$output</b>  <font color='#FF0000'>Server neu gestartet</font></p>";
    }
    //   Server stoppen
    elseif ($act=="stop")
    {
      $output = shell_exec("./fear-start stop");
      sleep (3);
      echo"<p><b>$output</b>  <font color='#FF0000'>Server gestoppt</font></p>";
    }
    ?>
    <table border="0" width="80%">
    <tr>
        <td colspan="2"><h2 align="center">Serverstatus</h2></td>
    </tr>
    <tr>
        <td colspan="2" align="center">
            <table border="1">
            <tr>
                <td bgcolor="#666666" align="center"><b><?php echo $output; ?></td>
            </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td align="center" colspan="2">
        <h2>Script ausführen</h2>
        <p>Optionen<br />
        </p>
            </td>
    </tr>
    <tr>
        <td width="33%" align="right"><p><a href="index.php?act=start">Server starten</a> :</td>
        <td width="33%"><a href="index.php?act=stop">Server stoppen</a></td>
        <td width="33%"><a href="index.php?act=restart">Server neustarten</a></td>
    </tr>
    </table>
    Es fängt damit an, dass der Serverstatus nicht stimmt, was mir soviel sagt, wie dass das Script nicht funktioniert.
    Die wirklich gute Frage ist jetzt: Warum?

    Infos:
    Das php-Script liegt in einem Verzeichnis meiner Site (/.../.../pss-gaming/wi/index.php)
    Das Script zum Server steuern liegt im Verzeichnis der Gameserver(/.../.../gameservers/fear-start/

    den Verweis auf das Script habe ich per Verknüpfung gelöst

    Der Apache2 und die GS laufen natürlich unter unterschiedlichen Usern

    Das Verzeichnis für das WI habe ich per htaccess abgesichert

    OS meines Roots ist Debian 4 mit Kernel 2.6.18-6

    Stundenlanges Googeln etc hat mir nicht geholfen, jemand da ne Idee?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 blue-dev, 11.08.2008
    blue-dev

    blue-dev stranger with blue eyes

    Dabei seit:
    30.06.2007
    Beiträge:
    438
    Zustimmungen:
    0
    Htaccess hat keine Bedeutung für den Script, ich nehme eher an das es an den Usern liegt. Guck mal ob der Apache User überhaupt Rechte hat den Script auszuführen, bzw. ihn als anderen User auszuführen.
    Der Apache user hat per default sehr eingeschränkte Rechte, auf manchen Distris ist dieser sogar nobody. Da kann der nicht einfach einen Script als andere User ausführen.
    Und das wichtigste was du vergessen hast ist der Startscript (Fehlerquelle Nummer 1), vermutlich leigt da der Hund begraben.
     
  4. #3 dj_mytze, 11.08.2008
    Zuletzt bearbeitet: 11.08.2008
    dj_mytze

    dj_mytze Schnuffi

    Dabei seit:
    18.03.2007
    Beiträge:
    33
    Zustimmungen:
    0
    Ort:
    near Göttingen
    hmm, in der shell als Besitzer ausgeführt funzt es aber....
    Code:
    #! /bin/bash
    
    NAME=fearpublic
    DESC="fear - public"
    PARAMS=""
    DIR=/var/www/gameservers/fear_public/
    
    SCRIPT=start.sh
    
    DAEMON=$DIR/$SCRIPT
    
    case "$1" in
    start)
    echo "Starte $DESC: $NAME"
    cd $DIR
    killall fear-server.bin
    screen -d -m -S $NAME $DAEMON $PARAMS
    ;;
    
    stop)
    if [[ `screen -ls |grep $NAME` ]]
    then
    echo -n "Stoppe $DESC: $NAME"
    kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
    killall fear-server.bin
    echo " ... Server gestoppt."
    else
    echo "Konnte keinen laufenden -- $DESC -- finden"
    fi
    ;;
    
    status)
    if [[ `screen -ls |grep $NAME` ]]
    then
    echo "Server is running"
    else
    echo "Server is offline"
    exit 0
    fi
    ;;
    
    restart)
    if [[ `screen -ls |grep $NAME` ]]
    then
    echo -n "Stoppe $DESC: $NAME"
    kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
    killall fear-server.bin
    echo " ... Server gestoppt ... Restart wird ausgeführt"
    else
    echo "Konnte keinen laufenden -- $DESC -- finden ... Kommando Start wird ausgeführt"
    fi
    
    sleep 2
    echo -n "Starte $DESC: $NAME"
    cd $DIR
    screen -d -m -S $NAME $DAEMON $PARAMS
    echo " ... Server gestartet."
    ;;
    
    *)
    echo "Usage: $0 Parameter eingeben {start|stop|restart|status}"
    exit 1
    ;;
    esac
    
    Rechte füs das Script stehen auf 755
    Beide User befinden sich in der gleichen Gruppe und das Verzeichnis mit den Gameservern gehört dieser Gruppe.

    Wäre es nicht möglich, bei dem Scriptaufruf per php den Befehl als anderer User als der vom Apache auszuführen?
    zB mit sudo? also dass ich eine Anmeldung durchführe um einen befehl ausuführen, zb shell_exec("sudo -uUSER -pPASS ./script Befehl")

    mfg
     
  5. Ticha

    Ticha Linux Missionar

    Dabei seit:
    21.07.2006
    Beiträge:
    814
    Zustimmungen:
    0
    haste mal im netz geschaut ob es da nicht shcon fertige WI's gibt ?
     
  6. #5 dj_mytze, 11.08.2008
    dj_mytze

    dj_mytze Schnuffi

    Dabei seit:
    18.03.2007
    Beiträge:
    33
    Zustimmungen:
    0
    Ort:
    near Göttingen
    ja, aber nix was mir zugesagt habe, bzw mein Wi ist ein freies das ich gefunden habe und etwas angepasst habe....alerdings sind da fast nur spezielle Wi'S und ich hatte eigentlich vor ein universelles zu benutzen...es geht ja unterm Strich nur darum, ein Shellscript per php auszuführen....

    mfg
     
  7. #6 Always-Godlike, 11.08.2008
    Zuletzt bearbeitet: 11.08.2008
    Always-Godlike

    Always-Godlike Das Freak

    Dabei seit:
    31.12.2006
    Beiträge:
    939
    Zustimmungen:
    0
    Ort:
    Saarland
    probier mal folgendes:

    Code:
    <?php
    $output = shell_exec("whoami");
    echo $output;
    ?>
    Ich hatte auch mal so ein Webinterface geschrieben dass Shell-Skripte ausführt und irgendwann festgestellt, dass apache zwar als wwwrun die Rechte hatte, php aber als nobody lief.
     
  8. #7 donsimon1991, 11.08.2008
    donsimon1991

    donsimon1991 Eroberer

    Dabei seit:
    23.12.2007
    Beiträge:
    70
    Zustimmungen:
    0
    Hat zwar nicht mit der Programmierung zu tun, ist aber trotzdem wichtig, damit Anfänger so etwas nicht nachmachen: du versuchst nach dem schließenden </html>-Tag noch mehr Code anzuhängen. Das soll aber alles in den Body (also zwischen <body> und </body>).
     
  9. Ticha

    Ticha Linux Missionar

    Dabei seit:
    21.07.2006
    Beiträge:
    814
    Zustimmungen:
    0
    ich hatte das vor langer langer zeit auch mal gemacht. Aber habe ich "System("")" benutztbei php. Naja.. is schon lange her.

    ich bin die ganze zeit shcon am überlegen wie ich ein PHP skirpt schreiben könnte, das ich über einen knopfdruck einen rechner hoch oder runter fahren könnte. Weil ich zu faul bin 3m zu laufen und keinen lust auf Tip Arbeit per SSH habe xD

    also wenn du da nen tip hast sag an :D
     
  10. #9 dj_mytze, 11.08.2008
    Zuletzt bearbeitet: 11.08.2008
    dj_mytze

    dj_mytze Schnuffi

    Dabei seit:
    18.03.2007
    Beiträge:
    33
    Zustimmungen:
    0
    Ort:
    near Göttingen
    ups sry, voll verpennt bzw übersehen^^

    wir natürlich geändert :P

    werds mal eure tips testen muss aber schnell noch ein paar gameserver umschreiben....melde mich dann

    mfg

    Update:
    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>[P.S.S.]Gameserver Webinterface</title>
    </head>
    
    <body>
    
    <?php
    $output = shell_exec("whoami");
    echo $output;
    
    $act = $HTTP_GET_VARS['act'];
    $output = shell_exec("./fear-start status");
    //  Server starten
    if ($act=="start")
    {
      $output = shell_exec("./fear-start start");
      sleep (3);
      echo"<p><b>$output</b>  <font color='#FF0000'>Server gestartet</font></p>";
    }
    
    //   Server neustarten
    elseif ($act=="restart")
    {
      $output = shell_exec("./fear-start restart");
      sleep (3);
      echo"<p><b>$output</b>  <font color='#FF0000'>Server neu gestartet</font></p>";
    }
    //   Server stoppen
    elseif ($act=="stop")
    {
      $output = shell_exec("./fear-start stop");
      sleep (3);
      echo"<p><b>$output</b>  <font color='#FF0000'>Server gestoppt</font></p>";
    }
    ?>
    <table border="0" width="80%">
    <tr>
        <td colspan="4"><h2 align="center">Serverstatus</h2></td>
    </tr>
    <tr>
        <td colspan="4" align="center">
            <table border="1">
            <tr>
                <td bgcolor="#666666" align="center"><b><?php echo $output; ?></td>
            </tr>
            </table>    </td>
    </tr>
    <tr>
        <td height="70" colspan="4" align="center">
        <h2>Script ausführen</h2>
        <p>Optionen<br />
        </p>        </td>
    </tr>
    <tr>
        <td width="46%" align="right"><p><a href="index.php?act=start">Server starten</a> :</td>
        <td width="10%" align="center"><a href="index.php?act=stop">Server stoppen</a></td>
        <td width="44%" align="left"><a href="index.php?act=restart">Server neustarten</a></td>
    </tr>
    </table>
    </body>
    </html>
    
    funzen tuts immer noch nicht^^, aber die optik habe ich jetzt ein bissl angepasst xD
    habe irgendwie das gefühl, dass es mit der Rechte Verwaltung zusammen hängt...lässt sich da nix machen in Richtung sudo?
     
  11. #10 dj_mytze, 12.08.2008
    dj_mytze

    dj_mytze Schnuffi

    Dabei seit:
    18.03.2007
    Beiträge:
    33
    Zustimmungen:
    0
    Ort:
    near Göttingen
    keiner mehr ne kleine hilfestellung für mich?
     
  12. #11 Always-Godlike, 12.08.2008
    Always-Godlike

    Always-Godlike Das Freak

    Dabei seit:
    31.12.2006
    Beiträge:
    939
    Zustimmungen:
    0
    Ort:
    Saarland
    Du solltest den Script in ne eigene Datei packen und ausführen. Da sollte dir dann etwas angezeigt werden.
     
  13. #12 dj_mytze, 12.08.2008
    dj_mytze

    dj_mytze Schnuffi

    Dabei seit:
    18.03.2007
    Beiträge:
    33
    Zustimmungen:
    0
    Ort:
    near Göttingen
    öhm...

    also was soll alles in ein extra script??? und wie soll ich das miteinander verknüpfen?oder in welcher reihenfolge?

    bzw, gehts etwas detailierter, steh gerade voll aufm schlauch???:hilfe2:

    dank im vorraus...
     
  14. #13 dj_mytze, 13.08.2008
    dj_mytze

    dj_mytze Schnuffi

    Dabei seit:
    18.03.2007
    Beiträge:
    33
    Zustimmungen:
    0
    Ort:
    near Göttingen
    ok, also, bin jetzt weiter gekommen:
    script
    Code:
    <?php
    $output = shell_exec("whoami");
    echo $output;
    ?>
    
    gibt "www-data" aus

    wenn ich den eigentümer des entsprechenden Gameserver-verzeichnisses auf www-data setze, funktioniert mein wi logischerweis auch.

    allerdings würde ich gerne den server als user gamer steuern...was auf die art und weise nicht möglich ist^^

    Anregungen erwünscht :P

    mfg
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 supersucker, 13.08.2008
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Und was hindert dich daran

    Code:
    man sudo
    zu lesen, wenn du selber schon festgestellt hast, das das eine Möglichkeit sein könnte?
     
  17. #15 dj_mytze, 13.08.2008
    dj_mytze

    dj_mytze Schnuffi

    Dabei seit:
    18.03.2007
    Beiträge:
    33
    Zustimmungen:
    0
    Ort:
    near Göttingen
    dass ich zu doof das manual umzusetzen, bzw ich einfach nicht raffe, wie ich die sudoers anpassen muss, damit es geht.

    dafür, habe ich mein Script jetzt soweit fertig, dass funzt, zumindest für den user www-data.

    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <title>[P.S.S.]Gameserver Webinterface</title>
    </head>
    
    <body bgcolor="#000000">
    <?php
    $act = $HTTP_GET_VARS['act'];
    $output3 = shell_exec("./fear-start status");
    $output2 = shell_exec("./fear-start name");
    // Status abfragen
    if ($act=="status")
    {
    	$output = shell_exec("./fear-start status");
    	sleep (3);
    }
    
    //  Server starten
    elseif ($act=="start")
    {
      $output = shell_exec("./fear-start start");
      $output3 = shell_exec("./fear-start status");
      sleep (3);
    }
    
    //   Server neustarten
    elseif ($act=="restart")
    {
      $output = shell_exec("./fear-start restart");
      $output3 = shell_exec("./fear-start status");
      sleep (3);
    }
    //   Server stoppen
    elseif ($act=="stop")
    {
      $output = shell_exec("./fear-start stop");
      $output3 = shell_exec("./fear-start status");
      sleep (3);
    }
    ?>
    </p>
    <table width="1000" height="411" border="0" align="center">
      <tr>
        <td height="56" colspan="2" bgcolor="#FFFFFF"><strong><u>Servername:</u></strong> <i><font color="#FF0000"><?php echo $output2 ?></font></i></td>
        <td bgcolor="#FFFFFF"><strong><u>Server-Status:</u></strong> <i><?php echo $output3 ?></i></td>
      </tr>
      
      <tr>
        <td colspan="4" bgcolor="#FFFFFF"><strong><u>Server-Meldung:</u></strong> <i><font color="#FF0000"><blink><?php echo $output ?></blink></font></i></td>
      </tr>
      <tr>
        <td height="79" colspan="4" bgcolor="#FFFFFF"><div align="center"><strong><u><font color="#FF0000" size="+3">Optionen</font></u></strong></div></td>
      </tr>
      <tr>
        <td width="243" bgcolor="#FFFFFF"><p align="center"><a href="index.php?act=start">Start</a></p>    </td>
        <td width="243" bgcolor="#FFFFFF"><div align="center"><a href="index.php?act=stop">Stop</a></div></td>
        <td width="243" bgcolor="#FFFFFF"><div align="center"><a href="index.php?act=restart">Restart</a></div></td>
        <td width="253" bgcolor="#FFFFFF"><div align="center"><a href="index.php?act=status">Status(Refresh)</a></div></td>
      </tr>
      <tr>
        <td colspan="4" bgcolor="#FFFFFF"><p align="center"><strong><u>Server-Config bearbeiten<br />
        </u><font size="-1"><em>(erfordert Neustart zum &uuml;bernehmen)</em></font></strong></p>
    <!-- Textfeld um die Server-Config zu aendern -->
    <center>
    <?php
    
    $file = "/var/www/gameservers/fear_public/ServerOptions/ServerOptions.txt";
    
    if (isset($_POST['gesendet'])) {
    
    $datei_speichern = fopen($file, "w");
    $_POST['text'] = htmlentities(stripslashes($_POST['text']));
    if(fwrite ($datei_speichern, $_POST['text'])){
    echo "<i>-- Änderungen erfolgreich gespeichert --</i><br/>";
    }else{
    echo "<i>-- Fehler beim speichern --</i><br/>";
    }
    fclose($datei_speichern);
    
    }
    
    echo "<form name=\"form1\" method=\"post\">";
    echo "<textarea name=\"text\" cols=\"90\" rows=\"30\">";
    echo file_get_contents($file);
    echo "</textarea><br/>";
    echo "<input type=\"submit\" name=\"gesendet\" value=\"Speichern\"/>";
    echo "</form>";
    
    
    ?>
    </center>
    <!-- Textfeld Ende -->
    	</td>
      </tr>
    </table>
    <p>&nbsp;</p>
    </body>
    </html>
    
    kann mir noch jemand mit der sudoers helfen? ansonsten kann ich auch damit leben, dass die Gameserver als user www-data ausgeführt werden

    danke nochmal
    mfg
     
Thema:

Webinterface für Gameserver/Shellscript wird nicht ausgeführt

Die Seite wird geladen...

Webinterface für Gameserver/Shellscript wird nicht ausgeführt - Ähnliche Themen

  1. gute usenetclient für kommandozeile und mit webinterface

    gute usenetclient für kommandozeile und mit webinterface: Hallo, kennt jamand nen guten usenet client (ich hab debian lenny) der mehrere server beherrscht, ein webinterface bietet und auch aus der...
  2. Webinterface für Gameserver

    Webinterface für Gameserver: Hi!! Wir bieten auf unserem Root-Server Gameserver an, und ich möchte gerne ein eigenes Webinterface dafür schreiben und wäre Froh, wenn ihr...
  3. FreeBSD-Updates - Webinterface

    FreeBSD-Updates - Webinterface: Ich habe ein kleines Webinterface geschrieben, um über aktuell anstehende Ports-/Package Updates informiert zu sein. Ziel war es eine Liste mit...
  4. Musik Server mit Webinterface

    Musik Server mit Webinterface: Hallo, ich bin auf der Suche nach einer Musik Server Software. Damit meine ich einen Daemon der bei mir auf dem Server läuft und Musik per...
  5. Webinterface zur Zentralen Updateverwaltung

    Webinterface zur Zentralen Updateverwaltung: Hi Leute, Wollte mal Fragen ob ihr irgendeine tolle Software kennt mit der man mehrere debianbasierte Linuxe von zentraler Stelle aus updaten...