EDV-Beratung K. H. Meyer

Linux / Novell-Umstieg

Wie steigt man elegant und "sanft" von Novell auf Samba um?

Günstig ist es, dafür zu sorgen, dass bisherige Novell-User und neue Samba-User auf den gleichen Datenstamm zugreifen. Dies schafft man indem der Samba-Server gleichzeitig Novell-Client ist und die Novell-Volumes gemoutet hat. So hat man Zeit, die Clients vom Novell IPX-Treiber auf  TCP/IP umzustellen. Etwas Performance geht dadurch natürlich verloren. Aber gleich als Warnung: Wer sich an das Caching und die Leistungsfähigkeit der Novell-IPX-Treiber und Netware selbst gewöhnt hat, wird von Samba erst einmal enttäuscht sein.

Massnahmen:

1. Novell-Client auf Linux/Samba einrichten.
Der Kernel muß IPX unterstützen und das NCP-Filesystem installiert sein, was bei neueren Distributionen üblich ist.

2. Anlegen einen Mount-Nodes. In diesem Beispiel /novell mit den Permissions 600.

3. Dann sind z.B. bei SuSE in der Startdatei  /sbin/init.d/rc (V7.2: /etc/init.d/rc) folgende Einträge zu machen:
ipx_interface add -p eth0
ncpmount -S <Novell-Servername> -U <Novell-Username> -P <Passwort> -V <Volumename> /novell

Der erste Befehl bindet das IPX-Protokoll, der zweite mountet das NW-Volume im Directory /novell. Der angegebene User muss maximal erforderlichen Zugriff besitzen.

Jetzt erscheint nach dem Booten oder nach manueller Eingabe der og. Befehle der Inhalt des NW-Volumes im Verzeichnis /novell. So weit so gut, aber praktisch hat man noch nicht viel erreicht. Als nächstes wird eine Kopie der blanken Verzeichnisse des /novell-Ordners angelegt, zB. im Verzeichnis /home/public. Diese sollen später einmal Zug um Zug die Daten des NW-Server beinhalten. Jede Verzeichniskopie wird mit einer entsprechenden  Gruppenkennung und -Namen versehen, auf 770 gesetzt und das GID-Bit aktiviert. Diese Unix-Gruppen sollen später einmal die Zugriffsrechte managen und bereits jetzt auch beim Zugriff auf den Novellserver funktionieren.

Jetzt kommt ein selbstgeschriebenes Anmeldeskript (/usr/local/bin/mklinks) für Samba ins Spiel, welches das lokale /home/public mit dem gemounteten /novell unter einen Hut bringt. Dieses ist in der smb.conf angegeben. Hier ergeben sich große Analogien zum nächsten Tipp:

[public]
      path = /home/users/%u 
      # Pfad auf  die Link-Liste. %u enthält  den Usernamen
      read only = "no"
      browsable = "no"
      # Dadurch erscheint /public selbst nicht im Explorer
      root preexec = /usr/local/bin/mklinks %u
      # Als Root ausführen ist wichtig. Sonst gibt's evtl. Probleme beim
      # Anlegen der Liste, wenn /home/users/%u nicht vorhanden ist.
      

Das folgende Preexec-Script stellt nun fest, welchen Gruppen der User angehört und baut sich eine entsprechende Liste von "erlaubten" Verzeichnissen aus /home/public auf. Dann sieht es nach, welche Verzeichnisse dieser Liste in /novell vorhanden  sind. Für gleichzeitig vorhandene Directories wird ein Link auf das Novell-Verzeichnis generiert, ansonsten einer auf /home/public/xxx. Diese Linkliste wird dem User als individuelle Ressource /public im Verzeichnis /home/users/<username> zur Verfügung gestellt. Zusätzlich werden Verzeichnisnamen vor dem Vergleich auf Namensgleichheit in Kleinbuchstaben konvertiert. Schließlich unterscheidet Novell nicht zwischen Groß- und Kleinbuchstaben.

#!/bin/sh

# Übergabeparameter $1 = login-name
# Dieses Script wird ausgeführt, wenn die public-Resc. in smb.conf
# ausgeführt wird

umask 022

cd /novell
novlist=`ls -d -A * | tr [:upper:] [:lower:]`

# Hier holt Samba die Infos
cd /home/users

#rm-Befehl: -f force, -r rekursiv

rm -rf "$1"
mkdir "$1"

cd "$1"

# cut-Kommando: -f<FeldNummer> -d<Delimiter>

for gr in `groups $1 | cut -f2 -d":"`
do
   # Liste alle Directories mit dem Gruppennamen $gr
   
   filelist=`find /home/public -group $gr -type d -maxdepth 1`

   for file in $filelist
   do 
      if test $file != "/home/public"
      then
         # Wenn die Datei nicht der angeg. Node ist, dann
         # Datei linken
         ftest1=`ls -d $file | tr [:upper:] [:lower:]`;
         #isoliere Namen ohne Pfad
         pfile=${ftest1##*/};
         found=0;
         #Name auf Novell-Server vorhanden?
         for nfile in $novlist

         do
            if test $nfile == $pfile
            then
               found=1;
            fi 
         done

         if test $found -eq 1
         then
            ln -s /novell/$pfile;
         else
            ln -s $file;
         fi 
      fi 
   done

done

Soll nun ein Verzeichnis auf den Sambaserver übernommen werden, sind nur die Daten aus dem Novellserver dorthin zu kopieren und das Verzeichnis auf dem Novellserver für den Benutzer "Samba" verschwinden zu lassen. Nach erneutem Anmelden eines Clients am Samba-Server sieht er dann den lokalen Datenbestand.

Wichtig ist, dass unter älteren Unix-Versionen eine andere Art von Benutzerrechtenvergabe vorliegt als unter Novell. Ein Verzeichnis kann immer nur einer einzigen Gruppe zugeordnet sein, nicht mehreren. Ein User kann allerdings aber auch mehreren Gruppen zugehörig sein. Es ist also nicht möglich, unter Unix ein und das selbe Verzeichnis einer Gruppe "Darf-fast-alles" mit Lese/Schreib-Rechten zuzuordnen und gleichzeitig einer Gruppe "Darf-fast-nix" mit Nur-Lese-Rechten. Durch geeignete Planung und Nutzung der Links unter Unix lässt sich aber etwas ähnliches "Zusammenpfuschen".

Die angegebenen Lösungsvorschläge und Tipps entstammen größtenteils unserer Praxis. Es kann aber keine Gewähr übernommen werden. Eine Haftung für Schäden, die eventuell aus der Anwendung entstehen, wird nicht übernommen.