![]() |
![]() |
![]() |
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.
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.
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:
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.)
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.
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;
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
Getestet wurden
Es gibt auf dem Weg zum erfolgreichen Einsatz von Magic Scripts eine ganze Reihe von Stolpersteinen.
Folgende Hinweise sollten unbedingt beachtet werden:
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:
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)
![]() |
![]() |
![]() |