Der File- und Printserver Samba zählt zu den Kronjuwelen der freien Software: Er sorgt dafür, dass Linux und Windows im Netzwerk einträchtig zusammenarbeiten.
Seit den 90er Jahren verwendet Microsoft das Protokoll SMB (Server Message Block) sowie dessen Vorgänger NetBIOS und NetBEUI zur Freigabe von Verzeichnissen und Druckern im Netzwerk. Ursprünglich für den Datenaustausch zwischen den Unix-Systemen Sun OS und Ultrix konzipiert, begann der Erfinder Andrew Tridgell Ende 1993 mit der Portierung der Samba-Suite [1] auf Linux, um den Zugriff auf das Windows-Netzwerk auch für dieses Betriebssystem zu ermöglichen.
Die aktuellste stabile Release ist derzeit Version 3.23c. Die Entwicklerversion 4 bietet als wichtigste Neuerung einen ADS-Controller (Active Directory Service), taugt aber nach Angaben des Samba-Teams in frühestens zweieinhalb Jahren für den Produktiveinsatz.
Zwar implementiert Samba nach wie vor noch nicht alle Features von Windows-SMB. Das liegt jedoch in erster Linie daran, dass Microsoft nach wie vor die Interna der eigenen Anpassungen nicht preisgibt. Ungeachtet dessen verfügt Samba (Abbildung 1) zwischenzeitlich über einen beachtlichen Funktionsumfang, der den meisten Anwendungsfällen ohne weiteres gerecht wird.

Abbildung 1: Der Samba-Server erlaubt Windows-Clients den Zugriff auf freigegebene Linux-Verzeichnisse und Drucker.
Samba-Client
Der Samba-Client ermöglicht den Zugriff auf Netzwerkfreigaben (Shares) sowohl von Windows-Betriebssystemen als auch auf die von Samba-Servern. Die einfachste Variante, ein SMB-Share zu öffnen, bietet der KIO-Slave smb. Die Eingabe von smb:/ in der Adressleiste von Konqueror zeigt als Ergebnis alle im Netz verfügbaren SMB-Ressourcen nach Arbeitsgruppen gegliedert. Ein Klick auf die gewünschte Freigabe öffnet (sofern diese passwortgeschützt ist) den Authentifizierungsdialog.
Eine zweite Möglichkeit, auf SMB-Freigaben zuzugreifen, bietet das Kommandozeilen-Programm smbclient. Der Aufruf smbclient //Server/Share -U Benutzer – beispielsweise smbclient //pc1/txt -U fritz öffnet nach der Eingabe des Passworts ein Terminalfenster im gewählten Remote-Share. Alternativ geben Sie anstelle des Servernamens die IP-Adresse an. Ähnlich wie bei kommandozeilenbasiertem FTP erfolgt der Dateitransfer zwischen den Rechnern via get und put.
Wie NFS bringt auch Samba das passende Werkzeug mit, um SMB-Freigaben direkt in den lokalen Verzeichnisbaum einzuhängen. Der Aufruf smbmount //Server/ShareMountpunkt -o username=User mountet die Freigabe nach Eingabe des Passworts in das gewählte Verzeichnis. Möchten Sie die Freigabe dauerhaft auf Ihrem Rechner einrichten, fügen Sie folgenden Eintrag der Datei /etc/fstab hinzu:
//Server/Share Mountpunkt smbfs username=User,password=Kennwort 0 0
Der Eintrag könnte beispielsweise lauten:
//pc1/txt /media/pc1/ smbfs username=fritz,password=fischer 0 0
Da die für alle lesbare Datei /etc/fstab in diesem Fall das Loginpasswort im Klartext enthält, empfiehlt sich als sicherere Alternative das Verwenden eines so genannten Credentials Files, das die Anmeldeinformationen im Format
username = User password = Kennwort
enthält. Ändern Sie die Zugriffsberechtigungen mit chmod 400 Kennwortdatei und modifizieren Sie den Eintrag in der /etc/fstab folgendermaßen:
//pc1/txt /media/pc1/ smbfs credential=Kennwortdatei 0 0
Damit steht Ihnen die ausgewählte Freigabe auch nach einem Neustart des Clients automatisch zur Verfügung.
Samba-Server
Den Dreh- und Angelpunkt des Samba-Servers bildet die Konfigurationsdatei smb.conf, die Sie in der Regel im Verzeichnis /etc/samba/ finden. Sie enthält alle für den Betrieb wichtigen Informationen, beispielsweise welche Rolle der Server übernehmen soll und welche Verzeichnisse für welche Benutzer freigegeben sind.
Die Konfigurationsdatei untergliedert sich in verschiedene Abschnitte, die ein Begriff in eckigen Klammern einleitetet. Der Abschnitt [globals] enthält generelle Informationen wie Name und Rolle des Servers (Standalone, PDC etc.) sowie generelle Zugriffsberechtigungen. In der Sektion [home] legen Sie Direktiven zu den Homeverzeichnissen der eingeloggten Benutzer fest, [printers] beschreibt die Ansteuerung der Drucker. Alle anderen Abschnitte legen frei definierbare zusätzliche Freigaben fest, deren Bezeichner gleichzeitig als Name der Freigabe dient.
Globale Einstellungen
Die folgenden Erklärungen beziehen sich in erster Linie auf die Beispielkonfiguration aus Listing 1.
Mit dem Parameter workgroup = Gruppe im Abschnitt [global] legen Sie den Namen der Arbeitsgruppe fest, zu welcher der Server gehört. Achten Sie darauf, dass auch die Clients, die auf die Freigaben zugreifen möchten, dieser Arbeitsgruppe angehören. Hinter server string = Server steht der Name des Servers.
Um Verzeichnisse anonym zu erreichen, benötigen Sie die Einträge map to guest = bad user, guest account = User und username map = /etc/samba/smbusers (Zeilen 4 bis 6). Diese bewirken, dass der Server ihm unbekannten Teilnehmern einen Benutzername zuweist, mit dem diese auf die Shares zugreifen können, die mit guest ok = Yes gekennzeichnet sind. Die Datei /etc/smbusers sollte dafür den Eintrag nobody = guest pcguest smbguest enthalten, der alle anonymen Zugriffe der Benutzer guest, pcguest und smbguest auf den Standard-Unix-Benutzer nobody mappt.
Um die Zugriffe auf Netzwerkebene zu regulieren, verwenden Sie die Direktive hosts allow = IP-Adresse und hosts deny = IP-Adresse. Die IP-Adresse dahinter gibt an, welche Rechner Zugriff erhalten und welche nicht. Vergeben Sie eine unvollständige IP-Adresse (etwa 192.168.1.), erkennt Samba diese als Netzwerksegment und erlaubt allen Rechnern aus dem Netz 192.168.1.0/24 den Zugriff.
Mit dem Schalter security = Modus stellen Sie das Sicherheitslevel des Servers ein. Der gängige Modus user erfordert sowohl die Angabe eines Benutzernamens als auch eines Passworts (Abbildung 2), während share nur die Eingabe des Kennworts erfordert. Allerdings dient als Benutzerauthentifizierung der von Windows bei der Anmeldung automatisch mitversendete Kontoname, den Samba kennen muss (siehe Kasten “Benutzerverwaltung”).

share (rechts) verlangt dem Anwender nur ein Passwort ab, im Level user fragt Samba auch nach dem Benutzername.” width=”300″ height=”153″ />
share (rechts) verlangt dem Anwender nur ein Passwort ab, im Level user fragt Samba auch nach dem Benutzername.Das Login mit verschiedenen Benutzernamen auf unterschiedlichen Freigaben des gleichen Servers klappt nicht.
Benutzerverwaltung
Die Grundvoraussetzung für den autorisierten Zugriff auf von Samba gestellten Ressourcen bildet ein bestehender Samba-Account. Als Root richten Sie mit dem Befehl smbpasswd -a User einen neuen Samba-Benutzer ein, sofern es bereits einen gleichnamigen Linux-Benutzer gibt. Möchten Sie als Loginnamen einen anderen als den des Linux-Accounts verwenden, legen Sie in der Datei /etc/samba/smbusers einen Alias-Namen nach folgendem Schema an:
Linux-Benutzer = Samba-Benutzer_1 Samba-Benutzer_2 …
Lautet die Angabe beispielsweise linus = bill steve, so leitet Samba die Anfragen von bill und steve auf das Linux-Konto linus um.
Dies ist vor allem dann notwendig, wenn Sie den Security-Level auf share stellen, da Windows automatisch den Benutzernamen des angemeldeten Benutzers mitschickt. Um aber Zugriff auf passwortgeschützte Bereiche zu erhalten, muss dieser User Samba bekannt sein. Der Benutzer meldet sich dann mit dem Passwort des gleichnamigen Samba-Benutzers an. Im obigen Beispiel meldet sich bill mit dem Samba-Passwort von linus an).
Analog zum Programm passwd ändert der Aufruf smbpasswd ohne weitere Parameter das Samba-Passwort des Benutzers, der es aufgerufen hat. Mit dem Befehl smbpasswd User ändert root das Passwort des angegebenen Benutzers.
Drucken und Homes
Im Abschnitt [homes] (Zeilen 22 bis 27) legen Sie die Verhaltensweise der Heimatverzeichnisse der angemeldeten Benutzer fest. Der Eintrag valid users = %S startet ein Makro, das abhängig vom gewählten Login-Namen das entsprechende Heimatverzeichnis zur Verfügung stellt.
Meldet sich beispielsweise der Benutzer tommy auf dem Server an, zeigt dieser ihm das Verzeichnis /home/tommy als Share tommy. Die Direktive browseable = Yes bestimmt, dass der Server die Freigabe für jeden anzeigt. Die Angabe browseable = No dagegen blendet Freigaben aus beziehungsweise bewirkt bei Homes, dass jeder Anwender nur sein eigenes Heimatverzeichnis sieht.
Mit read only = No legen Sie fest, dass der Benutzer auch in das Verzeichnis schreiben darf, read only = Yes sperrt den Schreibzugriff. Die Direktive inherit acls = Yes legt fest, dass Berechtigungen beim Erstellen neuer Verzeichnisse vererbt werden; inherit acls = No unterbindet dies.
Der Abschnitt [printers] (Zeilen 12 bis 20) erlaubt Ihnen, Samba auch als Printserver zu verwenden. Die Direktive create mask = 0600 erzeugt eine Rechtemaske, die in diesem Fall das Recht zum Ausführen der verwalteten Ressourcen auf den besitzenden Anwender beschränkt. Der Schalter path = PrintSpooler gibt das Verzeichnis des Print-Spoolers an. Die Direktive use client driver = Yes besagt, dass der Windows-Client den freigegebenen Drucker wie ein lokales Gerät behandelt und einen eigenen Treiber dafür installiert.
Eigene Freigaben
Samba erlaubt das Anlegen beliebig vieler eigener Freigaben für diverse Benutzer oder Gruppen. Dazu legen Sie für jede Freigabe einen eigenen Abschnitt an, dessen in den eckigen Klammern angegebener Bezeichner gleichzeitig als Freigabename der Ressource dient (Zeile 29, 38, 45). Über comment = Kommentar fügen Sie Kommentare ein, die Windows-Clients unter dem Tabellentitel Kommentare anzeigen.
Mit der Direktive valid users = Name ... geben Sie an, welchen Benutzern Sie Zugriff auf das Share gewähren. Steht vor dem Namen ein Klammeraffe (“@”), behandelt Samba den Eintrag als Gruppennamen (Zeile 41). Mit path = /Pfad/zum/Share legen Sie das freigegebene Verzeichnis fest.
Möchten Sie eine allgemein zugängliche Freigabe mit Lese- und Schreibrechten anlegen (Zeilen 29 bis 36), erteilen Sie zunächst einem Linux-Benutzer mit der Direktive force user = User die entsprechende Berechtigung. Der angegebene User muss einen Linux-Account besitzen und zudem selbst die entsprechenden Berechtigungen für das Verzeichnis besitzen. Mit der Direktive read only = No legen Sie fest, dass das Share auch zum Beschreiben freigegeben ist, der Schalter guest ok = Yes ermöglicht auch anonymen Benutzern den generellen Zugriff.
Konfiguration testen
In die oft recht umfangreiche Samba-Konfigurationsdatei schleichen sich beim Editieren gerne Fehler ein. Um diesen auf die Schliche zu kommen, rufen Sie auf der Kommandozeile das Samba-Tool testparm (Abbildung 3) auf. Das kleine Programm prüft die Samba-Konfiguration auf eventuelle Fehler und zeigt diese an.

testparm spürt Fehler in Sambas Konfigurationsdatei auf smb.conf.” width=”300″ height=”206″ />
testparm spürt Fehler in Sambas Konfigurationsdatei auf smb.conf.Konfiguration mit Swat
Wer den Umgang mit Texteditor und smb.conf scheut, verwendet zum Bearbeiten der Konfiguration die webbasierte grafische Oberfläche Swat (Samba Web Access Tool, Abbildung 4). Da diese (X)Inetd triggert, gilt es, dessen Konfiguration entsprechend anzupassen.

Abbildung 4: Die webbasierte Konfigurationsoberfläche Swat hilft Ihnen beim Einrichten des Samba-Servers.
Verwendet Ihr Betriebssystem Xinetd, suchen Sie im Verzeichnis /etc/xinetd.d/ nach der Datei swat und setzen dort den den Schalter disable auf no. Ist Ihr System mit dem älteren Inetd ausgestattet, ergänzen Sie diese dessen Konfigurationsdatei /etc/inetd.d um die Zeile swat stream tcp nowait 400 root /usr/sbin/swat swat. Danach erreichen Sie die Verwaltungsoberfläche über die Eingabe von http://127.0.0.1:901 in Ihrem Webbrowser.
Listing 1
[global] workgroup = Arbeitsgruppe server string = "LinuxUser Samba 3.0 Server" username map = /etc/samba/smbusers map to guest = bad user guest account = nobody hosts allow = 192.168.1. security = user printing = CUPS printcap name = CUPS [printers] comment = Alle Drucker create mask = 0600 browseable = yes printable = yes public = yes guest ok = yes path = /var/tmp use client driver = yes [homes] comment = Home Directories valid users = %S read only = No inherit acls = Yes browseable = No [anonshares] comment = Anonyme Lese-Schreib-Freigabe path = /tmp/tc-test force user = tommy force group = users read only = No inherit acls = Yes guest ok = Yes [info-devel] comment = Infos fuer Entwickler path = /opt/info/devel-manpages/ valid users = @devel, oliver, @users inherit acls = Yes browseable = Yes [Suse] comment = Suse 10.0 Installationsquelle path = /media/suse100/ inherit acls = Yes guest ok = Yes
Glossar
-
PDC
-
Primary Domain Controller. Server zur zentralen Authentifizierung und Autorisierung von Rechnern und Benutzern in einem Windows-Netzwerk.
-
(X)Inetd
-
Ein Daemon, der bei Anfragen auf einem bestimmten Port ein voreingestelltes Programm (meist wiederum einen Daemon) startet. Die aktuellste, weiterentwickelte Inetd-Variante ist Xinetd (Extended Inetd).
Infos
[1] Samba: http://samba.sernet.de/samba.html




