Linux als Windows-Server mit Samba 3

05.05.2004 von STEFAN RUBNER 
Linux eignet sich nicht nur für den Einsatz als Webserver. Dank Samba macht es auch als Ersatz für einen Windows-Server oder sogar als zentraler Domänen-Controller in Windows-Netzwerken eine gute Figur.

Einer der größten Vorteile von Linux ist neben seiner Geschwindigkeit und der Stabilität vor allem die Offenheit für andere Systeme. So bietet Linux die Möglichkeit, unterschiedliche Dateisysteme einzusetzen, ist binär-kompatibel zu diversen Unix-Derivaten, und auch bei den Verbindungen über das Netzwerk gibt es quasi nichts, was es nicht kann.

Kein Wunder, dass ihm auch die Kommunikation mit Windows-Netzen nicht fremd ist. Mehr noch, über das Samba-Paket des Samba-Projekts ist es nicht nur in der Lage, von Windows-Rechnern oder -Servern bereitgestellte Ressourcen zu nutzen. Es kann sich sogar selbst als Windows-Server ausgeben und Freigaben bereitstellen, Mitglied in einer Active-Directory-Domäne sein oder eigenständig eine NT-Domäne verwalten. Da Linux zudem ohne Ressourcen fressende grafische Benutzeroberfläche auskommt, eignet es sich unter anderem hervorragend dazu, ältere, für Windows eigentlich nicht mehr adäquate Rechner weiterhin als Server zu betreiben.

Diesen Artikel und eine ganze Reihe weiterer Praxis-Themen finden Sie auch in unserem neuesten tecCHANNEL-Compact. Dort erfahren Sie nicht nur, wie Sie einen Apache 1.x unfallfrei auf Apache 2 upgraden, sondern unter anderem auch wie Sie einen Email-Server mit dem Freeware-Tool XMail aufsetzen und via SpamAssassin vor unerwünschten Mails schützen. Auf der Heft-CD finden Sie einen kompletten LAMP-Server von SuSE sowie den Intel C++-Compiler für Linux, mit dem Sie Ihre Programme optimal auf Ihre Prozessor-Architektur abgestimmt compilieren können. Der Compiler ist für den Privatgebrauch sogar kostenlos. Das Compact können Sie hier in unserem Online-Shop für 9,90 Euro versandkostenfrei bestellen.

Das ist neu in Samba 3

Inzwischen ist Samba in Version 3 verfügbar. Diese bringt einige interessante und wichtige Neuerungen mit sich. So zum Beispiel die Möglichkeit, einen Samba-Server als Mitglied eines Active-Directory-Verzeichnisses zu betreiben oder die Unterstützung für Unicode-Zeichensätze zur besseren Verarbeitung von Umlauten und anderen Sonderzeichen über unterschiedliche Betriebssysteme hinweg.

Verbesserungen erfuhren zudem der Drucker-Support für Clients unter Windows 2000, 2003 und XP sowie die zur Rechtevergabe auf Dateien und Verzeichnisse unter Windows wichtigen Access Control Lists (ACL), die Samba jetzt noch genauer umsetzt. Neu ist das Hilfsprogramm net für Linux, das in seiner Funktion an das gleichnamige Windows-Utility angelehnt ist, ihm aber nicht ganz entspricht.

Mit dem aktuellen Funktionsumfang ist Samba also durchaus in der Lage, für kleinere Netze als zentraler Server zu arbeiten. Genauso eignet es sich für den Einsatz als Abteilungs-Server, der in ein größeres, per Active Directory verwaltetes Netz integriert ist. Aber auch für den privaten Gebrauch stellt es eine gute und einfach zu konfigurierende Server-Lösung dar.

Samba 3 installieren

Da Samba 3 recht neu ist, hat noch keine Linux-Distribution die entsprechenden Pakete in ihre Sammlung aufgenommen. Das ist generell kein Problem, da die notwendigen RPM-Dateien für die gängigsten Distributionen auf den diversen Mirror-Servern des Samba-Projekts zum Download bereitstehen. Dies gilt jedoch nicht für SuSE-Linux.

Grund dafür ist, dass SuSE einige Modifikationen an Samba vorgenommen hat, um es besser in die hauseigenen Enterprise-Produkte zu integrieren. Aber keine Sorge, Sie müssen jetzt nicht zu Compiler und Editor greifen, um die SuSE-Änderungen selbst in den Quelltext von Samba 3 zu integrieren und das Ergebnis zu übersetzen. Die Firma Sernet bietet auf ihrem FTP-Server den Download einer SuSE-spezifischen Version von Samba 3 an.

Bevor Sie diese herunterladen und installieren, sollten Sie jedoch zunächst die während der Installation von SuSE-Linux auf dem Rechner eingerichteten Samba-Komponenten entfernen. In der Regel ist dies lediglich der Samba-Client. Abhängig von den individuellen Einstellungen bei der Installation können aber auch andere Module auf dem Rechner vorhanden sein. Welche tatsächlich installiert sind, ermitteln Sie mit einem einfachen Kommando:

rpm -qa | grep samba

Alle von diesem Befehl aufgelisteten Module bis auf die, deren Name mit yast2 oder kde beginnt, sollten Sie entfernen. Dazu benötigen Sie Superuser-Rechte, Sie sollten also in den Administrations-Account root wechseln.

su -
rpm -e --nodeps <modulliste>

Abhängigkeiten nicht auflösen

Die Angabe des Parameters --nodeps bewirkt, dass der RPM-Manager nicht prüft, ob andere installierte Module eventuell von den zu entfernenden abhängig sind. Genau das ist natürlich der Fall, aber da Sie ja gleich eine neue Version einspielen, ist dies nicht weiter tragisch. Den Platzhalter <modulliste> ersetzen Sie mit der durch Leerzeichen getrennten Liste der zu entfernenden Module. Dabei dürfen Sie die Namen abkürzen, zum Beispiel ist statt der Angabe von samba-client-2.2.8a-107 auch die Kurzform samba-client erlaubt. Ist das Entfernen der alten Version erfolgreich abgeschlossen, können Sie Samba 3 mit wenigen Befehlen installieren. Es empfiehlt sich, zuvor auf dem FTP-Server nachzusehen, welches Archiv die aktuellste Version enthält, um unnötig große Übertragungen zu vermeiden. Mit dem folgenden Befehl erhalten Sie alle auf dem Server vorhandenen Release-Versionen:

wget -nv ftp://ftp.sernet.de/pub/samba/suse9/samba3*3.0.[0-9]-[0-9]*.i586.rpm
rpm -Uvh samba3*i586.rpm

Damit ist die Installation der Software abgeschlossen, und Sie können darangehen, Samba zu konfigurieren.

Samba konfigurieren

Dreh- und Angelpunkt der Samba-Konfiguration ist die Datei /etc/samba/smb.conf. Aus dieser bezieht Samba nicht nur alle wichtigen Betriebsparameter, sondern auch die Informationen über freigegebene Verzeichnisse und für Netzanwender bereitgestellte Drucker. Hatten Sie bereits einen Samba-Server unter SuSE Linux 9.0 in Betrieb, sollten Sie eine vorhandene Konfigurationsdatei sichern, bevor Sie den Server starten. Für unser Beispiel starten wir mit einer frischen Minimalkonfiguration. Öffnen Sie die Datei /etc/samba/smb.conf in einem Editor Ihrer Wahl und ändern Sie den Inhalt auf folgende Zeilen:

[global]
workgroup = MEINNETZ
[homes]
guest ok = no
read only = no

Dies ist so ziemlich die kürzeste, funktionierende und sinnvolle Konfiguration eines Samba-Servers. Dass so wenige Befehle dafür notwendig sind, liegt daran, dass Samba intern für in der Konfigurationsdatei nicht aufgeführte Kommandos passende Default-Werte verwendet.

Es ist deutlich zu sehen, dass die Konfigurationsdatei mehrere Blöcke aufweist, die durch Schlüsselwörter in eckigen Klammern eingeleitet werden. Jeder Block spezifiziert eine Ressource, die der Server den Clients zur Verfügung stellt. Eine Sonderstellung nimmt dabei [global] ein. In diesem Block finden sich die Anweisungen, die sich auf den generellen Betrieb des Servers auswirken. Auch [homes] hat besondere Bedeutung: Ist diese Ressource definiert, leitet Samba einen Client direkt auf das Heimatverzeichnis des Users um, der sich anmeldet.

Doch bevor wir das ausprobieren, testen wir, ob alles wie gewünscht funktioniert. Starten Sie den Server und rufen Sie eine Liste der bereitgestellten Ressourcen ab:

/etc/init.d/smb start
/etc/init.d/nmb start
smbclient -L //localhost

Die vom Hilfsprogramm Smbclient durchgeführte Passwort-Abfrage quittieren Sie einfach mit der Enter-Taste und erhalten eine Liste der Ressourcen angezeigt. Neben homes enthält diese weitere Einträge, die für den Login-Vorgang erforderlich, aber nicht weiter von Interesse sind.

User einrichten

Ein Versuch, diese Liste auch von einem Windows-PC aus zu erhalten, schlägt jedoch ziemlich sicher fehl. Ursache dafür ist, dass dem Samba-Server bislang noch keine Benutzerkonten bekannt sind. Dabei ist zu beachten, dass jeder User-Account für Samba einen entsprechenden Eintrag in der Passwort-Datei des Linux-Rechners, /etc/passwd, erfordert. Um nun ein Konto für den Benutzer testuser anzulegen, sind folgende Schritte notwendig:

useradd -m testuser
smbpasswd -a testuser

Achtung: Obwohl das Utility smbpasswd nach einem Passwort für den neu angelegten Account fragt, ist mit dem eben erzeugten Benutzernamen keine Anmeldung an der Konsole des Linux-Rechners möglich. Samba verwaltet seine Accounts nämlich in einer eigenen Passwort-Datei, /etc/samba/smbpasswd. Ergo wird nur dort das Passwort hinterlegt, nicht aber in der Datei mit den Zugangskennungen für den Rechner selbst.

Das macht durchaus Sinn, da Sie auf diese Weise reine Samba-Accounts einrichten können, ohne den jeweiligen Usern gleich Zugang zu lokalen Daten des Servers zu geben. Sollen Samba-Anwender auch Zugriff per SSH oder über die Konsole des Servers erhalten, müssen Sie als Admin das Passwort manuell über das Linux-Utility passwd setzen.

Automatischer Abgleich von Passwörtern

Das wirft die nächste Frage auf: Ändert ein Anwender sein Samba-Passwort, was passiert dann mit dem Kennwort des Linux-Accounts? Die Antwort ist: nichts. Zumindest in der Standardkonfiguration. Das bedeutet, es sind plötzlich unterschiedliche Passwörter für denselben User vermerkt, was zu Problemen führen kann. Die Samba-Entwickler haben jedoch auch an diesen Fall gedacht und Vorkehrungen dafür getroffen. Alles was erforderlich ist, um bei einer Änderung des Samba-Passworts gleich das zugehörige Linux-Passwort mit zu aktualisieren, sind zwei Zeilen im Abschnitt [global] der Konfigurationsdatei:

unix password sync = yes
passwd program = /usr/bin/passwd %u

Achtung: Die letzte Zeile gilt für SuSE Linux 9.0. Bei verschiedenen Distributionen kann das Utility passwd auch an anderer Stelle liegen. Am besten prüfen Sie dies über das Kommando which passwd. Es verrät Ihnen, wo sich das Programm bei Ihrer Distribution versteckt.

Eine kleine Falle lauert hier noch: Wer jetzt denkt, dass er als Admin ab sofort sowohl die Passwörter für die Linux-Konsole als auch für den Samba-Server über das Hilfsprogramm smbpasswd setzen kann, der irrt. Nur für den jeweiligen User selbst führt smbpasswd den komfortablen automatischen Abgleich durch. Der Superuser muss nach wie vor beide Passwörter von Hand setzen.

Freigaben einrichten

Nun sind Netzlaufwerke für einzelne Anwender ja ganz praktisch. Allerdings helfen sie nicht viel beim Austausch von Daten zwischen den Usern. Schließlich kann jeder Anwender gerade einmal auf sein eigenes, nicht aber auf die Netzverzeichnisse der anderen Benutzer zugreifen. Ergo: Eine weitere Netzressource muss her, zu der alle Anwender Zugang haben. Dazu legen Sie zuerst ein lokales Verzeichnis an, zum Beispiel /srv/samba/temp:

mkdir -p /srv/samba/tausch

Anschließend laden Sie die Konfigurationsdatei /etc/samba/smb.conf in den Editor und erweitern sie um einen neuen Block:

[tausch]
path = /srv/samba/tausch
read only = no
guest ok = yes
guest only = yes

Nach einem Neustart des Samba-Dämons per /etc/init.d/smb restart ist die frische Freigabe von allen Clients aus sichtbar. Der Versuch, Daten auf dieses Netzlaufwerk zu kopieren, scheitert jedoch.

Kein Wunder, denn so wie die Ressource tausch aktuell konfiguriert ist, passiert Folgendes: Bei einem Zugriff stellt Samba fest, dass auch Gäste Zugriff erhalten dürfen (guest ok = yes) und jeder User als Gast behandelt werden soll (guest only = yes).

Schreibrecht für Gast

Der voreingestellte Gast-Account unter SuSE Linux 9.0 ist nobody in der Gruppe nogroup. Wie Sie leicht über das Kommando ls /srv/samba -al nachprüfen können, hat aber nur der User root Schreibrechte auf das zuvor angelegte Verzeichnis. Ändern Sie also den Besitzer des Verzeichnisses von root auf nobody, und schon können alle Netzwerkanwender Daten in der Freigabe ablegen oder verändern:

chown nobody /srv/samba/tausch

So weit, so gut. Nur haben jetzt tatsächlich alle Anwender im Netz Schreibzugriff auf den Tauschordner - und das, ohne sich am Server anmelden zu müssen. Das kann in Einzelfällen zwar erwünscht sein, in den meisten Fällen möchte man den Zugriff aber eher auf bestimmte Benutzer beschränken. Um das zu erreichen, müssen Sie den Block für die Ressource tausch ein wenig modifizieren:

[tausch]
path = /srv/samba/tausch
read only = no
valid users = testuser
force user = nobody

Durch die Angabe des Kontos testuser hinter dem Schlüsselwort valid users veranlassen Sie den Samba-Server, nur diesen Anwendern Zugriff auf die Tauschfreigabe zu gewähren. Fehlt diese Zeile, erhalten automatisch alle dem Server bekannten Benutzer Zugang. Allerdings hätten wir uns jetzt beinahe wieder ein Problem eingehandelt: Schreibzugriff hat nun ausschließlich der Linux-User nobody und nicht testuser. Dass trotzdem alles klappt, dafür sorgt die letzte Zeile des Blocks. Sie weist Samba an, für alle Operationen auf der Ressource tausch intern den Benutzer nobody zu verwenden - egal unter welcher Kennung der jeweils ausführende User angemeldet ist.

Arbeit mit Gruppen

Handelt es sich bei dem zu versorgenden Netz um eine größere Installation mit vielen Anwendern, ist es schnell mühsam, die zum Zugriff berechtigten User einzeln hinter dem Schlüsselwort valid users aufzuführen. Samba unterstützt daher als Parameter auch Gruppen. Um beispielsweise allen Mitgliedern der Gruppe tauschgrp Zugriff auf den Tauschordner zu geben, ändern Sie die Zeile wie folgt ab:

valid users = +tauschgrp

Nun müssen Sie nur noch die entsprechende Linux-Benutzergruppe anlegen und die gewünschten Konten in sie aufnehmen:

groupadd -g 10000 tauschgrp
usermod -G tauschgrp testuser

Achten Sie dabei darauf, beim Befehl usermod wirklich ein großes G als Parameter anzugeben, da Sie andernfalls die Standardgruppe des Users verändern, statt ihn in eine weitere Gruppe aufzunehmen. Die Angabe der Option -g 10000 bei groupadd hat zur Folge, dass die Gruppe tauschgrp mit der internen Gruppennummer 10000 versehen wird. Technisch hat das keine Auswirkung, es erleichtert aber die Übersicht, wenn Sie zu einer Anwendung gehörende Gruppen unter einem eigenen Nummernkreis zusammenfassen.

Tipps, Tricks und Performance

Obwohl Samba eigentlich recht gute Vorgabewerte für die meisten Systeme verwendet, gibt es doch ein paar Schrauben, an denen man drehen kann, um noch ein wenig mehr Performance aus dem Server herauszukitzeln. Besondere Bedeutung haben hier die Optionen, die sich auf den TCP/IP-Stack auswirken. Sie werden über das Schlüsselwort socket options in der globalen Sektion der Konfigurationsdatei gesetzt. Eine gute Wahl ist zum Beispiel in vielen Fällen:

socket options = TCP_NODELAY IPTOS_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE

Diese Optionen bewirken, dass Samba mit möglichst geringen Toleranzen bei den Übertragungen arbeitet, relativ große Puffer für die Datenübertragung verwendet und durch Keepalive-Pakete versehentliche Abmeldungen der Clients verhindert.

Beim Experimentieren mit den Konfigurationseinstellungen kann es durchaus passieren, dass Samba sich nicht so verhält, wie Sie es erwartet hätten. Wenn Sie dann einzelne Parameter ändern, kann es vorkommen, dass sich das Verhalten von Samba nicht ändert. Ursache ist hier meist, dass die jeweilige Option nicht abgeschaltet, sondern vermeintlich durch ein vorangestelltes Kommentarzeichen aus der Konfiguration entfernt wurde. Dem ist aber oft nicht so. Hier schlägt Ihnen gerne die Eigenschaft von Samba ein Schnippchen, für nicht vorhandene Optionen Standardwerte zu verwenden. Ein Beispiel:

# Nur-Lesen-Status für Ressource aktivieren
# falsch:
# read only = no

# richtig:
read only = yes

Als Faustregel für die Arbeit mit der Konfigurationsdatei gilt daher: Optionen besser explizit auf den gewünschten Wert setzen. Im Zweifelsfall lässt sich die aktuelle Einstellung einer Option über das Hilfsprogramm testparm durch Aufruf mit der Option -v feststellen:

testparm -v | grep <option>

Vorsicht beim Kommentieren

Mit einem weiteren Problem konfrontiert sehen sich oft Anwender, die ihre Konfiguration ausführlich dokumentieren. Samba unterstützt zwar Kommentare, allerdings nur, wenn das Kommentarzeichen # wirklich das erste nicht leere Zeichen einer Zeile ist. Wird der Kommentar jedoch hinter der gewünschten Option gesetzt, interpretiert Samba dies als Parameter:

# Bitte so:
# Erlaubte User festlegen
valid users = testuser, neueruser

# aber nicht so:
valid users = testuser, neueruser # erlaubte user

Fazit und Ausblick

Mit den bisher gewonnenen Informationen sind Sie bereits in der Lage, einen leistungsfähigen Fileserver für kleine und mittlere Netze zu installieren. Wie Sie Samba in eine Domain integrieren oder selbst zum primären Domänen-Controller machen, beschreibt der Artikel zur erweiterten Samba-Konfiguration. Dort geht es auch darum, wie Sie zum Speichern der Benutzerkonten alternativ Datenbanken verwenden können und die Kompatibilität zu Windows-Servern weiter erhöhen.

Der Bereitstellung von am Samba-Server angeschlossenen Druckern ist ebenfalls ein eigener Artikel gewidmet. Hier erfahren Sie nicht nur, wie Sie einen Drucker für die Anwender im Netz zur Verfügung stellen, sondern auch, wie Sie dafür sorgen, dass die Clients gleich die notwendigen Treiber auf dem Samba-Server vorfinden. (mha)