Samba Dateiserver

Samba ist ein Datei- und Anmeldeserver für die Protokolle SMB/CIFS. SMB steht für Server Message Block und CIFS für Common Internet File System. Mit CIFS wird die modernere Variante des SMB-Protokolls bezeichnet, welche nur noch einen Port benutzt. SMB/CIFS wird in Microsoft Windows Netzwerken benutzt, um Clients Datei- und Druckerfreigaben bereit zu stellen und Anmeldeinformationen zu verarbeiten. Letztlich ist damit Samba ein Serverdienst der einen Windowsserver für unixartige Betriebsysteme nachstellt.

Samba kann als Druckserver, als einfacher Dateiserver ohne Domänenanmeldung, als Domaincontroller oder als Mitgliedsserver einer Windowsdomäne betrieben werden. Als einfacher Datei- oder Druckserver ohne Domäne verwaltet Samba seine eigenen Benutzeranmeldungen unabhängig vom Rest des Netzwerkes. Als Domaincontroller arbeitet Samba wie ein NT 4 Domaincontroller. Samba 3 kann Mitgliedsserver in einer Active Directory Domäne sein, aber selber nicht Active Directory Domain Controller. Die Funktionalität eines Active Directory Domaincontrollers wird Bestandteil von Samba 4 werden, welcher sich in Entwicklung befindet.

Bestandteile und Grundstruktur

Samba besteht aus 3 Serverprogrammen und einigen Hilfsprogrammen. Die eigentlichen Server sind smbd, nmbd und winbindd. Der smbd ist der eigentliche Datei-, Druck- und Anmeldeserver. Dieser öffnet die Ports 139 und 445 TCP. Der nmbd ist der Serverdienst, der für Namensauflösung und Computersuche in Windowsnetzwerken zuständig ist. Windows Netzwerke verwenden ein eigenes Protokoll zur Namensauflösung in lokalen Netzwerken anstatt oder zusätzlich zur Namensauflösung über DNS. Dieses Protokoll kann sowohl Namen über Broadcasts auflösen, als auch über einen zentralen WINS-Server. Ein WINS-Server ist ein Server für die Windows-Namensauflösung. Microsoft versucht in neueren Versionen von Windows, WINS durch DNS zu ersetzen. Der nmbd kann sowohl WINS-Server, als auch WINS-Client sein und öffnet die Ports 137 und 138 UDP. Der winbindd ist ein zusätzlicher Serverdienst, der Anmeldeinformationen von anderen Windows- oder Sambaservern holt. Er ist nur sinnvoll, wenn der Sambaserver Mitgliedsserver einer Domäne ist und wird ansonsten weggelassen.

Normalerweise werden smbd und nmbd gemeinsam betrieben, aber wenn zum Beispiel nur ein Wins-Server gebraucht wird, ist es auch möglich nur den nmbd alleine zu betreiben. Arbeitet die gesamte Namensauflösung über DNS, ist es auch möglich nur den smbd alleine zu betreiben, jedoch sollte man dies nur mit neueren Windowsversionen (ab Vista) machen, da ältere Versionen sich zumindest auf Teilfunktionen des nmbd verlassen.

Zum Start sowohl des smbd als auch des nmbd werden diese mit dem Parameter -D aufgerufen. Der Parameter -D bewirkt den Start des Programms als Hintergrunddienst. Die meisten Linuxdistributionen und andere unixartige Betriebssysteme bieten ein Start- und Stopscript an, welches beide Dienste gemeinsam startet oder stoppt (zum Beispiel /etc/init.d/samba auf vielen Linuxdistributionen). Bei Änderungen an Freigabedefinitionen muß Samba nicht neu gestartet werden um diese zu aktivieren. Der smbd liest seine Freigabekonfiguration jede Minute neu ein und aktualisiert sich automatisch. Andere Änderungen bedürfen jedoch eines Neustarts der Dienste.

Samba enthält auch das Clientprogramm smbclient. Dieses Programm arbeitet ähnlich wie ein Kommandozeilen FTP-Programm. Man kann damit Dateien von Netzwerkfreigaben auf Samba- oder Windowsservern ablegen oder herunterladen. Man kann damit auch die Funktionalität eines Sambaservers überprüfen.

Ebenfalls Bestandteil von Samba ist SWAT. SWAT steht für Samba Web Administration Tool und bietet eine Weboberfläche zur Konfiguration von Samba an. SWAT benutzt den TCP Port 901 und wird meist über inetd oder xinetd aktiviert. SWAT bietet selbst keine SSL-Verschlüsselung an, so das es sich nicht ohne zusätzliche Sicherungsmaßnahmen als Fernkonfigurationstool anbietet. Außerdem beherrscht SWAT nicht den vollen Konfigurationsumfang von Samba. Diese Unterlagen gehen nicht weiter auf die Nutzung von SWAT ein, sondern gehen von der manuellen Konfiguration, in der Konfigurationsdatei aus.

Daneben bringt Samba auch noch einige Hilfswerkzeuge mit, wie etwa smbtar (speziell für Backups von Netzlaufwerken) oder tdbdump um Informationen von TDB-Datenbanken auszugeben oder smbpasswd und pdbedit um die Samba-Passwortdatenbank zu verändern. Das Kommando smbstatus gibt Statusinformationen zu einem laufenden Sambaserver aus, wie etwa Clientzugriffe auf Freigaben und angemeldete Benutzer.

Als Konfigurationsdatei benutzt Samba die Datei smb.conf, die meist unter /etc/samba liegt. Diese Datei ist sowohl für den nmbd, als auch für den smbd, als auch für den winbindd die Konfigurationsdatei. Die Syntax der Konfigurationsdatei kann mit dem Tool testparm auf syntaktische Fehler geprüft werden. Dies empfiehlt sich nach jeder Änderung an der smb.conf.

Samba benutzt außerdem noch einige weitere Dateien, die automatisch erzeugt werden. Dies ist zum Beispiel die Passwortdatenbank und das Verzeichnis der Computernamen, die über WINS aufgelöst werden können. Samba 3 verwendet sein eigenes Datenbankformat namens TDB (Trivial Database) um diese Daten in Datenbankdateien abzulegen. Diese Daten liegen oft unter /var/lib/samba oder manchmal ebenfalls in /etc/samba. Bei Datensicherungen, sollten diese Dateien ebenfalls mitgesichert werden.

Grundkonfiguration

Die smb.conf benutzt eine ähnliche Konfigurationssyntax, wie Windows INI-Dateien. Es existieren Konfigurationsblöcke, die Namen in eckigen Klammern enthalten. Alle Darunter gemachten Name/Wert Zuordnungen gelten für diesen Block. Dabei existieren einige spezielle Namen, wie etwa global und homes, welche eine spezielle Bedeutung haben. Alle anderen Namen ohne spezielle Bedeutung, werden immer als Namen für Netzwerklaufwerke betrachtet. Kommentarzeilen können entweder mit # oder mit ; beginnen.

Die Konfigurationsdatei beginnt immer mit einem [global] Abschnitt. In diesem Abschnitt stehen Konfigurationsdirektiven, die für alle Freigaben gelten, bzw. die global für den Server sind. Nach diesem Abschnitt können mehrere Abschnitte mit Freigaben folgen. Konfigurationsparameter, werden immer mit der Syntax Name = Wert auf eine Zeile geschrieben.

Die smb.conf akzeptiert auch einige Variablen als Werte für Konfigurationsoptionen. Die wichtigsten Variablen die von der smb.conf verstanden werden listet die folgende Tabelle auf.

Variablen in der smb.conf
VariableBedeutung
%uBenutzername der aktuellen Freigabe
%UAngeforderter Benutzername der aktuellen Freigabe
%gPrimärer Gruppenname von %u
%GPrimärer Gruppenname von %U
%HHome-Verzeichnis von %u
%M(DNS) Hostname des Clients
%mNetbiosname des Clients
%SName der aktuellen Freigabe

Eine der ersten Angaben, die man im [global] Abschnitt der smb.conf machen sollte, ist die Angabe des Namens der Arbeitsgruppe oder Domäne. Beides geht durch den Parameter workgroup. Ein Beispiel:

[global]

workgroup = myworkgroup

Obwohl der Parameter workgroup heißt, gilt er sowohl für die Angabe der Arbeitsgruppe, als auch für die Angabe des Domänennamens. Arbeitsgruppennamen gruppieren Computer für den Computersuchdienst zu logischen Einheiten zusammen. Wenn die Namensauflösung nur noch über DNS erfolgt, ergeben Arbeitsgruppennamen keinen Sinn mehr.

Ebenso läßt sich im [global]-Abschnitt auch der Computername angeben. Dieser Name kann sich vom DNS-Namen unterscheiden. Es handelt sich um den sogenannten Netbiosnamen. Netbiosnamen sind die Namen, die auch ein Winsserver erfaßt oder die bei fehlen eines Winsservers per Broadcast aufgelöst werden. Normalerweise sollte dieser Name mit dem DNS-Namen übereinstimmen. Wird die entsprechende Angabe weggelassen, verwendet Samba automatisch den vorderen Teil des DNS-Hostnamens bis zum ersten Punkt. Die Angabe sieht so aus:

netbios name = meinname

Samba ist auch in der Lage mehr als einen Namen für sich zu beanspruchen. Normalerweise hat in der Windows-Netzwerkwelt jeder Computer nur einen Netbiosnamen. Samba hält sich jedoch nicht daran und ist in der Lage so zu tun als ob er mehrere Computer mit jeweils unterschiedlichen Netbiosnamen wäre. Dies ist ein Feature, welches bei Migrationen manchmal hilfreich sein kann, wenn die Funktionalität eines Server von einem anderen übernommen wird, ohne das man Clients neu konfigurieren will.

netbios aliases = extraname, nochnname

Als Trennzeichen zwischen mehreren Namen, kann sowohl das Komma, als auch das Leerzeichen verwendet werden. Ein Samba-Server mit obiger Konfiguration wird in der Windows Netzwerkumgebung sowohl mit dem Namen extraname, als auch zusätzlich mit dem Namen nochnname auftauchen.

Samba kann zusätzlich zum Netbiosnamen auch einen Kommentar für den Server im Netzwerk bekannt geben. Der Text dieses Kommantares wird in der Detailansicht der Windows Netzwerkumgebung für einen Computer angezeigt. Der Kommentar wird mit server string angegeben:

server string = Mein Samba 3 Server

Auch das Logging, wird in der [global] Sektion der smb.conf konfiguriert. Samba schreibt seine eigenen Logdateien. In welche Datei geloggt wird legt der Parameter log file fest:

log file = /var/log/smblog

Die Ausführlichkeit des Loggings wird durch den Parameter log level bestimmt. Das niedrigste Log Level ist 0. Desto höher der Wert ist, desto ausführlicher werden die Logmeldungen. Werte größer als 3 können zu Performanceeinbussen auf dem Sambaserver führen und sind nur fürs Debugging sinnvoll. Ein normaler Wert wäre 1. Der Standardwert, wenn die Angabe weggelassen wird ist 0:

log level = 1

Samba kann auch seine Logdateien rotieren. Mit dem Parameter max log size wird eine Größe in Kilobyte angegeben, bei deren überschreiten die angegeben Logdatei mit dem Suffix .old umkopiert wird und eine neue Logdatei erstellt wird:

max log size = 500

Eine besonders wichtige Angabe in der smb.conf ist security. Mit diesem Parameter bestimmt man, ob der Server selber Benutzeranmeldungen verarbeitet, oder Mitgliedsserver eine Domäne ist und Benutzer über die Domäne authentifizieren muß. Mögliche Werte für diesen Parameter sind: share, user, domain, ads und server. Der Wert share wird kaum noch verwendet und meint eine Authentifizierung auf Freigabeebene, wie sie unter Windows 95/98 üblich war. Bei diesem Modus bekommt jede Freigabe ein Passwort. Zugriff auf die Freigabe erhält jeder der das Passwort weiß. Diese Freigabeart wird auf neueren Windowsversionen (ab Vista) gar nicht mehr unterstützt. Mit user wird eine individuelle Benutzerauthentifizierung durchgeführt. Das heißt jeder Benutzer, der auf eine Freigabe zugreifen möchte muß sich mit seinem Benutzernamen und dem zugehörigen Passwort, welches vom Sambaserver verwaltet wird, anmelden. Dieser Wert ist für security sowohl bei einem Standalone Arbeitsgruppenserver zu benutzen, als auch bei einem Sambaserver, der als Domaincontroller arbeitet.

Mit dem Wert ads wird die Authentifizierung an einen Active Directory Server ausgelagert. In diesem Fall muß Samba Mitgliedsserver der Active Directory Domäne sein. Mit dem Wert domain geschieht die Authentifizierung über einen NT 4 artigen Domaincontroller (zum Beispiel einen anderen Sambaserver). Auch in diesem Fall muß der Sambaserver Mitgliedsserver der Domäne sein. Mit dem Wert server kann ebenfalls die Authentifizierung über einen anderen Samba- oder Windowsserver erfolgen. Jedoch wird hierbei keine Domäne verwendet.

security = user

Mit dem Parameter passdb backend wird bestimmt in welcher Form Benutzerinformationen gespeichert werden. Diese Angabe ist natürlich nur sinnvoll, wenn security auf user steht. Prinzipiell lassen sich hier eine der beiden Werte tdbsam oder smbpasswd eintragen. Mit smbpasswd werden Benutzerinformationen in die Datei /etc/samba/smbpasswd eingetragen. Dies ist die alte Passwortdatei, welche unter Samba 2, die einzigste Möglichkeit war. Mit Samba 3 wurden TDB Datenbanken zur Datenspeicherung eingeführt. Daher ist es auch sinnvoll, Benutzerinformationen ebenfalls in diesen Datenbanken abspeichern zu können. Wird tdbsam als Wert gewählt, werden die Benutzerinformationen in einer TDB Datenbank abgelegt, welche auch zusätzliche Felder enthält und daher auch Zusatzinformationen zu einem Benutzeraccount aufnehmen kann. Einige zusätzliche Features des Sambaservers (wie etwa Ablaufzeiten für Passwörter) können nur in Verbindung mit dem Wert tdbsam verwendet werden. Wird die Konfigurationsoption weggelassen, war der Standardwert vor Samba 3.4 smbpasswd und ab Samba 3.4 tdbsam. Das explizite eintragen einer Konfigurationsoption, die eigentlich auf ihren Standardwert steht, kann also durchaus Sinn machen, da Standardwerte bei Versionsupdates unterschiedlich sein können.

passdb backend = tdbsam

Hat ein Sambaserver mehrere Netzwerkinterfaces, könnte es sein, daß der Sambaserver nur eines davon benutzen soll. Für diesen Zweck existiert die Konfigurationsoption interfaces. Diese Option erwartet entweder Schnittstellennamen wie etwa eth0 oder Paare aus Adresse und Netzwerkmaske. Ein Beispiel:

interfaces = 192.168.1.5/255.255.255.0

Es ist auch möglich den Zugriff auf den Sambaserver nur für bestimmte Netzwerkadressen zu erlauben. Dafür existiert die Konfigurationsoption hosts allow, welche Synonym ist zu allow hosts. Als Wert kann hier eine Liste mit IP-Adressen oder Netzwerken angegeben werden:

hosts allow = 192.168.2.0/24, 172.16.0.0/16

Namensauflösung

Windowsnetzwerke verwenden traditionell ein eigenes Protokoll zur Namensauflösung: Netbios. In älteren Windowsversionen wurde dieses Protokoll anstatt DNS für lokale Netzwerke verwendet und DNS war nur für Internetverbindungen vorgesehen. Seit Windows 2000 kann im lokalen Netzwerk sowohl DNS, als auch Netbios für die Namensauflösung verwendet werden. Langfristig möchte Microsoft Netbios beerdigen und nur noch DNS verwenden. Seit Windows Vista wird DNS über Netbios präferriert. Netbiosnamen können auf 2 Arten aufgelöst werden: Entweder durch Broadcasts im Netzwerk oder durch einen Winsserver. Bei der Namensauflösung über Broadcasts wird kein Server der die Namensauflösung durchführt benötigt. Bei der Namensauflösung über einen Winsserver stellen alle Netbiosclients ihre Anfragen zentral an einen Winsserver. Dazu müssen diese so konfiguriert werden, daß diese den Winsserver kennen. Dies kann entweder durch eine DHCP-Option erfolgen, falls die Clients DHCP nutzen, oder die Adresse des Winsservers wird im Client fest hinterlegt. Wird der ISC DHCP Server verwendet, würde eine entsprechende Zeile in der dhcpd.conf zur Konfiguration eines Winsservers zum Beispiel so aussehen:

option netbios-name-servers 192.168.3.11;

Soll die Adresse des Winsservers, statisch hinterlegt werden, befindet sich der entsprechende Konfigurationsdialog zum Beispiel bei Windows XP in der Systemsteuerung unter Netzwerk- und Internetverbindungen -> Netzwerkverbindungen, dann mit der rechten Maustaste auf die jeweilige Netzwerkverbindung klicken, dann auf Eigenschaften gehen. In dem sich öffnenden Fenster Internetprotokoll (TCP/IP) auswählen und auf den Button Eigenschaften klicken. In dem sich dann öffnenden Fenster auf den Button Erweitert klicken und in dem sich dann öffnenden Fenster auf den Reiter Wins gehen. Dort kann mit dem Button Hinzufügen, die Adresse eines Winsservers hinzugefügt werden (siehe Bild).

Winsdialogbox in Windows XP

Zu unterscheiden von der Netbios Namensauflösung, ist der Computersuchdienst. Während Wins auf UDP Port 137 arbeitet, benutzt der Computersuchdienst den UDP Port 138. Der Computersuchdienst, stellt sogenannte Browselisten zusammen. Diese enthalten die (Netbios-) Namen aller Computer im Netzwerk und zu welcher Arbeitsgruppe diese gehören. Diese Computersuchlisten sind wichtig für die Sichtbarkeit der Computer in der Windows Netzwerkumgebung. Computersuchlisten werden durch einen Computer vorgehalten, der zum Masterbrowser des jeweiligen Subnets gewählt wurde. Die wahlen zum Masterbrowser finden zwischen den Computern über Broadcasts statt. Wer diese wahlen gewinnt, hängt von mehreren Faktoren, wie etwa dem verwendeten Windowssystem ab. Unter Windows läßt sich die Wertigkeit eines Computers für Masterwahlen nicht beeinflussen. Unter Samba existieren mehrere Konfigurationsparameter die bestimmen, ob Samba an Masterwahlen teilnimmt und mit welcher Gewichtung. Existieren mehrere Subnetze existiert ein Problem die Computersuchlisten zusammenzustellen, da Broadcasts keine Subnetzgrenzen überschreiten können. In diesem Fall wird neben dem lokalen Masterbrowser auch ein Domain Masterbrowser bestimmt. Der Domain Masterbrowser sammelt die Informationen aller lokalen Masterbrowser der verschiedenen Subnetze und tauscht diese mit den anderen lokalen Masterbrowsern in jedem Subnetz aus. Der Domain Masterbrowser wird von den lokalen Masterbrowsern nur durch einen Winsserver gefunden. Existieren mehrere Subnetze, sollte also unbedingt auch ein Winsserver betrieben werden.

Unter Samba wird sowohl der Computersuchdienst, als auch der Netbios Client/Server, wie auch der Winsserver durch den nmbd bereit gestellt. Der Winsserver in Samba ist jedoch nicht replizierungsfähig, das heißt es kann nur einen Winsserver in einem Netzwerk geben, da der Winsserver seine Informationen nicht mit einem zweiten Winsserver teilen kann. Es existiert ein eigenes Sambaprojekt namens Samba4Wins welches einen replizierenden Winsserver zur Verfügung stellt.

Die Konfigurationsoption wins support in der [global]-Sektion der smb.conf, macht den Sambaserver zum Winsserver:

wins support = yes

Diese Konfigurationsoption sollte nicht verwechselt werden mit wins server. Die Option wins server definiert einen anderen Server als eingestellten Winsserver für Samba und erwartet eine IP Adresse. Diese Konfigurationsoption entspricht für Samba, der statischen Konfiguration eines Winsservers in einem Windowsclient:

wins server = 192.168.1.12

Die beiden Angaben wins server und wins support dürfen keinesfalls gemeinsam in einer smb.conf vorkommen.

Um die Wahlen für den Masterbrowser zu konfigurieren, existieren die Konfigurationsoptionen local master, domain master, prefered master und os level. Mit local master wird angegeben ob Samba an Wahlen zum lokalen Masterbrowser teilnehmen soll. Mit domain master wird Samba zum Domain Masterbrowser. Diese Option hat nichts mit der Windowsdomänenanmeldung zu tun. Mit prefered master, werden Wahlen zum lokalen Masterbrowser ausgelöst, sobald Samba ins Netzwerk kommt. Dies würde sonst nicht unbedingt geschehen, wenn es bereits einen lokalen Masterbrowser gibt. Mit os level kann die Gewichtung bestimmt werden, die Samba bei der Wahl zum lokalen Masterbrowser bekommt. Jedes Windowsbetriebssystem hat hier eine eigene vorgegebene Gewichtung, die unter Windows nicht geändert werden kann. Zum Beispiel hat ein Windows 2000/XP einen Wert von 16. Ein Windows Domaincontroller hat einen Wert von 32. Soll Samba die Wahl in jeden Fall gewinnen, läßt sich ein entsprechend höherer Wert einstellen.

Ein vollständiges Beispiel:

wins support = yes
os level = 70
local master = yes
domain master = yes
prefered master = yes

In diesem Beispiel arbeitet der Samba Server als Winsserver, nimmt an lokalen Masterbrowserwahlen teil und wird auch Domain Masterbrowser. Der os level von 70 garantiert ihm die Wahl zum Masterbrowser und prefered master sorgt dafür, das Samba nach einer Downtime, sich sofort wieder zum Masterbrowser wählen lassen kann.

Die mit den bisher gelernten ausgestatte smb.conf könnte nun zum Beispiel so aussehen:

[global]

workgroup = myworkgroup
netbios name = meinname
server string = Samba Server

log file = /var/log/sambalog
max log size = 500
log level = 1

security = user
passdb backend = tdbsam

wins support = yes
local master = yes
prefered master = yes
domain master = yes
os level = 70

Einfache Freigaben

Nach der Konfiguration der Globalsektion können erste Freigaben erstellt werden. Der Name der Freigabe ist der Name der Sektion. Außerdem benötigt jede Freigabe zwingend einen Pfad zu dem Verzeichnis welches freigegeben werden soll. Der Pfad wird mit path angegeben. Daneben kann auch noch comment benutzt werden um der Freigabe einen Kommentar hinzuzufügen, welcher in der Windows Netzwerkumgebung angezeigt wird. Eine minimale Freigabedefinition könnte also so aussehen:

[public]

comment = Freigabe für alle
path = /home/samba/public

Diese Freigabe heißt public und Clients können sich unter diesen Namen mit dieser Freigabe verbinden. Das freigegebene Verzeichnis auf dem Server liegt unter /home/samba/public. Es ist durchaus geschickt zur Übersicht, die Verzeichnisse so zu nennen, wie die zugehörigen Freigaben heißen.

Rechte auf Freigaben

Samba berücksichtigt in freigebenen Verzeichnissen die Unix-Zugriffsrechte. Ein Benutzer kann nur auf die Dateien einer Freigabe zugreifen, wenn ihm dies die Unixrechte ebenfalls gestatten. Daher müsssen in freigegebenen Verzeichnissen die Rechte entsprechend gesetzt werden. Soll das Verzeichnis etwa ein Gruppenlaufwerk sein, müssen alle Dateien einer entsprechenden Unixgruppe zugeordnet sein, welche auf alle Dateien Lese- und Schreibrecht hat und die Benutzer müssen Mitglied der Gruppe sein.

Zusätzlich hat Samba auch einige eigene Konfigurationsoptionen für Rechte. Samba gibt in der Grundeinstellung Dateien nur Lesbar frei, selbst wenn die Unixrechte schreiben erlauben sollten. Um eine Freigabe auch beschreibbar zu machen, muß die Option writeable gesetzt werden. Diese Option ist identisch mit der Option read only, lediglich mit umgekehrter yes/no Bedeutung. Um obige Beispielfreigabe schreibbar freizugeben müßte man diese zum Beispiel so abändern:

[public]

comment = Freigabe für alle
path = /home/samba/public
writeable = yes

Samba-Rechte und Unixrechte wirken additiv, das heißt, ein Zugriff wird nur gestattet, wenn sowohl die Sambaoptionen ihn gestatten, als auch die Unixrechte. Generell ist es vorzuziehen, Rechte auf Unixebene zu vergeben, da diese nicht nur in Samba sondern bei jedem Dateizugriff wirken und man damit ein einzelnes Werkzeug für die Rechtevergabe benutzt, was die Verwaltung vereinfacht. Nur in speziellen Situationen, wenn die gewünschten Rechte auf Freigaben, so nicht mit den Unixrechten abgebildet werden können, sollte zu zusätzlichen Sambaoptionen gegriffen werden.

Soll eine Freigabe nicht für alle beschreibbar sein, sondern nur für bestimmte Benutzer, läßt sich dies natürlich am besten per Unixrechte regeln. Zusätzlich existiert auch in Samba die Option write list. Diese Option bewirkt, daß nur die angegebenen Benutzer Schreibzugriff erhalten. Mehrere Benutzer können durch Komma oder Leerschritt getrennt werden. Es können auch Gruppennamen von Unixgruppen verwendet, werden, welche dann ein @ vor dem Namen benötigen. Das @-Zeichen bewirkt das Samba dies als Gruppenname, statt als Benutzername erkennt:

[public]

comment = Freigabe für alle
path = /home/samba/public
write list = @admins, karl

In obigen Beispiel wird der Schreibzugriff auf die Freigabe public nur für Benutzer in der Gruppe admins und für den Benutzer karl gewährt. Die Unixrechte müssen diese Zugriffe natürlich ebenfalls gestatten.

Mit valid users kann festgelegt werden, welche Benutzer eine Freigabe überhaupt benutzen dürfen. Auch für diese Konfigurationsoption können sowohl Benutzernamen, als auch Gruppennamen von Unixgruppen mit vorangestellten @-Zeichen verwendet werden:

[admins]

comment = Nur für Admins
path = /home/samba/admins
valid users = @admins, sabine

In diesem Beispiel kann die Freigabe admins nur von der Gruppe admins und von der Benutzerin sabine benutzt werden.

Praktischerweise ist es auch möglich mit Konfigurationsoptionen zu bestimmen, welche Rechte neu angelegte Dateien in einer Freigabe haben sollen. Hierzu gibt es die Konfigurationsdirektiven create mask und directory mask. Normalerweise bekommen Dateien und Verzeichnisse ihre Rechte auf Unixsystemen anhand der umask. Samba verwendet ebenfalls die umask solange mit create mask und directory mask nichts anderes bestimmt wird. Diese Konfigurationsoptionen erwarten eine vierstellige Zahl, welche die Rechte einer neuen Datei angeben. Die Zahlen werden also nicht wie bei der umask von den maximal möglichen Rechten abgezogen, sondern so wie angegeben verwendet. create mask gilt dabei für Dateien, während directory mask den Wert für Verzeichnisse bestimmt:

[public]

comment = Freigabe für alle
path = /home/samba/public
writeable = yes
create mask = 0664
directory mask = 0775

In diesem Beispiel bekommen Dateien die in der Freigabe public neu angelegt werden, die Rechte 664 und Verzeichnisse die Rechte 775.

Während das Lese- und das Schreibrecht von Unix 1:1 in Ihrer Bedeutung für Windows in Samba umgesetzt werden, hat das Ausführen Recht unter Unix (x-Bit) eine spezielle Bedeutung. Einige Dateieigenschaften die unter Windows existieren, existieren nicht als Dateiattribut unter Unix. Dazu zählen die Dateiattribute versteckt, Archiv und System. Diese drei Attribute werden unter Samba einfach auf die 3 x-Bits von Besitzer, Gruppe und Andere abgebildet. Ein gesetztes Ausführen-Recht für den Besitzer, steht für die Dateieigenschaft Archiv. Das Ausführen Recht der Gruppe steht für die Dateieigenschaft System und das Ausführen Recht für Andere steht für die Dateieigenschaft Versteckt. Ob dieses Mapping überhaupt verwendet wird, wird durch drei Konfigurationsoptionen bestimmt: map archive, map system und map hidden. Standardmäßig steht davon nur map archive auf yes. Diese Konfigurationsoptionen können sowohl global als auch Freigabespezifisch gesetzt werden. Falls also zusätzlich auch das Versteckt Attribut verwendet werden soll, kann folgende Option in die smb.conf mit aufgenommen werden:

map hidden = yes

Falls zusätzlich create mask verwendet wird, muß die Maske das Bit 0001 enthalten, da das Ausführen Bit nur gesetzt wird, wenn auch create mask dies erlaubt.

weitere Freigabeeigenschaften

Es ist auch möglich Freigaben als versteckt zu deklarieren. Versteckte Freigaben werden in der Netzwerkumgebung nicht angezeigt, kennt man aber ihren Namen, kann man sich trotzdem verbinden. Unter Windows haben versteckte Freigaben immer ein $-Suffix, unter Samba muß zum deklarieren einer versteckten Freigabe nur die Konfigurationsoption browseable verwendet werden. Der Standardwert von browseable ist yes. Wird browseable auf no umgestellt, wird die Freigabe zur versteckten Freigabe.

Dateien mit einem führenden Punkt im Dateinamen sind unter Unix versteckte Dateien. Da dies unter Windows nicht ebenfalls der Fall ist, kann eine Konfigurationsoption von Samba bestimmen, ob Dateien mit führenden Punkt im Namen unter Windows ebenfalls versteckte Dateien sein sollen:

hide dot files = yes

Der Standardwert von hide dot files steht bereits auf yes.

Es ist auch möglich eine Liste mit Dateinamen anzugeben, die unter Windows versteckte Dateien sein sollen. Dies geschieht über die Option hide files. Die Liste mit Dateinamen muß mit Schrägstrichen getrennt werden, was auch Leerschritte im Namen erlaubt:

hide files = /profiles/Maildir/

Dieses Beispiel wird die beiden Datei- oder Verzeichnisnamen profiles, sowie Maildir unter Windows verstecken. In der Dateinamenliste können auch die Wildcardzeichen ? und * verwendet werden.

Die homes-Freigabe

Einige wenige Freigabenamen werden unter Samba speziell behandelt. Dazu gehört die Freigabe homes (der andere reservierte Freigabename ist printers). Beginnt eine Freigabesektion mit dem Namen [homes], gilt diese automatisch als Freigabe des Heimatverzeichnisses eines Benutzers. Diese Freigabe ist daher auch die einzigste Freigabe bei der die Option path weggelassen werden muß. Möchte man jedem Benutzer sein Heimatverzeichnis als persönliche Freigabe anbieten, kann das zum Beispiel so aussehen:

[homes]

comment = Heimatverzeichnis
valid users = %S
browseable = no
writeable = yes

Diese Freigabedefinition verwendet 2 kleine Tricks: Zum einen wird die Freigabe mit browseable = no als versteckt markiert. Dies wird bei der homes-Freigabe gemacht, damit nur der jeweilige Benutzer seine eigene Freigabe sieht. Ansonsten würde jeder Benutzer, jedes Heimatverzeichnis (also auch die von anderen Benutzern) als Freigabe auf dem Server sehen. Die Option browseable wird also bei der homes-Freigabe speziell behandelt.

Zum anderen wird mit valid users = %S nur der Benutzer auf eine Freigabe zugelassen, dessen Benutzername dem Freigabenamen entspricht. Die Sambavariable %S steht für den Namen der Freigabe. Da Heimatverzeichnisse den Namen des Benutzers haben, wird damit jeweils der Besitzer eines Heimatverzeichnis als berechtigter Benutzer zugelassen. Dies ist auch insofern sinnvoll, als das auf viele Heimatverzeichnisse Leserechte für andere Benutzer gesetzt sind und daher die Unixrechte zumindest einen lesenden Zugriffe für alle Benutzer gestatten würden. Es ist natürlich auch möglich alle Heimatverzeichnisse auf die Rechte 700 zu setzen, damit nur noch der Besitzer zugriffsberechtigt ist.

Benutzerverwaltung für einfache Freigaben

Setzt man das bisher besprochene um, erhält man einen einfachen Arbeitsgruppenserver, der vielleicht auch Winsserver ist und einige Freigaben anbietet. Damit Benutzer aber auf diese Freigaben zugreifen können, müssen sie erst angelegt werden. Da Dateien im Dateisystem immer auch einen realen Besitzer benötigen muß jeder Sambabenutzer als ganz normaler Unixbenutzer existieren, das heißt mit den Werkzeugen des jeweiligen Systems als Benutzer angelegt werden. Damit diese Benutzer sich nicht auch über andere Dienste wie etwa SSH einloggen können, kann ihnen als Shell zum Beispiel /bin/false gegeben werden, so daß ein direktes einloggen mit einer Shell nicht möglich ist. Zusätzlich kann speziell für SSH auch die Konfigurationsoption AllowUsers oder AllowGroups, bzw. DenyUsers oder DenyGroups verwendet werden, welche die Benutzer die den SSH Server benutzen dürfen einschränkt.

Da Windowsnetzwerke jedoch andere Passwortverschlüsselungsmethoden verwenden, als Unixsysteme, kann Samba nicht die Unixpasswortdatenbank mitnutzen. Daher führt Samba eine eigene Passwortdatenbank. Um also einen Benutzer für Samba anzulegen, muß er zuerst als Unixbenutzer angelegt werden und dann noch in die Sambapasswortdatenbank aufgenommen werden.

Zum anlegen und ändern von Sambapasswörtern existiert das Tool smbpasswd. Soll ein neuer Benutzer in die Samba Passwortdatenbank eingetragen werden könnte der Aufruf so aussehen:

smbpasswd -a karl

Die Option -a dient dem neu anlegen eines Benutzers. Zuletzt wird der Benutzername angegeben. Das Kommando fragt dann interaktiv nach dem neuen Passwort. Soll ein bestehendes Passwort geändert werden, muß der Parameter -a weggelassen werden. Vor Ausführung dieses Kommandos muß der Benutzer unter gleichen Namen bereits als Unixbenutzer angelegt worden sein. Ein Unixpasswort benötigt er nicht, wenn er nur Sambabenutzer sein soll.

Mit der Option -x für smbpasswd kann ein Benutzer wieder gelöscht werden:

smbpasswd -x karl

Wird der Unixaccount dieses Benutzers danach ebenfalls nicht mehr benötigt kann dieser anschließend ebenfalls gelöscht werden. Dies muß jedoch immer nach dem löschen in der Samba Passwortdatenbank geschehen.

Eine Alternative zum Kommando smbpasswd stellt das mit Samba 3 neu eingeführte Kommando pdbedit dar. Mit pdbedit -L können alle Benutzeraccounts aufgelistet werden. Ein neuer Benutzer wird mit pdbedit -a -u benutzername angelegt. Dabei steht die Option -a, wie auch bei smbpasswd für das Neuanlegen und mit -u wird der Benutzername angegeben. Die Option -x dient genau wie bei smbpasswd dem löschen eines Benutzers.

Legt man häufiger Sambabenutzer an, kann man sich die Arbeit durch ein Shellscript, welches die einzelnen Schritte automatisiert, einfacher machen.

Ein Domaincontroller

Ein großer Nachteil der bisherigen Konfiguration, ist die fehlende zentrale Authentifizierung der Benutzer. Benutzer melden sich an ihren Clients an, welche eine lokale Benutzerdatenbank haben. Samba hat nochmal seine eigene Benutzerdatenbank. Ändert ein Benutzer sein Passwort lokal, ist es in Samba nicht geändert. Eine Domäne löst dieses Problem und bietet daneben auch noch einige weitere Zusatzfunktionen, wie etwa servergespeicherte Profile.

Eine Windows-Domäne ist vor allem ein zentraler Authentifizierungsdienst. Die Windows-Clients der Domäne authentifizieren sich nicht mehr gegen ihre eigene lokale Benutzerdatenbank, sondern gegen die auf dem Server gespeicherten Benutzerinformationen. Dabei existieren 2 Arten von Windows-Domänen: NT4 artige Domänen und Active Directory Domänen, welche mit Windows 2000 eingeführt wurden.

NT 4 artige Domänen bestehen aus einem Primary Domain Controller (PDC) und beliebig vielen Backup Domain Controller (BDC). Auf dem Primary Domain Controller werden alle Benutzerinformationen verwaltet. Auf dem BDC wird eine Lesekopie dieser Informationen gespeichert. Fällt der PDC aus, können Domänenanmeldungen weiterhin durch den BDC durchgeführt werden. Änderungen wie etwa Passwortänderungen können jedoch nur auf dem PDC durchgeführt werden.

Active Directory Domänen sind im Gegensatz dazu Multimasterfähig. Das heißt, es gibt keine Unterscheidung mehr zwischen PDC und BDC, sondern jeder Domaincontroller kann auch Schreiboperationen auf die Benutzerdatenbank durchführen und gleicht diese automatisch mit anderen Domaincontrollern ab. Außerdem verwalten Active Directory Domaincontroller nicht nur Benutzerdaten, sondern integrieren auch Hostinformationen per DNS und DHCP in die Domaindatenbank. Ein Active Directory Domaincontroller nutzt dazu eine LDAP Datenbank, dynamisches DNS und Kerberos als Authentifizierungsdienst. Die gleichen Technologien existieren auch unter Unix, aber nicht auf diese integrierte und verzahnte Art und Weise.

Samba 3 kann PDC einer NT 4 artigen Domäne sein. Das Protokoll zum Abgleich zwischen PDC und BDC ist von den Sambaentwicklern nie vollständig entschlüsselt worden, weshalb es diese Abgleichmöglichkeit in Samba nicht gibt. Samba 3 kann nur PDC oder Mitgliedsserver, aber nicht BDC einer Domäne sein. Es ist allerdings möglich die Funktionalität eines BDC zu emulieren, indem die Accountdatenbank in ein LDAP Verzeichnis abgelegt wird und LDAP selbst wiederrum ist Replizierungsfähig. Das heißt der LDAP-Server kann auf einem zweiten Server eine Lesekopie vorhalten. Hierzu ist zusätzlich zum Sambaserver die Konfiguration eines LDAP-Servers erforderlich, welche hier nicht besprochen wird. Die Funktionalität eines Active Directory Domaincontrollers wird für Samba 4 entwickelt. Samba 3 kann nur Mitgliedsserver einer Active Directory Domäne sein, aber nicht selbst Domaincontroller.

Samba wird zum Domaincontroller durch die Konfigurationsoption domain logons welche in der global-Sektion verwendet wird:

domain logons = yes

Zusätzlich muß Samba dann auch Domain Master Browser für den Computersuchdienst sein, so daß auch domain master auf yes stehen muß. Diese Funktion hat eigentlich nichts mit der Domänenanmeldung zu tun, jedoch verlangen Windowsclients, daß ein Domaincontroller immer auch Domain Master Browser ist. Außerdem muß die Option security auf user stehen, damit der Domaincontroller funktionieren kann. Der Domänenname wird über die bereits oben erklärte Option workgroup eingestellt.

In einer Domäne bekommt jeder Benutzer sein Heimatverzeichnis automatisch als Laufwerk Z: am Client als Netzlaufwerk zugewiesen. Der Laufwerksbuchstabe kann mit der Option logon drive auch geändert werden:

logon drive = H:

In einer Domäne werden außerdem die Benutzerprofile auf dem Server gespeichert. Ist nichts anderes konfiguriert, werden diese direkt im Heimatverzeichnis, meist mit dem Namen profile abgespeichert. Es empfiehlt sich dieses Verzeichnis vor den Benutzern zu verstecken. Profile werden bei jedem Anmeldevorgang zwischen Client und Server kopiert.

Benutzerverwaltung in Domänen

Die Benutzerverwaltung in einer Domäne ist nicht anders, als für einen Standalone-Server, wie bereits oben beschrieben. Es muß also ein Unixbenutzer angelegt werden, der durch smbpasswd oder pdbedit auch in der Sambapasswortdatenbank angelegt wird. Zusätzlich zu den Benutzern, wird in einer Domäne jedoch auch für Computer ein Nutzerkonto, ein sogenanntes Maschinenkonto benötigt. Dabei können Maschinenaccounts entweder manuell auf dem Sambaserver angelegt werden, wie die Benutzeraccounts auch, oder aber der Sambaserver wird so eingerichtet, daß Clients direkt der Domäne beitreten können und dabei automatisch ein Maschinenkonto erstellt wird.

Beim manuellen Anlegen wird ebenso ein Unixbenutzer angelegt, wie auch ein Eintrag in die Sambapasswortdatenbank. Der Unixbenutzer muß immer das Suffix $ haben. Der Unixbenutzername besteht also aus dem Netbiosnamen des Rechners plus dem $-Zeichen. Auch hier empfiehlt es sich wieder diesen Account keine reale Shell zu geben. Um den Maschinenaccount auch in die Sambapasswortdatenbank einzutragen, wird der Parameter -m für smbpasswd (oder pdbedit) benutzt:

smbpasswd -a -m mywinhost

Das Passwort wird in diesem Fall als zufälliges Passwort automatisch vergeben.

Soll der Maschinenaccount automatisch erstellt werden, wenn ein Client in die Domäne aufgenommen wird, muß der Sambaserver so eingerichtet werden, daß er beim hinzufügen eines Computers in die Domäne automatisch einen Befehl ausführt, welcher den entsprechenden Unixaccount anlegt. Sollte sich auf dem jeweiligen System beispielsweise mit folgenden Kommando ein entsprechender Unixbenutzer anlegen lassen useradd -d /var/empty -g sambapc -c "Samba PC" -s /bin/false hostname$, so würde die entsprechende Option in der global-Sektion der smb.conf zum Beispiel so aussehen:

add machine script = /usr/sbin/useradd -d /var/empty \
-g sambapc -c "Samba PC" -s /bin/false %u

Die Option add machine script enthält ein Kommando welches automatisch beim hinzufügen eines Computers in die Domäne ausgeführt wird. Der Backslash maskiert hier nur den Zeilenumbruch. Normalerweise sollte dieses Kommando ohne Backslash in eine Zeile geschrieben werden. Der Benutzername (welches hier eigentlich der Hostname ist) wird als Variable mit %u angegeben. Das Dollarzeichen am Ende kann hierbei einfach weggelassen werden, da es automatisch angefügt wird.

Anschließend kann der Client in die Domäne aufgenommen werden.

Ein Windowsclient läßt sich in die Domäne aufnehmen indem zum Beispiel bei Windows XP, auf das Arbeitsplatz-Icon ein Rechtsklick gemacht wird, dann Eigenschaften angeklickt wird. In dem erscheinenden Dialogfenster geht man auf die Registerkarte Computername. Mit einem Klick auf den Button Netzwerkkennung öffnet sich dann ein Assistent mit dem sich der Computer der Domäne anschließen läßt.

Speziell unter Windows 7 gibt es jedoch ein Problem. Windows 7 ist nicht mehr vollständig abwärtskompatibel zu NT 4 Domänen. Daher muß in einem Client mit Windows 7 zuerst 2 Registry-Werte abgeändert werden, damit dieser einer Sambadomäne beitreten kann. Ein entsprechender fertiger Registrypatch, der auf einem Windows 7 Client einfach durch Doppelklick hinzu gefügt werden kann, kann unter folgender Webadresse herunter geladen werden: https://bugzilla.samba.org/attachment.cgi?id=4988&action=view. Außerdem muß Samba mindestens in Version 3.3.5 betrieben werden damit Windows 7 in die Domäne eintreten kann. Weitere Informationen darüber finden sich auch im Samba Wiki

Literatur

Lendecke/Seeger/Jacke/Adam: Samba 3 für Unix/Linux-Administratoren, dpunkt Verlag 2009.


René Maroufi, dozent (at) maruweb.de
Creative Commons By ND