29.2Basiskonfiguration und Inbetriebnahme
Bei vielen Distributionen gibt es getrennte Pakete für die Client- und Server-Anwendung. Die Client-Pakete sind zumeist standardmäßig installiert, sodass ein Zugriff auf Netzwerkverzeichnisse auf Anhieb funktionieren sollte. Wenn Sie selbst Netzwerkverzeichnisse freigeben möchten, brauchen Sie auch die Server-Funktionen, die bei den meisten Distributionen im Paket samba verpackt sind.
Samba stellt seine Dienste durch zwei Hintergrundprozesse zur Verfügung:
-
nmbd dient zur internen Verwaltung und als Nameserver. Der Dämon kümmert sich auch um die Browsing-Funktionen. nmbd kann auch als Master-Browser oder als WINS-Server fungieren.
-
smbd stellt die Schnittstelle für die Clients dar und gibt diesen Zugang zu Verzeichnissen, Druckern und zur aktuellen Browsing-Liste.
Die beiden Prozesse werden durch das Init-System gestartet. Die Dienstnamen sind distributionsabhängig: Bei aktuellen Debian- und Ubuntu-Distributionen werden beide Prozesse durch die Init-V-Scripts smbd und nmbd gestartet. Bei den meisten anderen Distributionen gibt es stattdessen die Systemd-Service-Dateien smb und nmb. Falls Samba bei Ihrer Distribution nach der Installation nicht standardmäßig läuft, finden Sie in Abschnitt 14.5, »Systemprozesse (Dämonen)«, Tipps, wie Sie die Scripts starten bzw. für einen automatischen Start konfigurieren.
Als zentrale Konfigurationsdatei für Samba dient /etc/samba/smb.conf. Die Datei setzt sich aus einem [global]-Abschnitt für die Grundeinstellungen sowie beliebig vielen weiteren Abschnitten für die Freigabe von Verzeichnissen, Druckern etc. zusammen. Jeder Abschnitt wird durch [ressourcenname] eingeleitet. Kommentare beginnen wahlweise mit den Zeichen ; oder #. Es ist aber nicht zulässig, im Anschluss an eine Parametereinstellung einen Kommentar hinzuzufügen. Kommentare beanspruchen also immer eine ganze Zeile.
Die folgenden Zeilen zeigen leicht gekürzt den globalen Abschnitt der Samba-Standardkonfiguration unter Ubuntu. Bei anderen Distributionen ist die Datei mitunter noch kürzer, weil darauf verzichtet wird, Defaulteinstellungen explizit zu wiederholen. Nicht abgedruckt sind hier die Abschnitte [printers] und [print$], die den Zugriff auf Drucker und Druckertreiber erlauben.
Unter CentOS, Fedora und RHEL sieht smb.cnf recht ähnlich aus. Dort sind allerdings noch einige Zeilen enthalten, um alle Heimatverzeichnisse als Netzwerkverzeichnisse freizugeben. Außerdem lautet der workgroup-Name MYGROUP anstelle von WORKGROUP.
Bei einigen Distributionen wird smb.conf gleichzeitig auch zur Dokumentation verwendet. Die resultierende Konfgurationsdatei ist dann endlos lang und unübersichtlich. Abhilfe schaffen die drei folgenden Kommandos:
Mit workgroup stellen Sie den Namen der Arbeitsgruppe ein. Das ist wahrscheinlich die erste Einstellung, die Sie ändern werden – um dort den Namen Ihrer eigenen Arbeitsgruppe einzustellen, innerhalb der Samba agieren soll.
server string gibt an, unter welchem Namen sich der Server identifiziert. %h wird dabei durch den Hostnamen ersetzt.
dns proxy = no bewirkt, dass Samba, wenn es als WINS-Server agiert, nicht auf DNS zurückgreift, um Windows-Hostnamen aufzulösen. Sofern es in Ihrem LAN einen lokalen Nameserver gibt, sollten Sie diesen Parameter auf yes einstellen. Die Standardeinstellung no ist nur zweckmäßig, wenn es keine lokalen bzw. schnell erreichbaren Nameserver gibt.
Die Parameter log file, max log size und syslog steuern, welche Daten Samba wo protokolliert.
Bei einem Absturz von Samba wird das Script panic-action ausgeführt. Es sendet eine E-Mail an root, die Informationen zum aufgetretenen Fehler enthält. panic-action bleibt wirkungslos, wenn auf dem Server kein E-Mail-System installiert ist.
passdb backend gibt an, wie die Samba-Passwörter verwaltet werden sollen. Zur Auswahl stehen smbpasswd (eine einfache Textdatei), tdbsam (TDB, ein relativ einfaches Datenbanksystem) oder ldapsam (LDAP). tdbsam ist zumeist die richtige Einstellung für kleine bis mittelgroße Netzwerke bis ca. 250 Clients. Das früher populäre System smbpasswd sollte nicht mehr verwendet werden, weil damit keine erweiterten Attribute gespeichert werden können (SAM Extended Controls).
Die Schlüsselwörter unix password sync, passwd chat und pam password change beschreiben, ob und wie Samba seine Passwörter mit den Linux-Passwörtern abgleichen soll. Details zur Verwaltung der Samba-Passwörter folgen in Abschnitt 29.3, »Passwortverwaltung«.
map to guest und usershare allow guests regeln, wie Samba mit nicht authentifizierten Benutzern umgeht, also mit Benutzern, die sich mit einem ungültigen Namen oder Passwort anmelden. Die Bedeutung dieser und einiger weiterer guest-Parameter ist in Abschnitt 29.4, »Netzwerkverzeichnisse«, beschrieben.
Vielleicht vermissen Sie im obigen Listing die Einstellung des Sicherheitsmodells: Standardmäßig gilt in Samba und somit auch bei der Ubuntu-Grundkonfiguration das User-Level-Sicherheitsmodell (security = user). Nur wenn ein anderes Sicherheitsmodell gewünscht ist, muss dieses mit dem Parameter security eingestellt werden.
Unter Debian und Ubuntu enthält smb.conf einige Anweisungen, die eigentlich überflüssig sind: Beispielsweise hat die Einstellung obey pam restrictions = yes nur dann Einfluss auf die Passwortverwaltung, wenn Passwörter nicht verschlüsselt werden. Da dies standardmäßig der Fall ist, wird die Einstellung ignoriert.
Im weiteren Verlauf dieses Kapitels werden Sie noch eine Menge weiterer Samba-Parameter kennenlernen, aber natürlich bei Weitem nicht alle. Detaillierte Informationen zu allen Einstellmöglichkeiten gibt man smb.conf.
Konfigurationsänderungen und Status
Damit Änderungen an smb.conf wirksam werden, müssen Sie Samba auffordern, die Konfigurationsdateien neu einzulesen:
Wenn Sie größere Änderungen an smb.conf durchführen möchten, sollten Sie die Datei zuerst mit testparm auf syntaktische Fehler überprüfen:
Wenn Sie testparm mit der Option -v ausführen, liefert das Kommando eine schier endlose Liste mit den Einstellungen aller möglichen smb.conf-Optionen. Das ist manchmal praktisch, wenn Sie sich nicht sicher sind, welche Einstellungen standardmäßig gelten – also bei Optionen, die Sie nicht selbst explizit eingestellt haben.
Den aktuellen Zustand des Samba-Servers ermitteln Sie mit smbstatus. Das Kommando liefert auch eine Liste aller zurzeit aktiven Verbindungen.
Samba absichern
Unter CentOS, Fedora, SUSE und RHEL blockiert die standardmäßig aktive Firewall Samba. Damit die Netzwerkdienste genutzt werden können, müssen Sie die Samba- bzw. Windows-spezifischen TCP-Ports 135, 139 und 445 sowie die UDP-Ports 137, 138 und 445 für die Schnittstelle zum lokalen Netzwerk freigeben – und das sowohl auf dem Server als auch auf den Client-Rechnern.
Bei SUSE-Distributionen verwenden Sie zur Firewall-Konfiguration am besten YaST. Bei Fedora, CentOS und RHEL ist firewall-cmd das Kommando der Wahl. Sie können damit entweder die Zone der Netzwerkschnittstelle ändern, über die die Samba-Daten fließen, oder Sie behalten die Zone bei und definieren eine Ausnahmeregel für Samba. Dieser Weg ist hier skizziert:
Eine generelle Deaktivierung der Firewall ist nicht empfehlenswert! Jeder Samba-Server sollte unbedingt zum Internet hin durch eine Firewall abgesichert sein – beispielsweise durch eine Firewall, die auf dem ADSL-Router oder Gateway-Rechner läuft. Ist dies nicht der Fall, sind die freigegebenen Verzeichnisse für alle Welt zugänglich bzw. nur noch durch die Passwörter der Samba-Benutzerverwaltung abgesichert. Hintergrundwissen zum Thema Firewalls können Sie in Kapitel 38 nachlesen.
Unabhängig von der Firewall schadet es nicht, auch innerhalb der Samba-Konfiguration Vorsicht walten zu lassen: Dazu geben Sie mit interfaces explizit an, über welche Netzwerkschnittstellen Samba kommunizieren soll. Die Angabe der Schnittstellen erfolgt nicht über die Namen der Schnittstellen, sondern über den von diesen Schnittstellen genutzten Adressbereich. Sie können auch mehrere Bereiche angeben, wobei Sie diese einfach durch Leerzeichen trennen. Vergessen Sie localhost nicht – sonst funktionieren auf dem Server Administrationswerkzeuge wie smbclient nicht!
Die interfaces-Option ist dann relevant, wenn es auf Ihrem Rechner mehrere Netzwerkschnittstellen gibt. Auf vielen Rechnern gibt es nicht nur Schnittstellen zu physikalischen Netzwerkadaptern, sondern auch zu den virtuellen Netzwerkadaptern diverser Virtualisierungsprogramme! Standardmäßig bedient Samba alle Netzwerkschnittstellen.
Die Einstellungen durch interfaces werden nur wirksam, wenn Sie außerdem wie im folgenden Listing die Option bind interfaces only aktivieren.
Des Weiteren können Sie mit hosts allow explizit aufzählen, welche Rechner mit Samba kommunizieren dürfen. Die Hostnamen, IP-Adressen oder IP-Adressbereiche müssen durch Leerzeichen voneinander getrennt werden. hosts allow erlaubt eine noch genauere Selektion als interfaces. Ergänzend können Sie mit hosts deny einzelnen Hosts oder Adressen die Nutzung von Samba verbieten.
Grundsätzlich kommuniziert Samba sowohl über IPv4 als auch über IPv6. Bei einer Dual-Stack-Konfiguration im LAN ist es mitunter aus Sicherheitsgründen wünschenswert, dass Samba nur IPv4 spricht. Dazu geben Sie einfach bei interfaces und host ausschließlich IPv4-Adressen an. Sie sollten in solchen Fällen Hostnamen vermeiden und lieber die IP-Adressen angeben, weil bei der Auflösung der Hostnamen nicht immer vorhersehbar ist, ob das Ergebnis IPv4- oder IPv6-Adressen sind.
Diese Art der Konfiguration funktioniert auch umgekehrt: Wenn Sie mit interfaces ausschließlich IPv6-Adressen angeben, dann ist IPv4 gesperrt.
Die Einstellung map to guest verbietet schließlich allen Benutzern, die sich nicht richtig beim Server authentifizieren können, jeglichen Zugriff. Je nach Anwendung kann es zwar durchaus sinnvoll sein, auch für Gäste Verzeichnisse einzurichten, die ohne Authentifizierung gelesen oder sogar verändert werden dürfen. Wenn dies aber nicht erforderlich ist, sollten Sie Gäste von vornherein aussperren.
Unter Fedora und RHEL überwacht SELinux standardmäßig alle Samba-Aktivitäten. Damit die Freigabe von Heimatverzeichnissen unkompliziert funktioniert, müssen Sie den SELinux-Parameter samba_enable_home_dirs aktivieren:
Wenn Sie ein anderes Verzeichnis freigeben möchten, müssen Sie hierfür das Attribut samba_share_t setzen. Dazu führen Sie die beiden folgenden Kommandos aus, im folgenden Beispiel für das Verzeichnis /samba/shares:
SELinux-Konfiguration
Es gibt noch diverse weitere SELinux-Parameter, die steuern, was Samba alles (nicht) darf. Einen Überblick über all diese Parameter samt der Möglichkeit, deren Einstellung mit einem Mausklick zu verändern, gibt das Programm system-config-selinux aus dem Paket policycoreutils-gui. Suchen Sie nach dem Start im Dialogblatt hape Boolean nach samba! Weitere Tipps zu SELinux finden Sie in Kapitel 40, »SELinux und AppArmor«, sowie mit man samba_selinux.
Logging
Die beiden Samba-Dienste smbd und nmbd protokollieren globale Ereignisse in die Dateien /var/log/samba/log.smbd und log.nmbd. Weder der Name noch der Ort dieser beiden Logging-Dateien können durch smb.conf verändert werden.
Der Parameter log file im globalen Abschnitt von smb.conf gibt an, wohin client-spezifische Nachrichten protokolliert werden sollen. Die Voreinstellung /var/log/samba/log.%m bewirkt, dass für jeden Client, der auf Samba zugreift, eine eigene Logging-Datei mit dem Namen log.hostname erzeugt wird.
max log size = 1000 limitiert die maximale Größe auf 1000 kByte. Wenn eine Logging-Datei größer wird, benennt Samba sie in name.old um. syslog = 0 bedeutet nicht etwa, dass Syslog nicht verwendet wird, sondern dass in /var/log/syslog nur Fehlermeldungen protokolliert werden sollen. Alternative Einstellungen sind 1, 2, 3 etc., wenn Sie auch Warnungen, Notizen sowie Debugging-Nachrichten protokollieren möchten.
Vorsicht ist beim Einsatz von logrotate geboten (siehe Abschnitt 19.8): Dieses Programm archiviert in der bei Debian, SUSE und Ubuntu üblichen Standardeinstellung einmal pro Woche log.smbd und log.nmbd und löscht gleichzeitig alle Archiv-Versionen, die älter als zwei Monate sind. logrotate ignoriert aber die viel schneller wachsenden client-spezifischen Logging-Dateien log.hostname.
Besser durchdacht ist hier die entsprechende Konfigurationsdatei bei Fedora und Red Hat, die sich um alle Logging-Dateien in /var/log/samba kümmert:
Eine andere Lösung besteht darin, dass Sie in smb.conf die Einstellung log file = /var/log/samba/log.smbd verwenden. Damit erreichen Sie, dass smbd ebenso globale wie client-spezifische Nachrichten in derselben Datei protokolliert. Solange Sie nicht Fehler in der Samba-Konfiguration suchen müssen, ist das am praktischsten.