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)