EDV-Beratung K. H. Meyer

Linux / Samba / "Unerlaubte Verzeichnisse im Explorer sichtbar"

Novell ab V4.0 verbirgt oder versteckt Verzeichnisse ohne ausreichende Zugriffsrechte im Explorer vor dem Anwender. Bei Samba tauchen diese jedoch auf und verursachen eine Fehlermeldung beim Anklicken. Wie läßt sich das analog Novell einrichten?

Mit reinen Einstellungsänderungen in der smb.conf leider nicht. Mit einem Trick in Form eines Shell-Scriptes klappt's jedoch ganz gut für Verzeichnisse. Wenn's unbedingt sein muss mit Änderungen auch für Dateien. Funktionsweise: Beim Zugriff auf eine Ressource wird über Samba ein Preexec-Script ausgeführt, welches eine Liste von Links auf Verzeichnisse erzeugt, welche zu den Gruppenzugehörigkeiten des Anwenders passen. Dazu ist es erforderlich, dass bei den Verzeichnissen das SET GID-Bit gesetzt ist und für Schreib-/Lesezugriff die Rechte 770 vergeben sind. Das GID-Bit bewirkt, dass unabhängig von der primären Gruppe des Anwenders Dateien in diesem Verzeichnis immer der Gruppe des Verzeichnisses zu geordnet werden, nicht der des Eigentümers.

Zum Ausführen des Preexec-Scripts ist in der /etc/smb.conf folgender Eintrag zu machen:

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

Das Script zur Erzeugung der Linkliste (/usr/local/bin/mklinks) kann beispielweise mit dem mc angelegt werden und enthält die folgenden Zeilen:

#!/bin/sh
   umask 022
   # Hier holt Samba die Infos
   cd /home/users
   #$1 enthält den Benutzernamen
   rm -rf "$1"
   #rm-Befehl: -f force, -r rekursiv
   mkdir "$1"
   cd "$1"
   for gr in `groups $1 | cut -f2 -d":"`
     # cut-Kommando: -f<FeldNummer> -d<Delimiter>
     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"
               # Wenn die Datei nicht das angeg. Root-Dir ist, dann
               # Datei linken. /home/public enthält die Share-Daten 
            then
                  ln -s $file
            fi 
         done
   done

Sobald im Explorer die Netzwerkressource Groups angesprochen wird, setzt sich die Maschinerie in Gang. Verbinden Sie am besten Groups mit einem Laufwerk. Nach dessen Anklicken erscheinen nur noch Ordner, welchen den Gruppen des Anwender angehören. Das Schöne an dieser Lösung ist, dass in der smb.conf-Datei nichts mehr weiter eingetragen werden muss, auch dann nicht, wenn neue Ordner hinzukommen.

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.