17.7 Samba 

Windows- Freigaben
Wenn man nichts anderes kennt, verspürt man vielleicht den Wunsch, sich mit Windows-Freigaben zu verbinden oder selbst Dateien freizugeben. Das entsprechende Protokoll heißt SMB und baut auf NETBIOS auf. NETBIOS ist dabei eine von Microsoft entworfene Methode, lokale Windows-Netze zu organisieren. Die Linux-Software, die das SMB-Protokoll [SMB wurde von Microsoft inzwischen in CIFS (Common Internet Filesystem) umbenannt – und Raider heißt jetzt Twix. Na ja, der alte Name ist zumindest bei SMB/CIFS immer noch gebräuchlich.] versteht und implementiert, heißt Samba.
17.7.1 Windows-Freigaben mounten 

Leider ist NETBIOS im Funktionsumfang recht beschränkt und nicht gerade intuitiv zu verstehen. Immerhin stammt es ja aus einer Zeit, in der sich TCP/IP noch nicht wirklich durchgesetzt hatte.
Wenn man selbst Dateien freigeben will, spielt man natürlich Server. Aber auch, wenn man als Client auf fremde Freigaben zugreifen will, braucht man Samba. Da sich aber alles in das Gesamtkonzept von Linux einfügt, braucht man, um Freigaben einzubinden, nur ein spezielles mount-Kommando:
# mount -t smbfs -o username=jploetner,password=foobar //Server/test /mnt/win
Listing 17.26 Mounten einer Freigabe
In diesem Beispiel würde vom Rechner mit der Windows-Bezeichnung Server die Freigabe test nach /mnt/win gemountet. Bei einer Windows-Freigabe handelt es sich um den Dateisystemtyp smbfs, und man benötigt auch eine Login-Kennung. Die Login-Kennung übergibt man mit dem Parameter -o entweder in der Form username=xyz,password=xyz oder der Zugang erfolgt anonym, wobei jedoch das Schlüsselwort guest angegeben werden muss.
17.7.2 Dateien freigeben 

Möchte man nun selbst Dateien freigeben, müssen zunächst der Samba-Dämon smbd sowie der nmbd, eine Art DNS für NETBIOS, laufen. Die Samba-Software ist für alle wichtigen Distributionen als Paket verfügbar, sodass Sie sich eigentlich nicht um das Kompilieren und das Erstellen von Runlevel-Skripts kümmern müssen. Eine eigene Konfiguration ist aber trotzdem notwendig, um den Dienst sinnvoll nutzen zu können.
Die Datei smb.conf ist in sogenannte Sektionen unterteilt. Zwingend vorgeschrieben ist dabei nur die generelle Einstellungen betreffende Sektion [global]; alle anderen Sektionen beschreiben Drucker oder Dateifreigaben. Außerdem sollte man sich vor Augen führen, dass Samba eigentlich eine Software ist, die zu übersetzen versucht. Dieses Übersetzen ist immer nötig, wenn zwei Welten miteinander kommunizieren möchten, in diesem Fall die Windows-Welt mit der Linux-Welt.
17.7.3 Die Konfigurationsdatei smb.conf 

Wie sieht so eine Konfigurationsdatei aber im Detail aus? Im Folgenden möchten wir mit Ihnen wieder eine kommentierte Konfigurationsdatei analysieren, aus der Sie genug Rückschlüsse für eigene Setups ziehen können. Samba wird dabei hauptsächlich über eine einzige Datei konfiguriert, die meist im Verzeichnis /etc/samba/ befindliche smb.conf.
[global]
# workgroup = NT-Domainname bzw. Workgroup-Name
workgroup = MYGROUP
# Mit der Option server string kann man eine
# Beschreibung für den Server angeben.
server string = Samba Server
Listing 17.27 smb.conf – erste Einstellungen
Die nächste Option ist für die Sicherheit wichtig. Mit ihr kann man den Zugriff auf den Server auf bestimmte Netze beschränken. Im vorliegenden Beispiel wird der Zugriff auf zwei Klasse-C-Netzwerke sowie das Loopback-Interface beschränkt.
hosts allow = 192.168.1. 192.168.2. 127.
Listing 17.28 Erlaubte Rechner
Wenn Sie Ihre Drucker automatisch laden wollen, anstatt Druckerfreigaben manuell zu konfigurieren, sollten Sie diese Option verwenden.
load printers = yes
Listing 17.29 Drucker automatisch laden
Mit der nächsten Option können Sie den Account für den Gastzugang festlegen. Dieser Account sollte natürlich auch tatsächlich auf dem Serversystem existieren.
guest account = nobody
Listing 17.30 Gastzugriff
Die nächste Option veranlasst Samba, für jeden sich verbindenden Client eine eigene Logdatei anzulegen. Außerdem wird eine Beschränkung von auf 50 KB für die Größe der Logdateien eingeführt.
log file = /var/log/samba/%m.log max log size = 50
Listing 17.31 Logging
Mit den folgenden Sicherheitseinstellungen legen Sie eine benutzerbasierte Authentifizierung fest. Für einzelne Unix-Benutzer muss dazu das Samba-Passwort über das smbpasswd-Tool gesetzt beziehungsweise später auch geändert werden. [Sie erinnern sich: In der /etc/shadow werden die Passwörter nicht im Klartext, sondern nur verschlüsselt gespeichert. Das Passwort im SMB-Protokoll muss aber für die Kompatibilität mit neueren Clients unbedingt vor der Übertragung verschlüsselt werden – und zwar anders, als Unix das macht. Darum braucht Samba eine eigene Passwortdatenbank, die mit smbpasswd verwaltet wird.]
security = user encrypt passwords = yes
Listing 17.32 Sicherheit
Mit den folgenden Optionen erzielen Sie auf Linux-Systemen eine bessere Performance und beschränken den Dienst auf einige bestimmte Netzwerkschnittstellen. Dies ist jedoch nur sinnvoll, wenn der Server mehrere (virtuelle) Netzwerkkarten hat.
socket options = TCP_NODELAY SO_RCVBUF=8192 \ SO_SNDBUF=8192 # interfaces = 192.168.12.2/24 192.168.13.2/24
Listing 17.33 Netzwerk
Die folgenden Einstellungen betreffen NetBIOS-Interna. Haben Sie mehrere SMB-Server im Netzwerk, so können Sie Samba beispielsweise verbieten, lokaler Master zu werden. Diese Option ist jedoch erst in größeren Netzwerken interessant. Andernfalls nimmt Samba mit dem eingestellten OS-Level an den »Wahlen« zum lokalen Master teil. [Das soll in Microsoft-Netzwerken bewirken, dass immer das »neueste« Windows die Gruppe führt – aber Samba kann hier mitmischen.]
# local master = no # os level = 33 # Die folgende Option erlaubt Samba, auch über # Subnetzgrenzen hinweg zu operieren. Falls Sie schon # einen NT-Domain-Controller haben, wird diese Option # jedoch nicht benötigt. domain master = yes
Listing 17.34 NetBIOS-Einstellungen
Aktivieren Sie die folgende Option, um Samba als Domain-Logon-Server für Windows-Systeme zu aktivieren:
# domain logons = yes
Listing 17.35 Domain-Logons
Die Netzwerk- und Computernamen, die man aus der Windows-Welt kennt, haben leider nichts mit DNS zu tun. Es handelt sich dabei um WINS-Namen (Windows Internet Name Serving). Samba kann nun entweder selbst ein entsprechender Nameserver sein oder einen externen WINS-Server benutzen. Alternativ kann Samba auch DNS-Proxy spielen und WINS-Namen über DNS auflösen. Das ist umständlich, aber für »fremde« Protokolle gilt die Unix-Philosophie leider nicht – und es kommt zu Redundanzen, Unklarheiten und unnötigen Problemen. [... die leider auch in reinen Windows-Netzwerken auftreten.]
wins support = yes # wins server = w.x.y.z dns proxy = yes
Listing 17.36 WINS und DNS
Kommen wir nun endlich zu den Freigaben. Der spezielle Freigabenname homes erlaubt jedem Benutzer den Zugriff auf sein Home-Verzeichnis.
[homes]
comment = Heimatverzeichnisse
browseable = no
writable = yes
Listing 17.37 Die Freigaben – Home-Verzeichnis
Eine Freigabe ohne Beschränkungen für temporäre Daten:
[tmp] comment = Temporary file space path = /tmp read only = no public = yes
Listing 17.38 Die Freigaben – temporäre Dateien
Ein öffentliches Verzeichnis, in dem nur die Mitglieder der Gruppe staff schreiben dürfen:
[public] comment = Public Stuff path = /home/samba public = yes writable = yes printable = no write list = @staff
Listing 17.39 Die Freigaben – Public
Zu guter Letzt folgen die Druckerfreigaben: Mit einem BSD-ähnlichen Druckersystem brauchen Sie hier nichts extra zu definieren, da wir mit load printers alle verfügbaren Drucker automatisch freigeben.
[printers] comment = All Printers path = /usr/spool/samba browseable = no # public = yes # erlaubt dem Gastbenutzer, zu drucken guest ok = no writable = no printable = yes
Listing 17.40 Die Druckerfreigaben
17.7.4 Samba, LDAP & Co. 

Nun ist es tatsächlich sehr umständlich, für jeden Benutzer zwei Passwortdatenbanken – die normale /etc/shadow und die Samba-Passwörter – zu verwalten. Aber was bei mehreren Rechnern schon funktioniert hat, funktioniert auch bei Samba: LDAP. Ein entsprechend konfigurierter Server [Man muss natürlich das entsprechende Samba-Schema laden, damit ein Benutzerobjekt alle von Samba benötigten Eigenschaften wie eben sein SMB-Passwort besitzt. Hilfe hierzu finden Sie in der Samba-Dokumentation.] kann mit folgenden Anweisungen in der [globals]-Sektion genutzt werden:
obey pam restrictions = yes passdb backend = ldapsam:ldap://192.168.0.3 guest ldap admin dn = cn=admin,dc=example,dc=com ldap suffix = dc=example,dc=com
Listing 17.41 LDAP-Support
Man braucht also nur den LDAP-Server, das entsprechende Suffix sowie den Administrator-Benutzer anzugeben, und schon können auf dem Server angelegte und entsprechend konfigurierte Benutzer sich über Samba anmelden, und der Admin hat weniger Arbeit. [Da sich über Samba auch Windows-Benutzer an einer Domäne anmelden können, hat man mit dieser Konstruktion sogar eine einheitliche Benutzerverwaltung für heterogene Netzwerke.]
Wenn Sie Samba mit ACLs nutzen wollen, brauchen Sie seit Samba 3.0 die ACLs eigentlich nur noch auf Dateisystemebene zu aktivieren, um von Ihrem Windows-PC aus mit einem Rechtsklick auf entsprechend freigebene Dateien die Unix-Rechte zu ändern. Jetzt muss man nur noch einen Unix-Admin finden, der so etwas auch tun würde ...