Vorheriger Abschnitt Inhaltsverzeichnis Nächster Abschnitt

11.4 Einrichtung und Nutzung von Magic Scripts

Ein Magic Script ist ein unter Linux ausführbares Script, das von einem beliebigen Clienten über eine spezielle Samba-Freigabe auf den Server kopiert und dort sofort automatisch so ausgeführt wird, als wäre es an der Konsole gestartet worden. Der Client kann im Prinzip mit einem beliebigen Betriebssystem laufen, erfolgreich getestet wurden DOS, Windows-98 und Windows-XP mit BASH- und Perl-Scripts.
 

Wie aktiviert man Magic Scripts?

Die Magic-Script-Option lässt sich in der smb.conf für jede Samba-Freigabe einzeln einstellen, von Haus aus ist sie deaktiviert.

     [mymagicshare]
comment = Spezielle Freigabe fuer Magic Scripts
path = /home/magicscripts
valid users = @lehrer
admin users = @lehrer
write list = @lehrer
magic script = magic_script
magic out = magic_out


Nach Anlegen eines entsprechenden Ordners für die Freigabe und einem Neustart von Samba ist der Server bereit für Magic Scripts. Sobald man ein Script mit dem Namen magic_script von einem Client aus in die Freigabe kopiert, wird sie ausgeführt und gleich danach wieder gelöscht.

Soweit das Handbuch und die Theorie - in der Praxis funktioniert die Geschichte leider so nicht!

Wegen eines Bugs darf die Datei mit dem Script nicht in die Freigabe selbst sondern muss in einen beliebigen Unterordner dieser Freigabe kopiert werden, der vorher natürlich angelegt und mit den entsprechenden Rechten (z.B. 0770) versehen sein muss.

Sobald in diesen Ordner ein gültiges Script mit dem richtigen Namen kopiert wird, wird es 'wie von Zauberhand' ausgeführt und anschließend sofort wieder gelöscht. Ein einfaches Beispielscript:

     #!/bin/sh
rm -f /home/magicscripts/magic_out
ls -l /home/tmp

An der Konsole ausgeführt löscht es die Datei magic_out und zeigt den Inhalt des Austauschverzeichnisses am Bildschirm an. Wenn man es von einem Clienten aus mit

copy meinbeispielscript \\arktur\mymagicshare\magbug\magic_script

unter dem Namen magic_script in den Ordner magbug der Samba-Freigabe mymagicshare kopiert, wird es ohne weiteres Zutun ebenfalls sofort ausgeführt und anschließend gelöscht. Die Ausgabe von ls findet sich anschließend in der Datei magic_out wieder.
 

Beispiel für ein magisches Perl-Script

Unter Windows 98 hat der Administrator keine Möglichkeit, den Besitzer der Dateien auf Laufwerk t: zu ermitteln. Mit dem folgenden Perlscript werden alle Dateien des Austauschverzeichnisses mit ihren Besitzern aufgelistet, wobei nach dem Besitzer sortiert wird. Es ist also nur eine modifizierte Variante des ersten Scripts.

     #!/usr/bin/perl -w

unlink('/home/magicscripts/magic_out');

my @liste = (); my $user = ""; my $datei = "";
my @zeilen = `ls -l /home/tmp` ;
foreach my $zeile (@zeilen) {
if ($zeile =~ m/^-\S{9}\s*\d+\s(\w+).*\s(\S+$)/) {
push @liste, $1.' '.$2;
}
}
foreach my $element (sort @liste) {
($user, $datei) = split /\s+/, $element;
printf("%-15s %-20s \r\n",$user, $datei);
}

So können Sie es auf dem Lehrerplatz zur Verfügung stellen:

  1. Kopieren Sie dieses Script in eine Textdatei und speichern sie diese unter dem Namen Dateien_auf_LW_T auf Laufwerk P:\.
  2. Sorgen Sie dafür, dass die Zeilenumbrüche im Linuxformat sind (z.B. mit Phase 5, 'Speichern im Unix-Format').
  3. Kopieren Sie diese Datei auf den Server, z.B. in die magische Freigabe (copy Dateien_auf_LW_T  \\arktur\mymagicshare\mtest).
  4. Melden Sie sich (z.B. über Putty) am Server mit den Rechten an, die der Lehrer hat, der das Script später mal aktivieren soll.
  5. Wechseln Sie in das Verzeichnis (cd /home/magicscripts) und testen Sie das Script (./mtest). Die Dateien auf Laufwerk T: sollten sortiert nach ihren Benutzern am Bildschirm vorbeirauschen, im Ordner /home/magicscripts darf anschließend keine Datei magic_out mehr sein.
  6. Wenn das Script funktioniert, erstellen Sie eine Batchdatei magic.bat mit folgendem Inhalt:

        del  \\arktur\mymagicshare\magic_out
        copy Dateien_auf_LW_T  \\arktur\mymagicshare\magbug\magic_script
        TYPE NUL | CHOICE.COM /N /CY /TY,1 >NUL
        notepad \\arktur\mymagicshare\magic_out

     
  7. dann erstellen Sie eine Verknüpfung auf dem Desktop geben ihr z.B. den Namen "Auflistung der Dateien von Laufwerk t"
     

     
  8. Legen Sie die Datei arktur.ico (Download) ebenfalls auf Laufwerk P: ab, rufen Sie mit der rechten Maustaste die Eigenschaften der Verknüpfung auf und ändern Sie das Symbol in arktur.ico .
  9. Wählen Sie bei Ausführen "minimiert" und setzen Sie "Beim Beenden schließen" ein Häkchen.
     

     

Wenn man das erledigt hat, erhält man auf dem Desktop das folgende Symbol:

Ein Doppelklick auf dieses Symbol startet die verknüpfte Batch-Datei, die ihrerseits das Perlscript mit dem richtigen Namen in die magische Freigabe kopiert und eine Sekunde später die Ausgabe mit Notepad anzeigt. (Script und Batchdatei wurden so unter Windows 98 getestet.)
 

Mehrere Scripte verwalten

Wenn mehrere Scripte im Einsatz sind, ist die Bereitstellung über jeweils eine eigene Verknüpfung vielleicht nicht so geeignet, denn der Desktop wird dann schnell unübersichtlich. Abhilfe schafft da vielleicht das speziell für einen derartigen Zweck entwickelte Tool "Samba Magic Script Tray Programm" oder ein selbst geschriebenes Programm.
 

Beispiel für einen Zugriff auf den Server über ein Delphi-Programm

Eine sehr flexible Verwaltung von magischen Scripten bietet natürlich ein eigenes Programm, das die Scripte in geeigneter Weise gleich in der magischen Freigabe generiert. An einem Delphi-Programm wird hier der entscheidende Teil demonstriert.

Man beachte die unixtypischen Zeilenenden (nur LineFeed). Der Einsatz von 'writeln' würde das generierte Script unbrauchbar machen, da diese Anweisung hinter jede Zeile die DOS-übliche Kombination aus Carriag-Return und LineFeed einfügen würde.
Sobald die Datei geschlossen (closefile) wird, wird sie auf dem Server auch schon ausgeführt und gleich wieder gelöscht.

     PROCEDURE Erzeuge_magic(user:string);
CONST
lf = #$0A;
VAR
mDatei : text;
BEGIN
try
Assignfile(mDatei,'\\arktur\mymagicshare\magbug\magic_script');
Rewrite(mDatei);
Write(mDatei,'#!/bin/sh',lf);
Write(mDatei,'rm -f /home/magicscripts/magic_out',lf);
Write(mDatei,'ls -l /home/'+user,lf);
CloseFile(mDatei);
except
ShowMessage('Datei magic_script kann nicht erstellt werden!');
end;
END;


Was bringen Magic Scripts für den Systemadministrator?

Mit Hilfe von Magic Scripts kann ein Systemadministrator mehr oder weniger komplexe Vorgänge, die von eher unbedarften Usern auf dem Server ausgeführt werden sollen, hinter einem einfachen Mausklick verbergen. Die Einsatzmöglichkeiten sind dabei nahezu unbegrenzt:

Die Möglichkeiten von Magic Scripts sind damit aber noch lange nicht erschöpft. Mit ihnen lassen sich natürlich auch selbstgeschriebene Programme starten, die direkt auf dem Server ausgeführt werden, sogar die Übergabe von Parametern ist möglich. Die benutzte Programmiersprache ist dabei völlig gleichgültig, solange es unter Linux eine entsprechende Programmierumgebung gibt.

Damit könnten sich auch die (Pascal-)Programmierer angesprochen fühlen, für die ein Shell-Script nichts weiter ist als der

und für die Perl vielleicht so aussieht wie
.

Getestet wurden

Alle auf dem Server eingesetzten Programme müssen unter Linux compiliert werden und sollten mit dem aufrufenden Script an der Konsole mit den Rechten ausprobiert werden, mit denen sie später über die Magic-Script-Option gestartet werden. Die Konsolenausgabe der Programme findet sich später in der Datei magic_out wieder.
 

Wenn es nicht funktioniert ...

Es gibt auf dem Weg zum erfolgreichen Einsatz von Magic Scripts eine ganze Reihe von Stolpersteinen. Folgende Hinweise sollten unbedingt beachtet werden:

Maßnahmen zur Erhöhung der Sicherheit

Es sei hier noch eimal deutlich darauf hingewiesen, dass die Aktivierung der Magic-Script-Option für eine Samba-Freigabe ein nicht zu unterschätzendes Sicherheitsrisiko für einen Server darstellt, denn derjenige, der in einer solchen Freigabe das Schreibrecht besitzt, hat sozusagen einen Shell-Account!
Hier einige Maßnahmen, die helfen sollen, dieses Risiko zu vermindern:


Weiter führende Links und Seiten, die bei der Erstellung dieser Seite geholfen haben:

Das Samba Manual
Kurzanleitung des Berufsschulzentrums Hermsdorf
Samba Magic Script Tray Programm kann beliebige Shell-Scripte auf dem Server starten (passende Zugriffsrechte vorausgesetzt).
Konkrete Beispiele (auch zum Downloaden)


Vorheriger Abschnitt Inhaltsverzeichnis Nächster Abschnitt
© Alfred Bergkemper, Hans-Dietrich Kirmse 26.07.04