Einfaches Webinterface mit .sh-Skripten verknüpfen

  • Hallo,


    ich habe bisher ein einfaches Loginskript geschrieben, welches so aussieht:


    PHP
    <form action="loginreturn.php" method="post">
    <p>Benutzername</p> <input type="text" name="benutzername"><br>
    <p>Passwort    </p> <input type="Password" name="passwort"><br>
     <input type="Submit" value="Absenden"> </form>





    Ist bisher nicht sonderlich sicher, erfüllt bisher aber auch keinen Zweck ;)


    Jetzt möchte ich machen, dass es drei einfache Buttons gibt, die folgenden Sinn haben sollten:


    Neustart: Soll einen Minecraft-Server-Neustart hervorrufen, durch ein vorhandenes restart-Skript.
    Stop: Soll einen Minecraft-Server mit einem vorhandenen Stop-Skript stoppen.
    Start: Soll einen Minecraft-Server mit einem vorhandenen Start-Skript starten.


    Alle Skripte sind bisher in .sh-Format auf dem Server vorhanden.
    Allerdings habe ich jetzt die Frage, wie ich diese über einfache Buttons ausführen lassen kann.
    Später werde ich dann auch Sessions einfügen und die Passwörter als MD5-Hash speichern, denn
    das hier ist nur für Testzwecke gedacht ;D



    Vielleicht hat hier ja jemand mehr Ahnung als ich ^^


    Danke

  • Alternativer Vorschlag:


    1. Sicherung des Zugangs per HTTP-Auth über htaccess. Erspart Tipperei.
    2. Kein Form-Element, sondern entweder Paramter in der URL oder erstmal 3 Skripte, die einfach nur in eine Datei auf dem Webserver schreiben - z.B. /var/www/minecraft/command
    4. cronjob oder besser inotifywait(1) - Linux man page der auf eine Änderung der Datei wartet und dann guckt, was in /var/www/minecraft/command drin steht.

    "Security is like an onion - the more you dig in the more you want to cry"

  • Code
    $username=="admin" OR $password=="geheim"


    Das wird ganz sicher zum Erfolg führen... :whistling:



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Code
    $username=="admin" OR $password=="geheim"


    Das wird ganz sicher zum Erfolg führen... :whistling:


    Das ist wie gesagt bisher nur ein einfaches, unsicheres Loginskript welches ich gerade in 5 Minuten gemacht habe,
    natürlich soll der Name und das Passwort nur zum Testen da sein ;)



    Alternativer Vorschlag:


    1. Sicherung des Zugangs per HTTP-Auth über htaccess. Erspart Tipperei.
    2. Kein Form-Element, sondern entweder Paramter in der URL oder erstmal 3 Skripte, die einfach nur in eine Datei auf dem Webserver schreiben - z.B. /var/www/minecraft/command
    4. cronjob oder besser inotifywait(1) - Linux man page der auf eine Änderung der Datei wartet und dann guckt, was in /var/www/minecraft/command drin steht.


    Hört sich schonmal sehr gut an, jedoch habe ich soetwas nochnie gemacht, da müsste ich mich erstmal reinlesen.
    Was ein HTTP-Auth ist, weiss ich, hab's aber noch nie selbst gemacht ^^


    Zu Schritt 2, ist damit gemeint, dass wenn ich zum Beispiel auf 'Neustart' klicke, etwas in der Datei neustart.txt eingespeichert wird und der Server dann ausliest, ob etwas drin ist
    und dann wiederrum ein anderen .sh-Skript zum Neustarten ausführt? Dann müsste die neustart.txt doch immer wieder geleert werden, oder? Aber das würde ja dann in dem Neustart-Skript
    drinstehen können, dass die "Warteschlange" dann immer geleert wird.


    Vom Prinzip her hört es sich ganz gut an, aber ich glaube ich weiss nicht, wie ich das in die Tat umsetze :S


  • Das ist wie gesagt bisher nur ein einfaches, unsicheres Loginskript welches ich gerade in 5 Minuten gemacht habe,
    natürlich soll der Name und das Passwort nur zum Testen da sein ;)


    Du verstehst mich nicht...


    Da steht: Lass mich rein, wenn ich dir sage, dass mein Benutzername "admin" ist ODER mein Passwort "geheim" lautet :rolleyes:
    Da gehört kein OR (||), sondern ein AND (&&) hin...



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)


  • Upps, war wohl ein kleiner Denkfehler drin :rolleyes:
    Danke für den Hinweis

  • Draft:

    • /var/www/minecontrol anlegen, Gruppe ( und Rechte auf den User vom Minecraftserver ändern)
    • /var/www/minecontrol/.htaccess mit inhalt füllen
    • /var/www/minecontrol/restart.php mit folgendem Inhalt anlegen:


    • Als Minecraftbenutzer folgendes Skript ausführen:


    "Security is like an onion - the more you dig in the more you want to cry"

  • Hatte gerade ne Diskussion über das Thema im IRC mit Ray.


    Zusammenfassung der über 100 Zeilen:
    Es ist nicht ohne weiteres möglich den Befehl direkt und sicher in einem PHP Script auszuführen. Eventuell geht es mit sudo [1], das können wir beide allerdings nicht testen, da kein Server vorhanden ist wo sudo drauf ist. ;)


    Ansonsten ist der Beste weg der, den vmk schon beschrieben hat.
    Den PHP Teil kann man allerdings noch erheblich vereinfachen.
    Stichwörter wären hier file_get_contents und file_put_contents.


    [1] [SOLVED] sudo for a single command with no password entry

  • Ist exec() für php zu erlauben wirklich eine gute Idee? Wenn ich exec() habe, dann lade ich mir einfach aus dem Internet eine weitere Binary runter und führe diese aus. Das sudo interessiert mich dann gar nicht mehr .-)

    "Security is like an onion - the more you dig in the more you want to cry"

  • Ist exec() für php zu erlauben wirklich eine gute Idee? Wenn ich exec() habe, dann lade ich mir einfach aus dem Internet eine weitere Binary runter und führe diese aus. Das sudo interessiert mich dann gar nicht mehr .-)

    wenn man die funktion zum öffentlichen Gebrauch freigibt, natürlich nicht, deswegen auch eine secure-area. aber wenn exec()-restriction dann auch shell_exec, popen, und andere diverse funktionen. Musst du wissen. Die Möglichkeiten sind da.

  • Draft:
    Als Minecraftbenutzer folgendes Skript ausführen:


    Tuts übrigens bei mir nicht, weil FILE nicht gefunden wird bricht inotifywait ab.

  • Naja ich denke ich mach für die Woche einfach McMyAdmin drauf, hab ich sogar noch eine Lizenz für ^^
    Währenddessen probier ich das mit dem Webinterface weiter, werd's wahrscheinlich nicht innerhalb von 2 Tagen zum Laufen bringen :P