Andreas Englert: Shutdown mit Perl.. oder so

Hi,

jetzt wende ich mich einfach mal ans Forum. Ich habe es schon geschafft, das ich bestimmten Benuzern erlauben kann , das Linux-System herunterfahren bzw. Neustarten zu können (damit der Admin nicht immer anwesend sein muss ;) ).
Auf dem Server läuft nur Samba (apache bekomme ich aber auch noch hin).
Ich wollte das ganze nun so ausweiten, dass ich per Browser auf den Server gehe und dann mit 2 Buttons die möglichkeit habe, das System herunterzufahren bzw. Neustarten zu können.
Ich habe leider keine Ahnung wie ich das machen soll. Ich kenne mich zwar in PHP und Html aus, kann aber mit Perl nichts anfangen.
Und ohne werde ich es wohl gar nicht hinbekommen.

Zur Sicherheit sei gesagt, das Netzwerk hat keine Verbindung zum
Internet.

Hoffe mir kann jemand weiterhelfen

  1. Halihallo

    jetzt wende ich mich einfach mal ans Forum.

    richtige Entscheidung *g*

    Ich habe es schon geschafft, das ich bestimmten Benuzern erlauben kann , das Linux-System herunterfahren bzw. Neustarten zu können (damit der Admin nicht immer anwesend sein muss ;) ).
    Auf dem Server läuft nur Samba (apache bekomme ich aber auch noch hin).
    Ich wollte das ganze nun so ausweiten, dass ich per Browser auf den Server gehe und dann mit 2 Buttons die möglichkeit habe, das System herunterzufahren bzw. Neustarten zu können.
    Ich habe leider keine Ahnung wie ich das machen soll. Ich kenne mich zwar in PHP und Html aus, kann aber mit Perl nichts anfangen.
    Und ohne werde ich es wohl gar nicht hinbekommen.

    Hm. Mit perl alleine geht das nicht. Du kannst aber auf Systemprogramm, wie z. B. shutdown zurückgreifen:

    #!/usr/bin/perl

    system('shutdown');

    da wäre noch zu beachten, dass der perl-prozess die nötigen Rechte für diesen "Systemeingriff" hat.

    Viele Grüsse

    Philipp

  2. Sup!

    Wenn Du APM hast (muss ja), dann sollte es die Befehle reboot bzw. halt geben - Du brauchst also nur in Perl (bzw. evtl. auch in dieser degenerierten Ablegersprache PHP) exec "reboot"; / exec "halt"; zu schreiben, wenn der entsprechende Button angeklickt wurde, und gut ist.

    Gruesse,

    Bio

    1. Sup!

      Allerdings bleibt die Frage, wie Du das machen willst, wenn kein Apache mit mod_perl oder PHP auf dem Server läuft.

      Sonst wäre es einfach; im primitivsten Fall schreibst Du zwei Perl-Skripte

      shutdown.pl
      #!/usr/bin/perl
      exec ("shutdown");

      reboot.pl
      #!/usr/bin/perl
      exec ("reboot");

      die Du ins cgi-bin vom Apache kopierst, mit chmod 755 ausstattest und die Du in der Seite ungefähr so aufrufst:

      <form action = "/cgi-bin/shutdown.pl">
      <input type="submit" value="shutdown">
      </form>

      <form action = "/cgi-bin/reboot.pl">
      <input type="submit" value="reboot">
      </form>

      Dann hast Du auch keine Probleme mit Parameterübergabe ;-)

      Wahrscheinlich werden die Skripte allerdings mit den Rechten des Websevers ausgeführt, also funktioniert das nicht... Problem ist auch, daß lokale User die ausführen könnten.

      Besser, Du machst chown root shutdown.pl reboot.pl und chmod 4750 shutdown.pl reboot.pl ... dann wird das Skript afaik mit den Rechten von root ausgeführt. Wenn Du dann die Skripten für eine Gruppe ausführbar machst, in der auch der Webserver drin ist (wahrscheinlich musst Du ihn mit usermod(8) da reinstecken), dann sollte der Webserver das Skript ausführen können, dabei root-Rechte  haben, und die User, die nicht in der Gruppe sind, sollten die Skripte nicht ausführen können...

      Gruesse,

      Bio

      Gruesse,

      Bio

  3. Hallo Andreas,

    Ich wollte das ganze nun so ausweiten, dass ich per Browser auf den Server gehe und dann mit 2 Buttons die möglichkeit habe, das System herunterzufahren bzw. Neustarten zu können.
    Ich habe leider keine Ahnung wie ich das machen soll. Ich kenne mich zwar in PHP und Html aus, kann aber mit Perl nichts anfangen.
    Und ohne werde ich es wohl gar nicht hinbekommen.

    ich glaube es gibt bei PHP auch die Möglichkeit Kommandos auf dem System auszuführen, aber mit PHP kenne ich mich absolut nicht aus ;-)

    Bei CGI mit Perl kannst du mittels
    exec('befehl');
    ein Kommando an das System weitergeben. Der Befehl wird dann mit den Rechten des Web-Servers ausgeführt. Müsstest du also nur noch ein Formular und eine Fallunterscheidung drumherum basteln. Ich denke mal mit selfhtml wird das innerhalb kürzester Zeit klappen.

    Grüße,
    Peter