summaryrefslogtreecommitdiffstats
path: root/docs/textdocs/kurs.tex
diff options
context:
space:
mode:
Diffstat (limited to 'docs/textdocs/kurs.tex')
-rw-r--r--docs/textdocs/kurs.tex4856
1 files changed, 4856 insertions, 0 deletions
diff --git a/docs/textdocs/kurs.tex b/docs/textdocs/kurs.tex
new file mode 100644
index 00000000000..93771c40e86
--- /dev/null
+++ b/docs/textdocs/kurs.tex
@@ -0,0 +1,4856 @@
+\documentclass{scrartcl}\usepackage{pslatex}\typearea{12}
+%\documentclass[ncs]{dpunkt}
+\usepackage[dvips,colorlinks=true,
+ pdfauthor={Volker Lendecke, Service Network GmbH},
+ pdftitle={Kursskript Samba},
+ pdfsubject={Samba},
+ pdfkeywords={samba,training}
+ ]{hyperref}
+\usepackage[T1]{fontenc}
+\usepackage{german}
+\usepackage{pstricks}
+\usepackage[dvips]{epsfig}
+\newcommand{\prog}{\texttt}
+\newcommand{\param}{\texttt}
+\newcommand{\dateistyle}{\texttt}
+\newcommand{\nbname}{\texttt}
+\newcommand{\todo}[1]{}
+\newcommand{\defin}{\emph}
+\newcommand{\username}{\textbf}
+\hyphenation{Net-BIOS}
+
+\setcounter{tocdepth}{1}
+
+\usepackage{fancyheadings}
+\pagestyle{fancyplain}
+\lhead{}
+\rhead{\thepage}
+\rfoot{\copyright{} 1999, 2000, 2001, Volker Lendecke
+(http://www.sernet.de/vl/)}
+\cfoot{}
+
+\author{Volker Lendecke\\\texttt{VL@SerNet.DE}}
+\title{Samba for Runaways}
+
+\begin{document}
+
+\title{Kursskript\\[\baselineskip]
+ \epsfig{file=logo.ps,width=6cm}}
+
+\author{Volker Lendecke\\
+Service Network GmbH\\
+G"ottingen\\
+http://www.SerNet.DE/\\
+http://samba.SerNet.DE/}
+
+\date{\today}
+
+\maketitle
+\thispagestyle{empty}
+
+\begin{quote}
+ Dieses Dokument ist eine Mitschrift des Sambakurses der Service
+ Network GmbH in G"ottingen. Es gibt einen guten "Uberblick "uber den
+ Kurs und kann gleichzeitig als generelle Einf"uhrung in NetBIOS und
+ Samba dienen.
+\end{quote}
+
+\break
+
+\tableofcontents
+
+\break
+
+\section{Einf"uhrung}
+
+Samba -- Was ist das?
+
+Kurz gesagt l"a"st Samba jeden Unixrechner in der Netzwerkumgebung von
+Windows erscheinen. Das hei"st, man kann von Windows aus auf einen
+Unixrechner genau wie auf einen anderen Windowsrechner zugreifen. Der
+Clientrechner merkt gar nicht, da"s er es nicht mit einem echten
+Windowsserver zu tun hat. Im Detail bedeutet das, da"s sehr einfach
+Dateifreigaben erstellt werden k"onnen. Jeder Benutzer kann
+transparent Dateien auf seinem Heimatverzeichnis unter Unix und in
+anderen freigegebenen Verzeichnissen ablegen. Weiterhin kann man
+Drucker, die unter Unix ansprechbar sind, als Netzwerkdrucker in
+Windows ansprechen. Dar"uber hinaus bietet Samba viele Dienste, die
+sonst nur von Windows NT geleistet werden. Dazu geh"oren:
+
+\begin{description}
+
+\item[WINS-Server] Mit Samba kann sehr einfach ein WINS-Server
+ eingerichtet werden. Dieser stellt Namensdienste f"ur NetBIOS-Netze
+ zur Verf"ugung, damit sich Windows-Maschinen "uber Subnetzgrenzen
+ hinweg erreichen k"onnen
+
+\item[Computersuchdienst] Samba als sehr stabiler Server kann alle
+ Aufgaben des Computersuchdienstes "ubernehmen. Die in Windowsumgebungen
+ oft nicht sehr vorhersagbare Netzwerkumgebung kann so etwas
+ stabiler gemacht werden.
+
+\item[Logon Server] F"ur Windows-95/98 ist Samba Logon-Server, kann
+ also die Dom"anenanmeldung f"ur diese Systeme "ubernehmen.
+
+\item[PDC] Die Funktionalit"at des echten Primary Domain Controller
+ ist nicht vollst"andig implementiert. F"ur viele Anwendungszwecke,
+ insbesondere Authentifizierung von NT-Workstation\-be\-nu\-tzern, reicht
+ Samba jedoch v"ollig aus.
+
+\item[Diagnosewerkzeuge] Samba bietet eine Reihe von kleinen, aber
+sehr effektiven Werkzeugen, die die oft m"uhselige Suche nach Fehlern
+im Netz vereinfachen k"onnen.
+
+\end{description}
+
+Samba bietet gegen"uber anderen Implementationen des
+SMB-Protokolls einige Vorteile. Teilweise sind diese Vorteile von Unix
+geerbt, teilweise sind sie in der Architektur von Samba begr"undet.
+
+\begin{description}
+
+\item[Entfernte Administration] Der gr"o"ste Vorteil von Samba in
+ gr"o"seren Umgebungen ist die M"oglichkeit, die gesamte
+ Administration von der Kommandozeile aus durchzuf"uhren. Damit
+ bekommt man gegen"uber grafischen Oberfl"achen sehr viel bessere
+ M"oglichkeiten, von entfernten Standorten aus zu administrieren.
+ Werkzeuge wie PC Anywhere sind hier deutlich weniger flexibel.
+
+ Zus"atzlich bietet Samba die M"oglichkeit der grafischen
+ Administration "uber einen Webbrowser. Auch hier ist es unerheblich,
+ wo sich Administrator und Server befinden.
+
+\item[Zentrale Konfiguration] Die gesamte Konfiguration von Samba
+ befindet sich in einer einzigen Datei und ist nicht "uber viele
+ Dialogfelder verteilt. Das erleichtert die Administration erheblich.
+ So l"a"st sich eine funktionierende Konfiguration sehr einfach
+ sichern und wieder einspielen.
+
+\item[Stabilit"at] Samba erbt von Unix eine hohe Stabilit"at.
+ Unixrechner sind daf"ur ausgelegt, "uber Monate hinweg durchzulaufen
+ und leisten dies auch. Samba als weiterer Proze"s profitiert von
+ dieser hohen Verf"ugbarkeit. Die modulare Struktur von Unix l"a"st
+ es dar"uber hinaus zu, da"s der Serverdienst Samba unabh"angig von
+ allen anderen Systemprozessen eigenst"andig neu gestartet werden
+ kann, sofern hier ein Problem vorliegen sollte.
+
+ Samba hat eine Architektur, die die Stabilit"at weiter f"ordert.
+ F"ur jede Clientverbindung wird ein eigener Proze"s gestartet.
+ Verursacht also ein Client ein Problem auf Serverseite, wird
+ m"oglicherweise der f"ur diesen Client zust"andige Proze"s
+ abst"urzen. Die anderen Prozesse und damit Clients werden nicht
+ gest"ort.
+
+\item[Skalierbarkeit] Samba kann von dem vielzitierten kleinen 386er
+ unter Linux bis hin zu den gr"o"sten heute verf"ugbaren Maschinen
+ jede Hardware optimal ausnutzen. Die Architektur von Samba
+ erm"oglicht es, da"s auch Multiprozessormaschinen ausgelastet
+ werden. Multiprozessormaschinen k"onnen alle Prozessoren dann
+ besch"aftigen, wenn es viele unabh"angige Prozesse im System gibt.
+ Samba erstellt f"ur jeden Client einen Proze"s, der auf einem
+ eigenen Prozessor ablaufen kann.
+
+\item[Flexibilit"at] Samba bietet eine riesige Anzahl von
+ Konfigurationsoptionen, die zun"achst einmal "uberw"altigend wirkt.
+ Im Laufe des Kurses wird sich herausstellen, da"s f"ur das
+ Funktionieren von Samba nur sehr wenige Optionen wirklich notwendig
+ sind. Die meisten Optionen werden nur f"ur Spezialf"alle ben"otigt,
+ oder sind aus Kompatibilit"atsgr"unden zu sehr exotischen Clients
+ vorhanden.
+
+ Soll Samba an spezielle Situationen angepa"st werden, ist es durch
+ ein sehr flexibles Schema von Makroersetzungen m"oglich, die
+ Konfigurationsdatei weitgehend dynamisch zu ver"andern. Damit sind
+ erheblich mehr Konfigurationsm"oglichkeiten gegeben als mit Windows.
+ Als Beispiel sei genannt, da"s man sehr einfach einen Sambaserver
+ unter zwei verschiedenen Namen in der Netzwerkumgebung erscheinen
+ lassen kann, und beide virtuelle Server unterschiedlich
+ konfigurieren kann. Zu Testzwecken ist es sogar m"oglich, zwei
+ unterschiedliche Versionen gleichzeitig auf einer Maschine laufen zu
+ lassen.
+
+\end{description}
+
+Der Kostenaspekt ist hier bewu"st nicht mit aufgef"uhrt worden. Samba
+als freie Software\footnote{Samba wird hier bewu"st als \emph{freie}
+ Software im Sinne des GNU-Projektes verstanden. Samba ist dadurch
+ nat"urlich auch Open Source Software} ist unter den Bedingungen der
+GNU General Public License f"ur alle Zwecke kostenlos einsetzbar.
+Damit entstehen beim Einsatz von Samba keinerlei Lizenzkosten. Samba
+ist jedoch nicht kostenlos. Es m"ussen Administratoren eingewiesen
+werden, wenn Support ben"otigt wird, kann dieser viel Geld kosten.
+
+Das Hauptaugenmerk sollte hier auf dem Aspekt liegen, da"s Samba
+h"aufig einfach die technisch beste L"osung ist. Ein Kunde stand
+beispielsweise vor der Aufgabe, einige bestehende, kleinere NT-Server
+durch eine gr"o"sere L"osung zu ersetzen. Durch einen einzigen gro"sen
+NT-Server w"aren die bestehenden Server sehr wohl zu ersetzen gewesen.
+Das Problem bestand nun darin, da"s in vielen Dokumenten die
+vorhandenen Servernamen "uber Objektreferenzen auf vollst"andige
+UNC-Pfadnamen hart kodiert waren. Damit mu"sten die vorhandenen
+Servernamen definitiv erhalten bleiben, um nicht jedes Dokument
+anfassen zu m"ussen. Ein einziger Server unter NT kam also nicht in
+Frage, unter Samba jedoch sehr wohl. Samba erlaubt die Einrichtung
+virtueller Server unter verschiedenen Namen auf einer einzigen
+Maschine. Mehr dazu ab Seite \pageref{virtuelle-server}.
+
+\section{Eine einfache Konfiguration}
+
+F"ur den Anfang soll hier eine einfache Konfiguration beschrieben
+werden, mit der ein Samba-Server im Netz erscheint und einige, wenige
+Dienste anbietet. Diese einfache Konfiguration soll als Startpunkt das
+Experimentieren in den weiteren Kapiteln erleichtern. Die einzelnen
+Parameter werden hier kurz erkl"art, in weiteren Kapiteln gibt es
+ausf"uhrlichere Erkl"arungen.
+
+Samba wird mit der Datei \prog{smb.conf} konfiguriert. Je nach Unix
+oder Linux-Distribution kann diese Datei an unterschiedlichen Orten zu
+finden sein: \prog{/etc/smb.conf}, \prog{/etc/samba/smb.conf} oder
+auch \prog{/usr/local/samba/lib/smb.conf}, wenn Samba selbst
+kompiliert wurde. Wurde die Datei \prog{smb.conf} wie beschrieben
+angelegt, m"ussen zwei D"amonen gestartet werden: Der \prog{nmbd} und
+der \prog{smbd}. An dieser Stelle unterscheiden sich die Unix- und
+Linuxversionen erheblich, so da"s keine allgemeinen Hinweise gegeben
+werden k"onnen. Verschiedene M"oglichkeiten sind:
+
+\begin{verbatim}
+/etc/init.d/smb start
+/sbin/init.d/smb start
+/usr/local/samba/sbin/nmbd -D; /usr/local/samba/sbin/smbd -D
+rcsmb start
+\end{verbatim}
+
+Die \prog{smb.conf} f"ur eine einfache Konfiguration k"onnte so
+aussehen:
+
+\begin{verbatim}
+[global]
+ workgroup = samba
+ netbios name = sambaserver
+ interfaces = eth0
+
+ encrypt passwords = yes
+
+[homes]
+ valid users = %S
+ writeable = yes
+ browseable = no
+
+[cdrom]
+ path = /cdrom
+
+[public]
+ path = /pub
+ writeable = yes
+\end{verbatim}
+
+Wenn man mit dieser Einstellung Zugriff auf den Server erm"oglichen
+m"ochte, mu"s man f"ur jeden Benutzer einen Eintrag in der Datei
+\dateistyle{smbpasswd} machen, da verschl"usselte Pa"sw"orter
+(\param{encrypt passwords = yes}) eingesetzt werden. Dies geschieht
+beispielsweise f"ur den Benutzer \username{linux} "uber:
+
+\begin{verbatim}
+delphin:~ # smbpasswd -a linux
+New SMB password:
+Retype new SMB password:
+Added user linux.
+delphin:~ #
+\end{verbatim}
+
+Die einzelnen Zeilen haben folgende Wirkung:
+
+\begin{description}
+\item[\param{[global]}] leitet globale Servereinstellungen ein. Alle
+ anderen Abschnitte beschreiben Freigaben.
+\item[\param{workgoup = samba}] legt die Arbeitsgruppe fest, in der
+ der Server auftauchen soll.
+\item[\param{netbios name = sambaserver}] gibt dem Server einen Namen,
+ unter dem er im Netz erscheint.
+\item[\param{interfaces = eth0}] beschreibt das Netzwerkinterface, auf
+ dem Samba Dienste anbieten soll. Selbst wenn der Rechner nur ein
+ einziges Netzwerkinterface hat, sollte dieser Parameter angegeben
+ werden. Die vorhandenen Interfaces bekommt man bei den meisten
+ Unixsystemen "uber den Befehl \prog{netstat -ian} heraus.
+ \todo{netstat -ian?}
+\item[\param{encrypt passwords = yes}] verlangt vom Client, da"s keine
+ Klartextpa"sw"orter "ubertragen werden. Mit modernen Clients gibt es
+ Probleme, wenn man diese Option nicht aktiviert. Au"serdem m"ochte
+ man aus Sicherheitsgr"unden seine Pa"sw"orter nicht allen mitteilen.
+\item[\param{[homes]}] leitet die Freigabe der Heimatverzeichnisse
+ s"amtlicher Benutzer ein. Jeder Benutzer bekommt eine eigene
+ Freigabe unter seinem eigenen Namen und hat damit einen eigenen
+ Bereich, auf dem er schreiben kann.
+\item[\param{valid users = \%S}] beschr"ankt den Zugriff auf den
+ Benutzer, der sich verbinden m"ochte.
+\item[\param{writeable = yes}] vergibt Schreibrecht auf die Freigabe.
+ Standardm"a"sig wird nur Lesezugriff vergeben.
+\item[\param{browseable = no}] versteckt die Freigabe \param{[homes]}
+ in der Netzwerkumgebung. Der Client zeigt sie nicht mehr als
+ \param{[homes]} an, sondern nur noch unter dem Benutzernamen.
+\item[\param{[cdrom]}] leitet eine weitere Freigabe ein.
+\item[\param{path = /cdrom}] gibt den genannten Pfad frei. Dieser mu"s
+ selbstverst"andlich im Dateisystem existieren.
+\item[\param{[public]}] macht noch eine Freigabe im Netz. Die
+ Parameter sollten jetzt selbsterkl"arend sein.
+\end{description}
+
+Mit dieser minimalen \dateistyle{smb.conf} sollte es auf jeden Fall
+m"oglich sein, auf den Rechner zuzugreifen. Wenn man Probleme mit der
+Konfiguration weiterer Dienste bekommt, sollte man von einer
+m"oglichst einfachen Konfiguration ausgehen und dann Schritt f"ur
+Schritt weitere Parameter hinzunehmen.
+
+
+
+\section{NetBIOS}
+
+Sobald Windowsrechner Dateisysteme austauschen, sich gegenseitig in
+der Netzwerkumgebung sehen oder Drucker freigeben, funktioniert die
+Kommunikation "uber NetBIOS\footnote{Dies ist in reinen Windows 2000
+ Umgebungen nicht mehr richtig. Microsoft hat bei Windows 2000 die
+ NetBIOS-Ebene abgeschafft, Windows 2000 kommuniziert direkt "uber
+ TCP. Aus Kompatibilit"atsgr"unden kann Windows 2000 jedoch noch
+ "uber NetBIOS kommunizieren.}. Was ist NetBIOS? Je nachdem, wen man
+fragt, bekommt man unterschiedliche Antworten. Fragt man IBM, ist
+NetBIOS ein Protokoll, viele andere bezeichnen NetBIOS als reine
+Softwareschnittstelle zur Kommunikation von Rechnern. Mit dieser
+Schnittstelle werden Programmen unterschiedliche Dienste zur
+Kommunikation zur Verf"ugung gestellt. NetBIOS wurde entworfen, um in
+kleinen, lokalen Netzen Kommunikation zu erm"oglichen. Beim Entwurf
+von NetBIOS wurde zun"achst darauf geachtet, die Dinge sehr einfach zu
+halten, um sie in kleinen lokalen Netzen anwendbar zu machen. Auf
+Skalierbarkeit und die Andwendung in Weitverkehrsnetzen wurde beim
+Design nicht geachtet.
+
+\subsection{NetBIOS-Dienste}
+
+Die Kommunikation mit NetBIOS wurde in drei Teilbereiche aufgeteilt,
+den Namens-, den Datagramm- und den Sitzungsdienst.
+
+\begin{description}
+
+\item[Namensdienst:] Im Rahmen des Namensdienstes sind die Rechner in
+ der Lage, sich gegenseitig im Netz zu identifizieren. Es sei an
+ dieser Stelle betont, da"s der NetBIOS-Namensdienst nichts mit der
+ Anzeige in der Netzwerkumgebung zu tun hat. Der Computersuchdienst,
+ der f"ur die Netzwerkumgebung zust"andig ist, h"angt jedoch sehr
+ stark von einem korrekt funktionierenden Namensdienst ab.
+
+\item[Datagrammdienst:] Betrachtet man die Rechnerkommunikation auf
+ dem Netz, so sieht man, da"s die versendeten Daten in einzelne
+ Pakete aufgeteilt werden. Diese einzelnen Pakete werden dann vom
+ Netz nach bestem Bem"uhen an einen Zielrechner ausgeliefert. Geht
+ ein Paket verloren, kann man nichts machen, man bekommt unter
+ Umst"anden nicht einmal eine Benachrichtigung dar"uber, da"s etwas
+ nicht stimmt. Aufeinanderfolgende Pakete k"onnen au"serdem in
+ vertauschter Reihenfolge beim Empf"anger ankommen. Es kann sogar
+ sein, da"s Pakete auf dem Weg dupliziert werden, also mehrfach
+ ankommen.
+
+ Ein solches Netzwerk ist folglich zun"achst einmal unzuverl"assig.
+ Diese Unzuverl"assigkeit des Netzes wird durch den Datagrammdienst
+ an die Benutzerprogramme weitergegeben. Das hei"st, wenn ein
+ Programm den Datagrammdienst nutzt, kann es nicht sicher sein, da"s
+ die Daten"ubertragung gew"ahrleistet ist. Das Programm mu"s selbst
+ daf"ur sorgen, da"s mit Paketverlust vern"unftig umgegangen wird.
+
+ Der Datagrammdienst hat jedoch nicht nur Nachteile. Zwei Vorteile
+ sind der geringe Aufwand, mit dem Pakete verschickt werden k"onnen,
+ und die M"oglichkeit, ein Datagramm an mehrere Rechner gleichzeitig
+ zu verschicken. Die Applikation mu"s selbst entscheiden, wie sie mit
+ der Unzuverl"assigkeit des Dienstes klarkommt.
+
+\item[Sitzungsdienst:] Die Unzuverl"assigkeit des Netzes ist f"ur
+ bestimmte Applikationen wie Dateitransfer oder Terminalanwendungen
+ nicht akzeptabel. Wenn man eine Datei "ubertr"agt, m"ochte man
+ sicher sein, da"s die Datei komplett und korrekt "ubertragen wurde.
+ F"ur diese h"oheren Anforderungen wurde der Sitzungsdienst
+ entworfen. Zwei Rechner vereinbaren eine NetBIOS-Sitzung. Die Daten,
+ die "uber diese Verbindung "ubertragen werden, kommen auf jeden Fall
+ an, und zwar in der richtigen Reihenfolge. K"onnen Daten einmal
+ nicht "ubertragen werden, so erh"alt die versendende Applikation
+ eine Fehlermeldung. Die Applikation kann nun versuchen, die
+ abgebrochene Sitzung neu aufzubauen. Dieser Zuverl"assigkeit steht
+ ein erh"ohter Aufwand beim Sitzungsauf- und -abbau gegen"uber.
+
+\end{description}
+
+\subsection{NetBIOS-Namensdienst}
+
+Zwei Rechner, die kommunizieren wollen, m"ussen sich zun"achst gegenseitig
+identifizieren. NetBIOS sieht hierf"ur bis zu 16 Zeichen lange Namen
+vor. Jede Applikation kann f"ur sich beliebig viele Namen reservieren
+und unter einem dieser Namen Verbindungen aufbauen und Daten austauschen.
+Diese Reservierung von Namen gilt sowohl f"ur Server, die vom Netz aus
+erreichbar sein m"ussen, als auch f"ur Clients, die Server im Netz
+erreichen wollen, da Server wissen m"ussen, wohin die Antworten
+gehen m"ussen.
+
+Wollen zwei Anwendungen per NetBIOS miteinander kommunizieren, mu"s
+zun"achst der Server seine Bereitschaft kundtun, Verbindungen
+entgegenzunehmen. Dazu meldet er sich im Netz mit seinem Namen an.
+Diese Anmeldung geschieht per Broadcast, so da"s alle im Netz
+mith"oren k"onnen. Jeder Rechner ist frei, beliebige Namen im Netz
+f"ur sich zu beanspruchen, sofern diese noch nicht belegt
+sind\footnote{Mit dieser Freiheit ergeben sich viele M"oglicheiten,
+ von einem beliebigen Rechner aus ein Windows-Netz bis zur
+ Unbenutzbarkeit zu st"oren. Man mu"s nur den Namen der Dom"ane mit
+ dem Namenstyp \nbname{1d} zum richtigen Zeitpunkt reservieren und
+ reserviert halten. Dann bootet der PDC nicht mehr sauber.}.
+
+Eine Reservierung geschieht, indem ein Rechner per Broadcast
+ank"undigt, da"s er unter einem bestimmten Namen erreichbar ist. Dann
+wartet er auf Protest. Beklagt sich niemand, schickt er einen zweiten
+Reservierungsversuch und wartet wieder. Nach dem dritten
+Reservierungsversuch ist der Rechner ausreichend sicher, da"s kein
+anderer den Namen bereits f"ur sich eingenommen hat, und sieht ihn als
+f"ur sich reserviert an.
+
+Wenn nun ein Client mit einem Server reden m"ochte, dann mu"s er sich
+wie der Server einen eindeutigen Namen ausdenken und im Netz
+reservieren. Das Verfahren dazu ist identisch. Zus"atzlich mu"s der
+Client jedoch die MAC-Adresse des Servers herausbekommen. Die
+Mechanismen, wie dies geschieht, h"angen davon ab, wie NetBIOS
+implementiert ist.
+
+\subsection{NetBIOS-Implementationen}
+
+NetBIOS kann mit unterschiedlichen Protokollen implementiert werden.
+NetBEUI, IPX und TCP/IP sind drei heute verwendete Protokolle, wobei
+f"ur Neuinstallation TCP/IP das bevorzugte Protokoll sein sollte.
+Der Ablauf der Namensaufl"osung soll an einem
+Beispiel verdeutlicht werden.
+
+Auf einem Client soll eine Verbindung zu dem Server \nbname{samba}
+aufgebaut werden. Direkt erreicht man dies, indem man in der Taskleiste
+Start $\rightarrow$ Ausf"uhren $\rightarrow$ \verb|\\samba| eingibt.
+Im folgenden werden die unterschiedlichen Verfahren betrachtet, mit
+denen ein Rechner die MAC-Adresse des Servers herausbekommt.
+
+\begin{description}
+
+\item[NetBEUI:]
+
+ \textbf{"`Samba"'$\,\Rightarrow\,$MAC-Adresse}
+
+ Bei diesem Protokoll findet der Client den Server ausschlie"slich
+ "uber Broadcasts. Er verschickt per Broadcast eine Anfrage, wer sich
+ f"ur den gesuchten Namen verantwortlich f"uhlt. Der Rechner, der
+ diesen Namen tats"achlich als Server reserviert hat, wird aufgrund
+ dieser Anfrage seine eigene MAC-Adresse aus dem ROM seiner
+ Netzwerkkarte auslesen und entsprechend antworten. Daraufhin kann
+ der Client dann die Verbindung aufbauen. "Uber NetBEUI k"onnen also
+ nur Rechner miteinander reden, die in der gleichen Broadcastdom"ane
+ liegen. Sobald Router zum Einsatz kommen sollen, kann reines NetBEUI
+ nicht mehr verwendet werden, da dann der Server, der kontaktiert
+ werden soll, von der Namensanfrage nichts mehr mitbekommt, also auch
+ nicht antworten kann.
+
+\item[IPX]
+
+ \textbf{"`Samba"'$\,\Rightarrow\,$IPX-Knotenadresse
+ $\,\Rightarrow\,$MAC-Adresse}
+
+ Bei IPX liegt zwischen Servernamen und der MAC-Adresse die
+ IPX-Knotenadresse. Diese enth"alt eine 4 Byte lange Netzwerknummer
+ und die 6 Byte lange MAC-Adresse des Rechners. Die Knotenadresse
+ wird anhand des NetBIOS-Namens wie bei NetBEUI per Broadcast im
+ lokalen Netz gesucht. Damit w"aren Rechner hinter Routern nicht
+ erreichbar, da die Namensanfrage nicht zu ihnen durchdringt.
+ IPX-Router erkennen jedoch diese Namensanfragen und leiten sie per
+ Broadcast in s"amtliche angeschlossenen Netze weiter, so da"s die
+ Anfrage jedes Teilnetz erreicht.
+
+ Jede Anfrage l"ost einen Broadcast in jedem angeschlossenen Subnetz
+ aus. Einige IPX-Router speichern eine Namenstabelle und k"onnen so
+ viele Anfragen selbst beantworten, so da"s die Broadcastlast
+ reduziert wird.
+
+\item[TCP/IP]
+
+ \textbf{"`Samba"'$\,\Rightarrow\,$IP-Adresse$\,\Rightarrow\,
+ $MAC-Adresse}
+
+ Bei TCP/IP mu"s der Client die IP-Adresse des Servers herausfinden.
+ Dies geschieht wie bei den anderen Protokollen per Broadcast im
+ lokalen Netz. IP-Router k"onnen nicht angewiesen werden, die
+ Anfragen per Broadcast in alle angeschlossenen Netze weiterzuleiten.
+ Aus diesem Grund gibt es hier andere Mechanismen, die im folgenden
+ beschrieben werden.
+
+ Nachdem die IP-Adresse herausgefunden wurde, kommen die bekannten
+ Mechanismen von IP zum Tragen. Befindet sich der Rechner im eigenen
+ Subnetz, wird direkt eine ARP-Anfrage nach der MAC-Adresse
+ ausgel"ost. Andernfalls wird der entsprechende Router anhand der
+ Routingtabelle herausgefunden und dann dessen MAC-Adresse per ARP
+ festgestellt.
+
+ Wenn NetBIOS "uber TCP/IP verwendet wird, kommen folgende Protokolle
+ und Ports zum Einsatz:
+
+ \label{protokolle-und-ports}
+% \begin{tabular}{|L|L|L|L|}\hline
+% \LCC
+% \tabulargray&\tabulargray&\tabulargray&\tabulargray\\
+% \tabularheader{Dienst}&\tabularheader{Protokoll}&\tabularheader{Port}&
+% \tabularheader{Proze"s}\\
+% \hline
+% \ECC
+% &&&\topseparation
+% Namensdienst & UDP &137 & \prog{nmbd} \\
+% Datagrammdienst & UDP &138 & \prog{nmbd} \\
+% Sitzungsdienst & TCP &139 & \prog{smbd}
+% \bottomseparationline
+% \end{tabular}
+ \begin{center}\begin{tabular}{|l|l|l|l|}\hline
+ Dienst&Protokoll&Port&Samba-Proze"s\\
+ \hline\hline
+ Namensdienst & UDP &137 & \prog{nmbd} \\\hline
+ Datagrammdienst & UDP &138 & \prog{nmbd} \\\hline
+ Sitzungsdienst & TCP &139 & \prog{smbd}\\\hline
+ \end{tabular}
+\end{center}
+
+\end{description}
+
+Die Protokolle ordnen sich folgenderma"sen ein:
+
+\begin{figure}[ht]
+\[\begin{pspicture}(12,6)
+\psframe(3,0)(9,1)
+\rput(6,0.5){Hardware}
+\psframe(3,1)(5,3)
+\rput(4,2){TCP/IP}
+\psframe(5,1)(7,3)
+\rput(6,2){NetBEUI}
+\psframe(7,1)(9,2)
+\rput(8,1.5){IPX}
+\psframe(7,2)(9,3)
+\rput(8,2.5){NWLink}
+\psframe(3,3)(9,4)
+\rput(6,3.5){{\bfseries NetBIOS}}
+\psframe(0,4)(2,5)
+\rput(1,4.5){ping}
+\psline(0,4)(3,3)
+\psline(2,4)(5,3)
+\psframe(10,3)(12,4)
+\rput(11,3.5){NWClient}
+\psline(7,2)(10,3)
+\psline(9,2)(12,3)
+\psframe(3,4)(6,5)
+\rput(4.5,4.5){SMB}
+\psframe(3,5)(6,6)
+\rput(4.5,5.5){Datei, Druck}
+\psframe(6,4)(9,6)
+\rput(7.5,5.5){Andere}
+\rput(7.5,5){NetBIOS-}
+\rput(7.5,4.5){Anwendungen}
+\end{pspicture}\]
+\caption{Protokollstapel}
+\label{protokollstapel}
+\end{figure}
+
+In dieser Grafik steht das Programm \prog{ping} f"ur beliebige
+Programme, die direkt auf TCP/IP aufsetzen. Dies gilt beispielsweise
+f"ur alle WWW-Browser und f"ur die Programme \prog{telnet} und
+\prog{ftp}.
+
+Man kann festhalten, da"s NetBEUI hier das einzige Protokoll ist, das
+nicht "uber Routergrenzen hinweg verwendbar ist. Sowohl IPX als auch
+IP sind f"ur den Einsatz in Weitverkehrsnetzen entworfen worden und
+k"onnen folglich mit Routern umgehen.
+
+Samba ist ausschlie"slich in der Lage, NetBIOS "uber TCP/IP zu
+benutzen. Daher werden die anderen Protokolle ab hier ignoriert. F"ur
+ein gut funktionierendes Netzwerk ist es jedoch sehr wichtig, da"s auf
+den Clients nur die Protokolle installiert sind, die \emph{wirklich}
+ben"otigt werden. Ist beispielsweise noch NetBEUI zus"atzlich zu
+TCP/IP installiert, ist nicht klar, ob die Netzwerkumgebung in der
+NetBEUI- oder die in der TCP/IP-Welt gelten soll. Normalerweise ist
+heute ausschlie"slich noch TCP/IP notwendig. IPX kann dann noch
+ben"otigt werden, wenn es Novellsysteme im Netz gibt.
+
+\section{Bestandteile von Samba}
+
+Das Programmpaket Samba besteht aus mehreren Programmen, von denen
+einige der Serverseite und andere der Clientseite zugeordnet werden
+k"onnen.
+
+\subsection{Die Servertools}
+
+\begin{description}
+
+\item[smbd] ist der zentrale Serverproze"s, der f"ur die eigentlichen
+ Datei- und Druckdienste zust"andig ist. Sie werden mehrere
+ \prog{smbd}s im System finden. Einer dieser Prozesse h"ort auf dem
+ TCP-Port 139, und nimmt neue Verbindungen entgegen. Jede neue
+ Verbindung st"o"st einen neuen \prog{smbd} Proze"s an. Wenn Sie
+ einen Client vom Sambaserver trennen wollen, m"ussen Sie nur mit
+ \prog{smbstatus} die Proze"snummer des zust"andigen \prog{smbd}
+ erfragen, und diesen einen Proze"s t"oten.
+
+ Jeder \emph{aktive} Client ben"otigt etwa 1-2 MB Hauptspeicher auf dem
+ Server. Clients, die gerade nicht aktiv Dateien mit dem Sambaserver
+ austauschen, ben"otigen praktisch "uberhaupt keine Resourcen. Viel
+ Hauptspeicher kann von Samba selbstverst"andlich gut als Cache
+ genutzt werden.
+
+\item[nmbd] ist f"ur die NetBIOS Namens- und Datagrammdienste
+ zust"andig. Dieser Proze"s reserviert beim Start von Samba die
+ entsprechenden NetBIOS-Namen, er kann WINS-Server sein und ist f"ur
+ den Computersuchdienst zust"andig.
+
+\item[testparm] Mit diesem Programm kann man die \dateistyle{smb.conf}
+ auf syntaktische Korrektheit pr"ufen. Das Programm liest die
+ Konfigurationsdatei ein und gibt Fehlermeldungen aus, sofern es
+ unbekannte Parameter findet.
+
+\item[smbpasswd] wird zur Pflege der verschl"usselten Pa"sw"orter auf
+ Serverseite verwendet. Wie dies funktioniert, wird im Kapitel
+ \ref{passwoerter} erkl"art.
+
+\item[smbcontrol] Mit diesem Programm lassen sich die D"amonen von
+ Samba kontrollieren. Beispielsweise kann man f"ur einzelne D"amonen
+ den Debuglevel gezielt auf einen gew"unschten Wert setzen.
+
+\end{description}
+
+\subsection{Die Clients}
+
+\begin{description}
+
+\item[smbclient] Mit dem Programm \prog{smbclient} kann man auf
+ Freigaben von NT-Rechnern zugreifen. Man kann auf von NT zur
+ Verf"ugung gestellten Druckern drucken und man kann NT-Freigaben in
+ tar-Dateien sichern. Weiterhin kann mit \prog{smbclient} die Liste
+ der Server im Netz erfragt werden, analog zu der Netzwerkumgebung
+ unter Windows.
+
+\item[nmblookup] ist ein Diagnosewerkzeug f"ur die
+ NetBIOS-Namensaufl"osung. Wenn zwei Computer mit Windows sich nicht
+ finden k"onnen, kann man mit \prog{nmblookup} deren Versuche, sich
+ gegenseitig zu finden, genau nachstellen. Ebenso k"onnen WINS-Server
+ befragt werden und ein NetBIOS Node Status abgefragt werden. Das
+ entsprechende Programm auf unter Windows ist das
+ Kommandozeilenprogramm \prog{nbtstat}.
+
+\item[smbcacls:] Mit diesem Programm lassen sich von Unix aus Access
+ Control Lists auf Windows-Dateien auslesen und setzen. Ist Samba mit
+ ACL-Support kompiliert, geht dies selbstverst"andlich auch f"ur die
+ auf Unix abgelegten Dateien.
+
+\end{description}
+
+\subsection{Weitere Serverkomponenten}
+
+\begin{description}
+
+\item[smb.conf:] Die zentrale Konfigurationsdatei von Samba. Ist Samba
+ als fester Systembestandteil installiert, findet sie sich in der
+ Regel unter \dateistyle{/etc/smb.conf}. Wurde Samba selbst
+ kompiliert, so liegt sie h"aufig unter
+ \dateistyle{/usr/local/samba/lib/smb.conf}.
+
+\item[/var/lock/samba:] Samba ben"otigt ein Verzeichnis, in dem es
+ tempor"are Lockdateien und Datenbanken ablegen kann. Wird Samba ohne
+ besondere Optionen selbst kompiliert, liegt dieses Verzeichnis unter
+ \dateistyle{/usr/local/samba/var}.
+
+\item[/etc/smbpasswd] ist die Pa"swortdatenbank von Samba, sofern mit
+ verschl"usselten Pa"s\-w"ortern gearbeitet wird. Bei selbst
+ kompilierten Sambaversionen liegt diese Datei h"aufig im Verzeichnis
+ \dateistyle{/usr/local/samba/private/}.
+
+\end{description}
+
+\section{NetBIOS-Konfiguration mit Samba}
+
+Als erstes soll eine minimale Konfiguration von Samba erreicht werden,
+mit der jeder Rechner in der Netzwerkumgebung zu sehen ist. Dazu
+sollte die Datei \dateistyle{smb.conf} folgenderma"sen aussehen:
+
+\begin{verbatim}
+[global]
+workgroup = arbeitsgruppe
+interfaces = <IP-Adresse>/<Netzmaske>
+\end{verbatim}
+
+\label{aufbau-smb.conf}
+Der grunds"atzliche Aufbau der \dateistyle{smb.conf} gleicht dem Aufbau der
+.INI-Dateien von Windows 3. Die Datei ist in mehrere Abschnitte
+unterteilt, die jeweils durch einen Abschnittsnamen eingeleitet
+werden. Dieser Abschnittsname selbst wird in eckige Klammern gesetzt.
+Der Inhalt jedes Abschnitts besteht nun aus Parameterzuweisungen. Im
+Beispiel gibt es nur den Abschnitt \param{global}. In diesem werden
+Festlegungen getroffen, die den Server als ganzes betreffen. Wenn
+sp"ater Freigaben erstellt werden, geschieht dies durch Anlegen von
+weiteren Abschnitten.
+
+Mit dem Parameter \param{workgroup =} wird die Arbeitsgruppe
+festgelegt, in der sich der Server befinden soll.
+
+Der Parameter \label{interfaces}\param{interfaces =} ist einer der
+wichtigsten Parameter der Sambakonfiguration. Er ist deshalb so
+wichtig, weil damit das Funktionieren des NetBIOS-Systems innerhalb
+von Samba garantiert wird. Sp"ater wird deutlich werden, da"s gro"se
+Teile der Kommunikation auf Broadcasts basieren. Mit \prog{netstat
+ -ia} bekommt man auf den meisten Unix-Systemen Informationen "uber
+die vorhandenen Netzwerkinterfaces. Mit \prog{ifconfig <interface>}
+kann man sich dann n"ahere Informationen anzeigen lassen.
+
+Der Parameter \param{interfaces =} weist Samba an, diese und keine
+andere Schnittstelle zu nutzen. Dar"uberhinaus ist Samba nun in der
+Lage, die Broadcastadresse, die auf dieser Schnittstelle g"ultig ist,
+zu bestimmen. Theoretisch k"onnte Samba die Broadcastadresse
+selbst"andig herausfinden, aber es gibt keinen portablen Weg, dies
+"uber Systemgrenzen hinweg zu tun. Das sicherste ist, Samba direkt
+"uber die Broadcastadresse zu informieren.
+
+Meistens funktioniert zus"atzlich zur Notation
+
+\begin{verbatim}
+interfaces = <IP-Adresse>/<Netzmaske>
+\end{verbatim}
+
+\noindent auch \prog{interfaces = <Interface-Name>}.
+
+Mit diesen beiden Einstellungen wird man direkt den Sambarechner in
+der Netzwerkumgebung sehen. Will man Tests auf NetBIOS-Ebene
+durchf"uhren, sollte man zur Vereinfachung zwei weitere Parameter
+setzen. Mit diesen drei Parametern bekommt man einen \emph{komplett
+ offenen} Server. Die Parameter werden in sp"ateren Abschnitten
+genauer erkl"art. Die vollst"andige \dateistyle{smb.conf} sieht
+folgenderma"sen aus:
+
+\begin{verbatim}
+[global]
+workgroup = arbeitsgruppe
+interfaces = <IP-Adresse>/<Netzmaske>
+security = share
+encrypt passwords = yes
+\end{verbatim}
+
+Mit dieser Konfiguration kann Samba gestartet werden. Es werden die
+beiden D"amonen \prog{nmbd} und \prog{smbd} ben"otigt. Diese kann man
+direkt von der Kommandozeile starten.
+
+Setzt man SuSE Linux ein, so kann man Samba mit dem Aufruf
+
+\begin{verbatim}
+rcsmb start
+\end{verbatim}
+
+Damit Samba beim n"achsten Hochfahren automatisch gestartet wird,
+sollte die Variable \texttt{START\_SMB} in der Datei
+\dateistyle{/etc/rc.config} auf \texttt{yes} gesetzt werden.
+
+Es ist denkbar, den Aufruf beider Programme durch den \prog{inetd}
+durchf"uhren zu lassen. Bei Samba ist dies jedoch nicht sinnvoll.
+Insbesondere der \prog{nmbd} mu"s auf jeden Fall beim Start des
+Systems hochfahren, da dieser im NetBIOS-System Namen f"ur sich
+reservieren mu"s. W"urde er erst bei der ersten Anfrage gestartet,
+h"atten Windowsrechner keine M"oglichkeit, den Sambarechner zu finden.
+Au"serdem wird sich der \prog{nmbd} nicht wieder beenden, sobald er
+einmal gestartet wurde. Der \prog{smbd} k"onnte durch den \prog{inetd}
+gestartet werden. Jedoch ist der Resourcenbedarf nicht so hoch, da"s
+die erh"ohte Startzeit damit gerechtfertigt werden k"onnte.
+
+Nachdem alle Sambaserver gestartet wurden, sollten diese in der
+Netzwerkumgebung der beteiligten Windowsrechner erscheinen.
+
+\section{Namensaufl"osung per Broadcast}
+
+Mit \prog{nmblookup} kann man direkt eine NetBIOS-Namensanfrage
+ausl"osen.
+
+\begin{quote}
+\begin{small}\begin{verbatim}
+vlendec@server:/home/vlendec> nmblookup server
+querying server on 192.168.1.255
+192.168.1.3 server<00>
+vlendec@linux:/home/vlendec>
+\end{verbatim}\end{small}
+\end{quote}
+
+An diesem Beispiel wird deutlich, wie die NetBIOS-Namensaufl"osung
+normalerweise arbeitet. Es wird ein Paket an der Adresse 192.168.1.255
+versendet, das hei"st an die Broadcastadresse im lokalen Subnetz. Um
+NetBIOS-Namensanfragen zu erm"oglichen, mu"s Samba in der Lage sein,
+die Broadcastadresse herauszufinden, an die das Paket geschickt werden
+soll. \prog{nmblookup} entnimmt diese Adresse der Zeile
+\param{interfaces =} der \dateistyle{smb.conf}. F"ur Tests kann man
+\prog{nmblookup} mit dem Parameter -B anweisen, die Anfragen an eine
+andere Broadcastadresse zu versenden.
+
+\begin{quote}\begin{small}\begin{verbatim}
+vlendec@delphin:~ > nmblookup -B 192.168.234.31 server
+querying server on 192.168.234.31
+name_query failed to find name server
+vlendec@delphin:~ >
+\end{verbatim}\end{small}\end{quote}
+
+In diesem Beispiel wurde die Broadcastadresse auf 192.168.1.31
+gesetzt. Diese Broadcastadresse gilt in Subnetz 192.168.1.0/27. Jedoch
+f"uhlte sich der \prog{nmbd}, der f"ur diesen Namen verantwortlich
+ist, nicht angesprochen. Folglich hat er nicht auf diese Namensanfrage
+geantwortet.
+
+Unter Windows kann man die Namensanfrage so isoliert nicht ausl"osen,
+man mu"s eine Verbindung aufbauen. Windows unterh"alt einen Cache, in
+dem erfolgreiche Anfragen zwischengespeichert werden. Diesen kann man
+sich mit \prog{nbtstat -c} anzeigen und mit \prog{nbtstat -R} l"oschen.
+Man kann eine Anfrage erzwingen, indem man mit leerem Namenscache eine
+Verbindung aufbaut, beispielsweise durch ein \prog{net view
+ \textbackslash{}\textbackslash{}samba}.
+
+Die Fehlermeldung, wenn eine NetBIOS-Namensanfrage fehlschl"agt,
+lautet im GUI: "`Der Netzwerkpfad wurde nicht gefunden"'. Auf der
+Kommandozeile kommt noch die Fehlermeldung 53 dazu.
+
+Mit \prog{nmblookup} und \prog{nbtstat} kann man sich zus"atzlich die
+von einem Rechner reservierten Namen ausgeben lassen. Die
+entsprechende Operation nennt sich \defin{Node Status Request} und
+wird durch den Parameter \prog{nmblookup -A <IP-Adresse>} ausgel"ost.
+Die Ausgabe eines solchen Node Status Request zeigt, da"s ein Rechner
+f"ur sich nicht nur einen einzigen Namen reserviert, sondern gleich
+mehrere.
+
+\begin{quote}\begin{small}\begin{verbatim}
+vlendec@delphin:~ > nmblookup -A 192.168.234.5
+Looking up status of 192.168.234.5
+received 6 names
+ NT4WKS <00> - B <ACTIVE>
+ SAMBA <00> - <GROUP> B <ACTIVE>
+ NT4WKS <03> - B <ACTIVE>
+ ADMINISTRATOR <03> - B <ACTIVE>
+ NT4WKS <20> - B <ACTIVE>
+ SAMBA <1e> - <GROUP> B <ACTIVE>
+num_good_sends=0 num_good_receives=0
+
+vlendec@delphin:~ >
+\end{verbatim}\end{small}\end{quote}
+
+Zun"achst gibt es die Einzelnamen, zum Beispiel den Computernamen
+selbst. F"ur diese gilt die Regel, da"s sie nur ein einziges Mal im
+gesamten Netz auftauchen d"urfen. Sie werden reserviert und stehen dem
+entsprechenden Rechner dann exklusiv zur Verf"ugung. Daneben gibt es
+die Gruppennamen, die im Node Status Request durch \texttt{<GROUP>}
+markiert sind. Diese kann es mehrfach im Netz geben. Die Gruppennamen
+sind insbesondere als Ziele f"ur NetBIOS-Datagramme interessant.
+Beispielsweise reserviert jeder Teilnehmer an einer Arbeitsgruppe den
+NetBIOS-Gruppennamen \nbname{arbeitsgruppe<00>}. Damit kann ein
+Rechner mit einem einzigen verschickten Datagramm an diesen Namen
+s"amtliche Rechner in dieser Arbeitsgruppe erreichen.
+
+Zus"atzlich f"allt auf, da"s beispielsweise der Computername selbst
+als Einzelname mehrfach reserviert ist. Hier kommen die
+unterschiedlichen Namenstypen ins Spiel. Das 16. Byte eines
+NetBIOS-Namens ist f"ur ein Typfeld reserviert. So sind
+unterschiedliche Anwendungen auf einem Rechner in der Lage, sich Namen
+zu reservieren, ohne sich gegenseitig zu st"oren. Der Wert des
+Typfeldes wird hexadezimal in spitzen Klammern angegeben.
+
+Zun"achst die Einzelnamen, die h"aufig auftauchen:
+
+\begin{description}
+
+\item[computername$<$00$>$] Hiermit tut der Rechner einfach seine
+Existenz kund. Wenn ein Rechner auf Resourcen anderer Rechner zugreift,
+wird als Clientname dieser Name benutzt.
+
+\item[computername$<$20$>$] Dieser Name wird f"ur den Serverdienst
+reserviert. Wenn ein Rechner als Datei- oder Druckserver angesprochen
+werden soll, dann wird eine Verbindung zu diesem NetBIOS-Namen aufgebaut.
+
+\item[computername$<$03$>$] Unter diesem Namen meldet sich der
+Nachrichtendienst des Rechners an. Kurze Meldungen, die unter Windows
+NT mit dem Kommando \prog{net send} abgesetzt werden, und unter
+Windows 95 mit dem Programm Winpopup verschickt werden, kann der
+Rechner damit empfangen und am Bildschirm anzeigen.
+
+\item[arbeitsgruppe$<$1d$>$] Dieser Rechner ist der so genannte
+ \defin{Locale Master Browser}, der die Liste s"amtlicher Rechner in
+ der Netzwerkumgebung pflegt.
+
+\item[arbeitsgruppe$<$1b$>$] Dieser Rechner ist der \defin{Domain
+ Master Browser}, der "uber Subnetzgrenzen hinweg f"ur die
+ Netzwerkumgebung zust"andig ist.
+
+\end{description}
+
+Einige Gruppennamen werden ebenfalls reserviert:
+
+\begin{description}
+
+\item[arbeitsgruppe$<$00$>$] Ein Rechner verk"undet hiermit seine
+ Zugeh"origkeit zu einer Arbeitsgruppe. Beispielsweise k"onnen
+ Winpopup-Meldungen an eine ganze Arbeitsgruppe versendet werden.
+ Dies geschieht per Datagramm an diesen Namen.
+
+\item[arbeitsgruppe$<$1c$>$] Jeder Domain Logon Server reserviert
+ diesen Namen f"ur sich. Clients finden ihre Domain Controller "uber
+ diesen NetBIOS-Namen.
+
+\item[arbeitsgruppe$<$1e$>$] Wahlen zum Local Master Browser werden
+ "uber diesen Namen abgewickelt. Siehe hierzu Kapitel
+ \ref{netzwerkumgebung}.
+
+\end{description}
+
+Damit sind die f"ur Datei- und Druckerdienste wichtigsten Namenstypen
+beschrieben. Sobald unter NT andere Dienste installiert werden, kommen
+andere Namenstypen hinzu. Exchange zum Beispiel nutzt die Namenstypen
+22, 23 und 24. Mehr Namenstypen findet man in der Microsoft Knowlegde
+Base unter Artikel Nummer Q163409.
+
+\section{Netzwerkumgebung}
+\label{netzwerkumgebung}
+
+Die Netzwerkumgebung ist eine Anzeige, in der s"amtliche Server im Netz
+aufgef"uhrt sind. Alle Rechner, die Datei- oder Druckfreigaben
+zur Verf"ugung stellen, erscheinen dort oder sollten es zumindest, wenn alles
+reibungslos funktioniert. Jeder Client, der auf eine solche Resource
+zugreifen m"ochte, kann sich die Liste der Server im Netz geben lassen. Damit
+diese Anzeige nicht zu un"ubersichtlich ger"at, werden die Rechner in so
+genannte Arbeitsgruppen aufgeteilt. Jeder Rechner wird einer Arbeitsgruppe
+zugeordnet, in erscheint und die er als erstes beim Doppelklick auf das
+Symbol "`Netzwerkumgebung"' angezeigt. Die anderen Arbeitsgruppen sind
+ebenfalls "uber den Unterzweig "`Gesamtes Netzwerk"' sichtbar.
+
+Bez"uglich des Zugangs zu Arbeitsgruppen findet keinerlei Authentifizierung
+statt. Jeder Rechner kann frei f"ur sich entscheiden, in welcher Arbeitsgruppe
+er erscheinen m"ochte, jeder im Netz kann sich beliebige Arbeitsgruppen
+anzeigen. Dies gilt ebenfalls, wenn im Netz mit NT-Dom"anen gearbeitet wird.
+NT-Dom"anen haben nur eher zuf"allig im Netz ein der Arbeitsgruppe "ahnliches
+Erscheinungsbild.
+
+Das klingt verwirrend, ist es vermutlich beim ersten Lesen auch. Zum
+Verst"andnis des Windows-Networking mu"s man drei Begriffe ganz klar
+von einander trennen:
+
+\begin{description}
+\item[NetBIOS] Unter jeglicher Kommunikation von Windowsrechnern liegt
+ das API NetBIOS. Mit Hilfe des NetBIOS sind Rechner im Netz
+ ansprechbar, sie k"onnen verschiedenste Dienste anbieten. Einer
+ dieser Dienste ist die Netzwerkumgebung.
+\item[Arbeitsgruppe] Eine Arbeitsgruppe ist eine reine Liste von
+ Rechnern. Sie hat mit NetBIOS \emph{ausschlie"slich} als
+ Transportmedium zu tun. Der Dienst, der die Netzwerkumgebung bereit stellt,
+k"onnte theoretisch vollst"andig unabh"angig von NetBIOS implementiert werden,
+ist in der Praxis aber sehr von einem funktionierenden NetBIOS abh"angig.
+
+\item[Dom"ane] Eine Dom"ane bezeichnet etwas v"ollig anderes als eine
+ Arbeitsgruppe.Eine Dom"ane ist eine gemeinsam genutzte
+ Benutzerdatenbank. Microsoft hat in seiner Implementation einer
+ Dom"ane die Einschr"ankung gemacht, da"s alle Rechner einer Dom"ane
+ in einer Arbeitsgruppe auftauchen m"ussen. Das hei"st aber nicht,
+ da"s alle Rechner in der Arbeitsgruppe einer Dom"ane auch die
+ gemeinsame Benutzerdatenbank nutzen m"ussen.
+\end{description}
+
+Das Auftauchen eines Rechners in der Netzwerkumgebung hat nichts mit
+seiner Erreichbarkeit zu tun, es ist h"ochstens ein vager Hinweis
+darauf, da"s man es dort einmal versuchen kann. Ein Rechner
+erreichbar sein, aber nie auftauchen, oder er kann in der
+Netzwerkumgebung stehen, aber lange nicht mehr erreichbar sein.
+
+Die \defin{Netzwerkumgebung} ist einer der instabileren Aspekte von
+Windows. Hiermit kann man sich, sofern alles funktioniert, alle
+Rechner in einer Arbeitsgruppe anzeigen lassen. Dabei dauert es
+mitunter geraume Zeit, bis ein Rechner in einer Anzeige erscheint, und
+es dauert unter Umst"anden noch l"anger, bis er wieder verschwindet.
+
+Eine naive Implementation k"onnte so aussehen: Jeder Rechner,
+der Serverdienste anbietet, teilt dies regelm"a"sig per Broadcast im Netz
+mit. Ein solches Vorgehen hat jedoch mehrere Nachteile. Erstens
+w"urde die Last im Netz mit jedem zus"atzlichen Rechner stark
+ansteigen. Zweitens mu"s jeder Rechner, der die Netzwerkumgebung anzeigen
+will, relativ komplexe Software laufen lassen. Und drittens scheitert dieses
+Schema auf jeden Fall an Subnetzgrenzen, die f"ur Broadcasts eine
+Grenze darstellen. Aus diesen Gr"unden ist man einen anderen Weg
+gegangen.
+
+Der \defin{Local Master Browser\footnote{Der Local Master Browser
+ wird in der deutschen Dokumentation von Windows
+ \emph{Computersuchdienst} genannt. Der Domain Master Browser ist
+ der Dom"anenhauptsuchdienst. Local Master Browser finde ich sehr
+ viel handlicher, und daher werde ich den englischen Begriff
+ verwenden.}} (im Folgenden auch LMB genannt) ist ein Rechner, der
+im Netz die Netzwerkumgebung pflegt. Dieser Rechner wird nirgendwo
+zentral bestimmt, sondern er wird gew"ahlt. Diese Wahl findet immer
+dann statt, wenn einer der beteiligten Rechner feststellt, da"s es im
+Moment keinen solchen Local Master Browser gibt. Beispielsweise
+kann der Explorer von Windows eine solche Wahl ansto"sen. Wenn Windows
+95 beim "Offnen der Netzwerkumgebung die geschwenkte Taschenlampe anzeigt,
+wird der LMB gesucht. Ist
+keiner vorhanden, wird eine Wahl angesto"sen.
+
+Die Wahl erfolgt mit Datagrammen an den Gruppennamen
+\nbname{arbeitsgruppe<1e>}. Ein Rechner verschickt ein Datagramm an
+diesen Namen. Jeder Rechner, der diesen Namen reserviert hat, h"ort
+dieses Datagramm und entscheidet, wie er selbst vorgehen soll. In dem
+Datagramm sind verschiedene Kriterien zur Wahl enthalten,
+beispielsweise das Betriebssystem des versendenden Rechners. Hieraus folgt,
+da"s es in einem Subnetz f"ur jede vorhandene Arbeitsgruppe einen LMB gibt.
+
+Empf"angt beispielsweise eine Windows NT Workstation ein Paket von
+einem Windows NT Server, so entscheidet sie, da"s sie die Wahl
+verloren hat. Damit wird sie selbst nicht mehr aktiv. Kommt dieses
+Paket jedoch von einem Rechner mit Windows 95, so h"alt sie sich
+selbst f"ur geeigneter, den Local Master Browser zu "ubernehmen.
+Dann wird sie selbst ein solches Wahlpaket mit ihren Parametern
+versenden. Der Windows 95 Rechner empf"angt dies, und sieht, da"s er
+verloren hat. Auf diese Weise schaukelt sich die Wahl hoch, bis der
+"`beste"' Rechner die Wahl gewinnt.
+
+Wenn es nun mehrere Windows NT Workstations im Netz g"abe, dann
+w"are die Wahl unentschieden. An dieser Stelle kommt die \emph{Uptime}
+der Rechner ins Spiel. Der Rechner, der am l"angsten l"auft, gewinnt
+die Wahl. Nun kann es sein, da"s nach einem Stromausfall zwei Rechner
+genau die gleiche Uptime haben. Dann kommt als letztes und eindeutiges
+Entscheidungskriterium der NetBIOS-Name des Rechners zum Zug. Der
+alphabetisch vorne stehende Rechner gewinnt. Mit diesen drei Kriterien
+ist eine eindeutige Wahl gesichert.
+
+Samba ordnet sich in der Standardeinstellung zwischen Windows 95 und
+Windows NT ein, das hei"st, gegen Windows 95 gewinnt Samba die Wahl,
+"uberl"a"st jedoch Windows NT Rechnern den Local Master Browser.
+
+Drei Parameter in der \dateistyle{smb.conf} bestimmen das Verhalten von Samba
+in der Wahl zum Local Master Browser:
+
+\begin{description}
+
+\item[\param{os level}] Damit wird die Einordnung von Samba in die
+ unterschiedlichen Betriebssysteme geregelt. Diese haben f"ur die
+ Betriebssystemstufe folgende Werte:
+
+\[\begin{tabular}{|l|r|}
+\hline
+Windows for Workgroups & 0 \\
+\hline
+Windows 95/98 & 1 \\
+\hline
+Windows NT Workstation & 16 \\
+\hline
+Samba & 20 \\
+\hline
+Windows NT Server & 32 \\
+\hline
+\end{tabular}\]
+
+Diese Werte sind nicht als fest anzusehen. Wenn ein neues Service Pack
+f"ur ein Betriebssystem herausgegeben wird, ist es m"oglich, da"s in
+der Software f"ur den Local Master Browser Fehler bereinigt wurden.
+Dann ist es sinnvoll, da"s diese neue Software die Rolle des LMB
+"ubernimmt.
+
+Der Parameter \param{os level} kann Werte von 0 bis 255 annehmen.
+Setzt man ihn auf 255, wird nach einer erfolgreichen Wahl niemand mehr
+Local Master Browser werden k"onnen.
+
+\item[\param{local master}] M"ochte man auf keinen Fall den LMB auf
+ einem Sambarechner haben, so setzt man den Parameter \param{local
+ master = no}. Dann nimmt Samba an keiner Wahl teil.
+
+\item[\param{preferred master}] Mit der Standardeinstellung
+ \param{preferred master = no} sucht Samba beim Start nach
+ einem LMB. Findet er einen, meldet er sich dort. Findet er keinen
+ LMB, bleibt Samba passiv. Jemand anders mu"s eine Wahl ansto"sen.
+ Wenn dann eine Wahl stattfindet, nimmt Samba teil und ordnet sich
+ anhand seines \param{os level} ein.
+
+\end{description}
+
+Es ist sehr sinnvoll, den Local Master Browser st"andig auf einer
+festen Maschine laufen zu lassen. H"aufige Wechsel des Local Master
+Browser lassen die Netzwerkumgebung aus zwei Gr"unden sehr instabil
+werden. Erstens m"ussen sich die Server im Netz h"aufig an neuen Local
+Master Browsern anmelden. Diese Anmeldung erfolgt per UDP und kann
+auch mal fehlschlagen. Zweitens kann es passieren, da"s ein Client den
+Wechsel eines Local Master Browser nicht mitbekommt und Informationen
+von einem nicht mehr aktuellen Local Master Browser beziehen m"ochte.
+Ein Sambaserver ist typischerweise eine Maschine, die als Server
+durchl"auft und auch deutlich stabiler als Windows-Clients ist. Mit
+den Einstellungen
+
+\begin{verbatim}
+[global]
+os level = 100
+preferred master = yes
+\end{verbatim}
+
+\noindent
+kann man sicher sein, da"s der Sambarechner immer den Local Master
+Browser innehat. \param{preferred master = yes} stellt sicher, da"s
+beim Start von Samba eine Wahl angesto"sen wird, und mit \param{os
+ level = 100} gewinnt Samba diese Wahl gegen alle anderen Maschinen
+im Netz. Es sei denn, ein anderer Administrator von Samba kommt auf
+die Idee, einen noch h"oheren Wert f"ur den \param{os level} zu
+benutzen.
+
+\section{NetBIOS "uber Subnetzgrenzen}
+
+\newcommand{\computer}[2]{%
+ \rput[t](0,0){%
+ \begin{pspicture}(2,2)
+ \psframe(0,0.5)(2,1.5)
+ \psline(1,1.5)(1,2)
+ \rput(1,1){\texttt{#1}}
+ \rput[b](1,0.2){{\footnotesize IP: #2}}
+ \end{pspicture}}}
+\newcommand{\network}[1]{%
+ \rput[l](0,0){%
+ \begin{pspicture}(#1,0.6)
+ \psline(0,0)(0,0.6)
+ \psline(0,0.3)(#1,0.3)
+ \psline(#1,0)(#1,0.6)
+ \end{pspicture}}}
+\newcommand{\routednet}{%
+\rput[lb](0,0){%
+\begin{pspicture}(10,5.5)
+\rput(0,5){\network{7}}
+\rput(2,5){\computer{WKS}{192.168.1.5}}
+\rput(3,2){\network{7}}
+\rput(8,2){\computer{SERVER}{192.168.2.8}}
+\rput(5.5,3.75){\psframe(-1,-0.25)(1,0.25)}
+\rput(5.5,3.75){{\footnotesize 192.168.1.1}}
+\rput(5.5,3.25){\psframe(-1,-0.25)(1,0.25)}
+\rput(5.5,3.25){{\footnotesize 192.168.2.1}}
+\psline(5.5,4)(5.5,5)
+\psline(5.5,2)(5.5,3)
+\end{pspicture}}}
+
+Die wenigsten Firmen haben heutzutage nur ein einziges LAN. Entweder
+sind verschiedene Geb"aude oder Standorte mit Routern verbunden, oder
+jemand w"ahlt sich in das Firmennetz ein. In diesen F"allen
+funktioniert die Namensaufl"osung nicht mehr wie beschrieben. Wird die
+Namensreservierung und -aufl"osung ausschlie"slich per Broadcast
+durchgef"uhrt, kann man Rechner, die hinter Routern liegen, nicht
+erreichen. Broadcasts verbleiben in den Subnetzen, in denen sie
+ausgesendet wurden.
+
+\begin{figure}[ht]\[
+\begin{pspicture}(10,6)
+\rput(0,0){\routednet}
+\psline{<-}(0,5.5)(2.7,5.5)
+\psline{->}(4.3,5.5)(7,5.5)
+\rput(3.5,5.5){\texttt{SERVER?}}
+\end{pspicture}\]
+\caption{Namensanfrage per Broadcast}
+\label{broadcastanfrage}
+\end{figure}
+
+In der dargestellten Situation sind zwei Netze "uber einen Router
+verbunden. Jeder der beiden Rechner reserviert seinen Namen in dem ihm
+zugeordneten Subnetz. Die Workstation \nbname{WKS} schickt ihre
+Reservierungen per Broadcast an 192.168.1.255, und der Server
+\nbname{SERVER} wird seinen Namen auf 192.168.2.255 reservieren. Der
+Router zwischen beiden bekommt diese Reservierungen zwar mit, wird sie
+aber nicht in das jeweils andere Subnetz weiterleiten. Wenn nun
+\nbname{WKS} ihren Server \nbname{SERVER} sucht, geschieht dies
+ebenfalls per Broadcast an 192.168.1.255. Diese Anfrage bleibt wie
+dargestellt im oberen Subnetz und erreicht \nbname{SERVER} gar nicht,
+so da"s dieser auch nicht antworten kann.
+
+\subsection{\nbname{LMHOSTS}}
+
+Der einfachste Weg, die Namensaufl"osung "uber Subnetzgrenzen hinweg
+zu realisieren, geht "uber eine statische Tabelle. Unter Windows
+liegt diese in der Datei \dateistyle{LMHOSTS}. Sie liegt abh"angig von der
+Windowsversion in unterschiedlichen Verzeichnissen und l"a"st sich am
+einfachsten mit der Suchfunktion des Desktops finden. Diese Datei ist
+"ahnlich aufgebaut wie die Datei \dateistyle{/etc/hosts} unter Unix. Ein
+Beispieleintrag ist der folgende:
+
+\verb|192.168.1.5 samba|
+
+Die Eintr"age in der \dateistyle{LMHOSTS} k"onnen durch den Zusatz
+\texttt{\#PRE} erg"anzt werden. Dieser Zusatz legt fest, in welcher
+Reihenfolge die Namensaufl"osung vorgenommen wird. Ist kein
+\texttt{\#PRE} vorhanden, so wird zun"achst eine konventionelle
+Namensaufl"osung per Broadcast versucht. Erst, wenn diese
+fehlschl"agt, wird in der \dateistyle{LMHOSTS} nachgeschaut. Ist der Zusatz
+vorhanden, so wird ohne Namensaufl"osung direkt der Wert in der
+\dateistyle{LMHOSTS} verwendet.
+
+Die Namensaufl"osung "uber die Datei \dateistyle{LMHOSTS} hat wie die
+Datei \dateistyle{/etc/hosts} den entscheidenden Nachteil, da"s sie
+auf jedem Rechner einzeln gepflegt werden mu"s. Das macht diese Art
+der Namenspflege sehr schnell unwartbar. Die Syntax der
+\dateistyle{LMHOSTS} l"a"st einen einfachen Trick zu, mit dem zentral
+eine \dateistyle{LMHOSTS}\footnote{Zentrale LMHOSTS} vorgehalten
+werden kann, das Statement \nbname{\#INCLUDE}. Man stellt an zentraler
+Stelle eine Freigabe zur Verf"ugung, in der die \dateistyle{LMHOSTS}
+steht, und f"ugt sie automatisch bei jedem booten in die Liste auf den
+Clients ein. Dazu mu"s einmalig auf den Clients die
+\dateistyle{LMHOSTS} folgenderma"sen aufgesetzt werden:
+
+\begin{verbatim}
+192.168.1.1 samba #PRE
+#INCLUDE \\samba\public\lmhosts
+\end{verbatim}
+
+Die einzelnen Werte sind nat"urlich den Gegebenheiten vor Ort
+anzupassen. Es ist darauf zu achten, da"s die Worte \nbname{\#PRE} und
+\nbname{\#INCLUDE} in Gro"sbuchstaben geschrieben sind. Bei den Namen
+selbst die Gro"sschreibung egal.
+
+\subsection{WINS}
+
+Die zweite M"oglichkeit, das Problem zu l"osen, ist ein zentraler
+Server, der die NetBIOS-Namen in einer Datenbank dynamisch pflegt.
+Dazu gibt es den WINS-Server. Ein solcher Server ist ein Rechner, bei
+dem sich jede NetBIOS-Applikation im Netz mit ihren Namen anmeldet.
+Die IP-Adresse dieses Servers mu"s jedem Rechner mitgeteilt werden.
+Bei Windows geschieht dies in den Eigenschaften des TCP/IP Protokolls
+im Reiter WINS-Adresse. Setzt man DHCP-Server ein, kann man ebenfalls
+den WINS-Server festlegen. Samba bekommt die Adresse mit dem Parameter
+\param{wins server = <ip-adresse>} im Abschnitt \param{[global]} der
+\dateistyle{smb.conf} mitgeteilt. Sobald ein Client die IP-Adresse des
+WINS-Servers kennt, ist es v"ollig gleichg"ultig, ob sich dieser im
+gleichen Subnetz befindet oder nicht.
+
+Die Namensreservierung erfolgt nicht mehr per Broadcast, sondern mit
+einem gerichteten UDP-Paket an den WINS-Server. Gerichtete Pakete
+leitet der Router wie jedes andere Paket an den WINS-Server weiter.
+Dieser sieht in seiner Tabelle nach, ob der Name bereits reserviert
+ist. Ist das nicht der Fall, so wird er spontan eine Best"atigung der
+Reservierung zur"uckschicken. Diese Reservierung gilt nun f"ur eine
+bestimmte Zeit und mu"s rechtzeitig erneuert werden.
+
+Ist der Name bereits reserviert, wird der WINS-Server den bisherigen
+Besitzer befragen, ob er den Namen noch ben"otigt. Bekommt er keine
+Antwort, wird er dem neuen Besitzer ebenfalls eine Best"atigung
+schicken. M"ochte der alte Besitzer den Namen noch verwenden, so wird
+der Anfragende eine Ablehnung der Reservierung erhalten. Diese
+Nachfrage ist notwendig, um einem abgest"urzten Rechner das spontane
+Booten zu erm"oglichen, da bei einem Absturz keine Freigabe der
+Namensreservierung erfolgen kann.
+
+Die Namensanfrage, die in Abbildung \ref{broadcastanfrage} den Server
+nicht erreichte, weil der Router keine Broadcasts weitergibt, wird nun
+direkt an den WINS-Server gerichtet, der in seiner Tabelle nachsehen
+kann.
+
+\begin{figure}[ht]\[
+\begin{pspicture}(10,6)
+\rput(0,0){\routednet}
+\rput(4,2){\computer{WINS}{192.168.2.5}}
+\psline[linestyle=dashed,linearc=0.25]
+ {->}(2.5,4.5)(3.2,4.9)(5.3,4.9)(5.3,2)(4.5,1.5)
+\rput(3.5,5.8){\texttt{SERVER?}}
+\end{pspicture}\]
+\caption{WINS-Anfrage}
+\end{figure}
+
+Samba kann als WINS-Server konfiguriert werden, indem der Parameter
+\param{wins support = yes} gesetzt wird. Ist dieser Parameter gesetzt,
+kann Samba nach einem Neustart bei allen Clients und allen sonstigen
+Servern als WINS-Server eingetragen werden. Werden diese dann neu
+gestartet, melden sie sich beim WINS-Server an.
+
+Wenn nun ein Rechner mit Samba als WINS-Server konfiguriert ist, und
+sich die anderen Rechner dort anmelden, werden diese in der Datei
+\dateistyle{/var/lock/samba/wins.dat} abgelegt. Der \prog{nmbd} pflegt
+diese Datei dynamisch, je nach Reservierungen und Abmeldungen. Die
+Datei \dateistyle{wins.dat} wird in regelm"a"sigen Abst"anden geschrieben.
+Wenn es notwendig sein sollte, den wirklich aktuellen Stand
+unabh"angig von diesem Zeitintervall zu erhalten, so kann man dem
+\prog{nmbd} das \prog{HANGUP}-Signal durch den Befehl \prog{killall
+-HUP nmbd} senden. Au"serdem wird die \dateistyle{wins.dat} beim Beenden
+des \prog{nmbd} geschrieben.
+
+Diese Datenbank wird auf Festplatte gehalten, damit die Daten einen
+Neustart von Samba "uberleben. Jeder Rechner, der einen Namen f"ur
+sich reserviert hat, hat diese Reservierung f"ur einen bestimmten
+Zeitraum ausgesprochen. Wenn Samba jetzt neu gestartet werden sollte,
+und dadurch die Datenbank verloren ginge, w"are der gesamte
+NetBIOS-Namensraum nicht mehr verf"ugbar. Au"serdem kann ein WINS
+Server die angeschlossenen Clients weder von sich aus finden, noch sie
+darum bitten, sich erneut zu registrieren. Daher ist die WINS
+Datenbank "uber Neustarts von Samba hinaus zu erhalten.
+
+Die Anfrage, die die Workstation \nbname{WKS} absetzt, wird nun nicht
+mehr per Broadcast gestellt, sondern mit einem gerichteten Paket an
+den WINS-Server, bei dem sich alle Rechner angemeldet haben.
+
+%\[\setlength{\unitlength}{1mm}
+%\begin{picture}(100,60)(0,20)
+%\put(0,0){\routednet}
+%\put(30,75){\makebox(0,0)[l]{{\ttfamily\bfseries SERVER?}}}
+%\curve(17,65, 20,72, 29,75)
+%\tagcurve(40,75, 50,75, 57,65, 57,45, 45,38, 40,30, 30,20)
+%\put(50,45){\circle*{1}}
+%\put(40,40){\computer{WINS}{192.168.2.5}}
+%\end{picture}\]
+
+WINS hat gegen"uber der broadcastbasierten Namensreservierung einige
+Vorteile. Namensreservierung per Broadcast ben"otigt Wartezeiten. Es
+wird die Reservierung angek"undigt, es wird gewartet, die Reservierung
+wird erneut angek"undigt, und es wird wieder gewartet. Dieses Spiel
+wiederholt sich mehrfach, bis der Rechner sicher sein kann, da"s ein
+eventueller Vorbesitzer des Namens genug Zeit hatte, sich zu beklagen.
+Beim Einsatz von WINS entfallen diese Wartezeiten, da hier ein
+einziger Rechner s"amtliche reservierte Namen registriert und in
+seiner Tabelle nachschauen kann. Daher ist die Reservierung per
+NetBIOS deutlich schneller, und auch weniger netzbelastend. Selbst
+wenn man also nur ein einziges Subnetz hat, sollte man zur Reduzierung
+der Netzlast den Einsatz eines WINS-Servers in Erw"agung ziehen.
+
+Zus"atzlich sei hier angemerkt, da"s es netzwerkweit nur einen
+einzigen WINS-Server geben darf. Selbst wenn es unterschiedliche
+Arbeitsgruppen oder Dom"anen gibt, darf es nicht mehr als einen
+WINS-Server geben. Setzt man mehrere WINS-Server ein, hat man
+getrennte Namensr"aume und handelt sich damit massive Probleme ein, da
+Windows Namen sowohl beim WINS als auch per Broadcast aufl"ost.
+
+Rechner im einen Namensraum k"onnen mit Rechnern, die an einem anderen
+WINS-Server angeschlossen sind, nicht kommunizieren, da die Namen
+nicht aufgel"ost werden k"onnen. Namen, die beim WINS nicht bekannt
+sind, werden von Windows zus"atzlich lokal per Broadcast aufgel"ost.
+Das hei"st, man findet beim einige Rechner nur per WINS, andere auch
+lokal. Die Fehlerdiagnose wird dadurch stark erschwert.
+
+Unter Windows NT kann man mehrere WINS-Server einsetzen, die sich
+gegenseitig abstimmen. Diese Replikation stellt sicher, da"s die
+Clients unabh"angig von der Anzahl der WINS-Server nur eine einzige
+Namensdatenbank sehen. Die WINS-Server stellen sich somit gegen"uber
+den Clients als eine konsistente Datenbank dar.
+
+Die Abfrage eines WINS-Servers durch \prog{nmblookup} erfolgt
+beispielhaft folgenderma"sen:
+
+\begin{verbatim}
+nmblookup -R -U 192.168.1.5 samba
+\end{verbatim}
+
+Hiermit wird der WINS-Server, der auf dem Rechner 192.168.1.5 liegt,
+nach dem Namen \nbname{samba} befragt.
+
+Samba kennt zwei zus"atzliche Funktionen, die es im Zusammenhang mit
+WINS interessant machen. Einerseits kann Samba als WINS Proxy
+eingerichtet werden, indem \param{wins proxy = yes} gesetzt wird. Ist
+diese Einstellung aktiv, dann wird Samba s"amtliche Reservierungen und
+Anfragen, die es aus dem lokalen Netz per Broadcast erh"alt, an den
+mit \prog{wins server =} konfigurierten WINS-Server weiterleiten.
+Stellt man mit dieser Einstellung einen Samba-Server in ein Subnetz,
+werden s"amtliche Rechner in diesem Netz werden nun beim WINS
+angemeldet, und nutzen diesen auch. Dies ist auch dann der Fall, wenn
+sie entweder selbst keinen WINS-Server ansprechen k"onnen oder nicht
+daf"ur konfiguriert sind. Man sollte jedoch in jedem Fall eine echte
+Konfiguration des WINS-Servers auf dem Client vorziehen. Ein WINS
+Proxy kann nur eine Behelfsl"osung sein, da man sich damit auf einen
+weiteren Rechner verl"a"st.
+
+Unter Windows kann man statische Eintr"age im WINS vornehmen. Dies
+geht so direkt unter Samba nicht. Man mu"s hierzu den Parameter
+\param{dns proxy = yes} auf dem WINS-Server setzen. Empf"angt der WINS
+Server nun eine Anfrage, die er nicht aus seiner Datenbank beantworten
+kann, wird er eine ganz normale Unix-Hostnamenanfrage machen.
+Typischerweise wird er in der \dateistyle{/etc/hosts} nachschauen und
+danach dann das DNS anhand der Konfiguration in der Datei
+\dateistyle{/etc/resolv.conf} befragen. Damit ist es durch einen Eintrag
+auf dem WINS-Server m"oglich, den gesamten DNS-Namensraum auch in der
+NetBIOS-Namenswelt zur Verf"ugung zu stellen.
+
+\section{Windows-Namensaufl"osung im Detail}
+
+Um die Namensaufl"osung unter Windows zu verstehen, mu"s man zwei
+Arten von Anwendungen unterscheiden:
+
+\begin{description}
+\item[NetBIOS-Anwendungen:] Dies sind die klassischen
+ Windows-Programme, zum Beispiel um Laufwerke mit einem Server zu
+ verbinden, oder um Outlook mit dem Exchange-Server zu verbinden. Die
+ gesamte Netzwerkumgebung geh"ort ebenfalls zu den
+ NetBIOS-Anwen\-dun\-gen.
+\item[TCP/IP-Anwendungen:] Telnet, ping und Netscape geh"oren zu den
+ Anwendungen, die es nur in der TCP/IP-Protokollfamilie gibt. Bei
+ diesen funktioniert die Namensaufl"osung etwas anders als bei den
+ NetBIOS-Anwendungen.
+\end{description}
+
+Wenn eine {\bfseries NetBIOS-Anwendung} einen Namen aufl"osen will,
+dann geschieht dies in mehreren Schritten, die nacheinander
+ausgef"uhrt werden, bis der Name gefunden ist.
+
+\begin{enumerate}
+\item Das System schaut im NetBIOS-Namenscache nach. Dieser kann durch
+ \prog{nbtstat -c} vom Benutzer abgefragt werden.
+\item Ist ein WINS-Server konfiguriert, so wird dieser befragt.
+\item Kann der Name im WINS nicht aufgel"ost werden, so wird eine
+ Broadcast-Anfrage ausgel"ost.
+\item Es wird in der Datei \dateistyle{LMHOSTS} nachgesehen.
+\item Sofern in den Eigenschaften von TCP/IP die DNS-Aufl"osung f"ur
+ NetBIOS-Namen aktiviert ist, wird nun an das Aufl"osungssystem f"ur
+ TCP/IP-Anwendungen "ubergeben.
+\end{enumerate}
+
+Wenn man Namen in die Datei \dateistyle{LMHOSTS} eintr"agt, so werden diese
+erst nach den WINS- und Broadcast-Timeouts ber"ucksichtigt. Wenn man
+diese sofort aufgel"ost haben m"ochte, so kann man sie mit dem Zusatz
+\nbname{\#PRE} versehen. Dann werden sie beim n"achsten Reboot
+dauerhaft in den NetBIOS-Namenscache geladen. Im laufenden Betrieb
+kann man dieses Laden in den Namenscache durch ein \prog{nbtstat -R}
+erzwingen.
+
+Setzt man f"ur die IP-Adre"svergabe DHCP ein, kann man Windows-Clients
+die IP-Adresse des WINS-Servers auf diesem Weg mitteilen. Tut man
+dies, mu"s man den Clients ebenfalls einen Knotentyp zuweisen. Die
+oben beschriebene Tabelle gilt f"ur den Knotentyp 8, den sogenannten
+H-Knoten. Setzt man den Knotentyp auf 4, so bekommt man einen
+M-Knoten, der zuerst Broadcast und dann WINS ausf"uhrt. Diese
+Einstellung ist jedoch nur in Ausnahmef"allen sinnvoll, da jede
+Anfrage beim WINS die Broadcastlast im Netz reduziert.
+
+Die Namensaufl"osung f"ur {\bfseries TCP/IP-Anwendungen} ist
+einfacher.
+
+\begin{enumerate}
+\item Zun"achst wird in der Datei \dateistyle{HOSTS} nachgesehen.
+\item Ist ein DNS-Server konfiguriert, wird dieser befragt.
+\item Der DNS-Name wird, so wie er ist, an die
+ NetBIOS-Namensaufl"osung "ubergeben. Damit kann f"ur interne Systeme
+ vermeiden, sie ins DNS aufnehmen zu m"ussen. Will man etwa einen
+ Proxy unter dem Namen "`proxy"' einrichten, gen"ugt es, auf dieser
+ Maschine einen korrekt konfigurierten \prog{nmbd} zu installieren,
+ der den Namen "`proxy"' registriert. Damit kann man auf allen
+ Browsern einfach "`proxy"' eintragen.
+\end{enumerate}
+
+\todo{Tabelle}
+
+Die Namensaufl"osung von Samba ist weit weniger kritisch als die von
+Window-Systemen, da Samba in der Regel ausschlie"slich als Server
+auftritt. Samba als Server ist es gleichg"ultig, wie Namen aufgel"ost
+werden k"onnen. Es gibt zwei Situationen, in denen Samba Namen
+aufl"osen mu"s:
+
+\begin{description}
+\item[smbclient] Samba als Client mu"s offensichtlich Namen aufl"osen.
+\item[Samba als Dom"anenmitglied] Mit dem Parameter \param{password
+ server} wird Samba als Dom"anenmitglied mitgeteilt, welcher
+ Dom"anencontroller f"ur Pa"sw"orter zust"andig ist. Es ist enorm
+ wichtig, da"s f"ur diese Funktion die Namensaufl"osung korrekt
+ funktioniert.
+\end{description}
+
+Wie Windows kennt Samba vier Mechanismen zur Namensaufl"osung:
+Broadcast, WINS, LMHOSTS und die normale Unix-Namensaufl"osung. Die
+Reihenfolge, in der die Mechanismen abgefragt werden, wird durch den
+Parameter \param{name resolve order} festgelegt. Mit den vier Werten
+\param{bcast}, \param{wins}, \param{lmhosts} und \param{host} werden
+die vier Mechanismen beschrieben. Die Standardreihenfolge ist
+
+\begin{verbatim}
+name resolve order = lmhosts host wins bcast
+\end{verbatim}
+
+\noindent und legt fest, da"s vor der Windows-Namensaufl"osung zun"achst das
+DNS
+befragt wird. Dies ist h"aufig ein Problem f"ur \prog{smbclient}, da
+man m"oglicherweise auf einen DNS-Timeout warten mu"s, bevor die
+Windows-Namensaufl"osung benutzt wird. In vielen F"allen kann es von
+Vorteil sein, f"ur Samba als Client vollst"andig auf die
+DNS-Namensaufl"osung zu verzichten oder sie ans Ende der Liste zu
+stellen:
+
+\begin{verbatim}
+name resolve order = lmhosts wins bcast host
+\end{verbatim}
+
+\section{Browsing "uber Subnetzgrenzen}
+\label{browsing-im-wan}
+
+So, wie die Netzwerkumgebung in Abschnitt \ref{netzwerkumgebung}
+betrachtet wurde, funktioniert sie nur in einem einzigen lokalen Netz.
+Die Wahl zum Local Master Browser funktioniert per Datagramm, das an
+den Namen \nbname{arbeitsgruppe<1e>} gesendet wird.
+\nbname{arbeitsgruppe<1e>} ist ein Gruppenname, der von mehreren
+Rechnern reserviert sein kann. Das hei"st, da"s ein Datagramm an
+diesen Namen mehrere Rechner erreichen mu"s. Dies geschieht bei
+NetBIOS "uber TCP/IP mit einem UDP-Paket an die Broadcastadresse im
+lokalen Netz. Allein hieraus ergibt sich, da"s es pro Arbeitsgruppe in
+jedem Subnetz einen eigenen LMB geben mu"s. Jeder LMB bekommt aus
+seinem Subnetz die Informationen "uber vorhandene Server.
+
+Um diese Einschr"ankung zu umgehen, gibt es den Domain Master Browser
+(DMB). Der DMB ist ein Rechner, der die Serverlisten von allen LMBs
+einsammelt und auf Anforderung wieder herausgibt. Dabei sitzt der DMB
+nur passiv da und wartet darauf, da"s sich ein LMB mit ihm
+synchronisieren will. Es ist Aufgabe der LMBs, sich regelm"a"sig
+danach zu erkundigen, wo der DMB sitzt, und mit diesem dann die
+Serverlisten abzugleichen.
+
+Die Vorg"ange werden am deutlichsten, wenn man ein Beispiel
+betrachtet. Dieses Beispiel ist im wesentlichen der
+Originaldokumentation von Samba aus der Datei \dateistyle{BROWSING.txt}
+entnommen.
+
+\newcommand{\minicomputer}[1]{%
+\begin{picture}(10,9)(5,9)
+\put(0,0){\framebox(10,5){{\ttfamily #1}}}
+\put(5,5){\line(0,1){4}}
+\end{picture}}
+\newcommand{\mininetz}[1]{%
+\begin{picture}(62,12)
+\put(10,10){\minicomputer{N#1A}}
+\put(25,10){\minicomputer{N#1B}}
+\put(40,10){\minicomputer{N#1C}}
+\put(55,10){\minicomputer{N#1D}}
+\put(3,10){\line(1,0){59}}
+\put(3,8){\line(0,1){4}}
+\put(62,8){\line(0,1){4}}
+\end{picture}}
+
+\begin{figure}[ht]
+\[\setlength{\unitlength}{1.1mm}
+\begin{picture}(120,60)(0,5)
+\put(0,20){\mininetz{1}}
+\put(25,19){\makebox(0,0){\textit{{\small DMB,LMB}}}}
+\put(30,50){\mininetz{2}}
+\put(85,49){\makebox(0,0){\textit{{\small WINS}}}}
+\put(55,49){\makebox(0,0){\textit{{\small LMB}}}}
+\put(50,5){\mininetz{3}}
+\put(105,4){\makebox(0,0){\textit{{\small LMB}}}}
+\put(48,48){\minicomputer{R1}}
+\put(48,48){\line(0,1){12}}
+\put(48,39){\line(0,-1){9}}
+\put(77,48){\minicomputer{R2}}
+\put(77,48){\line(0,1){12}}
+\put(77,39){\line(0,-1){24}}
+\end{picture}\]
+\caption{Domain Master Browser}
+\end{figure}
+
+Dieses Netz besteht aus drei Subnetzen (1,2,3), die durch zwei Router (R1
+und R2) verbunden sind. Die Router lassen keine Broadcasts durch. Alle
+Subnetze bestehen aus jeweils vier Maschinen. Nehmen wir der Einfachheit
+halber an, da"s alle Maschinen in der gleichen Arbeitsgruppe
+konfiguriert sind. Rechner \nbname{N1B} im Subnetz 1 ist als Domain
+Master Browser konfiguriert. Das hei"st, da"s er die Browserliste f"ur
+die ganze Arbeitsgruppe aufsammelt. Rechner \nbname{N2D} ist als WINS
+Server konfiguriert und alle anderen Maschinen registrieren ihre
+NetBIOS Namen dort.
+
+Wenn alle diese Maschinen gebootet werden, werden in jedem der drei
+Subnetze Wahlen um einen Local Master Browser abgehalten. Nehmen wir
+an, im Subnetz 1 gewinnt \nbname{N1B}, im Subnetz 2 gewinnt
+\nbname{N2B} und im Subnetz 3 gewinnt \nbname{N3D}. Diese Maschinen
+sind als Local Master Browser in ihrem Subnetz bekannt. Im Subnetz 1
+liegen der LMB und der DMB auf der gleichen Maschine, was nicht der
+Fall sein mu"s. Diese beiden Rollen sind vollst"andig unabh"angig
+voneinander.
+
+Alle Maschinen, die Serverdienste anzubieten haben, k"undigen dies per
+Broadcast auf ihrem Subnetz an. Der Local Master Browser in jedem
+Subnetz empf"angt diese Broadcasts und tr"agt alle Server in einer
+Liste ein. Diese Liste von Eintr"agen ist die Basis f"ur die
+Browserliste. In unserem Fall nehmen wir an, da"s alle Maschinen
+Serverdienste anbieten, das hei"st, da"s alle Maschinen in der Liste
+erscheinen.
+
+F"ur jedes Subnetz wird der Local Master Browser als
+\emph{ma"sgeblich} angesehen, und zwar f"ur alle Namen, die er per
+lokalem Broadcast empf"angt. Broadcasts verlassen das Subnetz nicht,
+und die Broadcasts im lokalen Subnetz werden als ma"sgeblich
+angesehen. Daher wird dem Local Master Browser bei diesen Servern
+geglaubt. Rechner, die sich in anderen Subnetzen befinden, und "uber
+die der Local Master Browser von anderen Local Master Browsern
+informiert wurde, werden als nicht ma"sgeblich angesehen.
+
+An diesem Punkt sieht die Browse Liste folgenderma"sen aus: (dies sind
+die Maschinen, die Sie in Ihrer Netzwerkumgebung sehen w"urden, wenn
+Sie sie in einem bestimmten Subnetz ansehen)
+
+\vspace{\baselineskip}
+\[\begin{tabular}{|c|c|l|}
+\hline
+Netz & LMB & Liste \\ \hline \hline
+1 & \nbname{N1C} & \nbname{N1A}, \nbname{N1B}, \nbname{N1C}, \nbname{N1D}\\
+\hline
+2 & \nbname{N2B} & \nbname{N2A}, \nbname{N2B}, \nbname{N2C}, \nbname{N2D}\\
+\hline
+3 & \nbname{N3D} & \nbname{N3A}, \nbname{N3B}, \nbname{N3C}, \nbname{N3D}\\
+\hline
+\end{tabular}\]
+\vspace{\baselineskip}
+
+An diesem Punkt sind alle Subnetze vollst"andig separat, keine
+Maschine wird in anderen Subnetzen gesehen. Die
+Microsoft-Dokumentation spricht davon, da"s die Arbeitsgruppen in den
+Subnetzen getrennt sind.
+
+Sehen wir uns nun Subnetz zwei an. Sobald \nbname{N2B} der Local Master
+Browser geworden ist, sucht er den Domain Master Browser, um mit ihm
+die Browse Listen zu synchronisieren. Dies tut er, indem er den WINS
+Server (\nbname{N2D}) nach der IP-Adresse fragt, die zum NetBIOS-Namen
+\nbname{arbeitsgruppe<1B>} geh"ort. Diesen Namen hat der Domain Master
+Browser (\nbname{N1C}) beim WINS-Server f"ur sich beim booten
+registriert.
+
+\nbname{N2B} kennt nun den Domain Master Browser. Er k"undigt sich als
+Local Master Browser f"ur Subnetz 2 bei ihm an. Dann synchronisiert
+\nbname{N2B} sich mit \nbname{N2D}, indem er einen
+NetServerEnum2-Aufruf abschickt. Der Domain Master Browser schickt
+alle Server, die er kennt, zur"uck. Sobald der Domain Master Browser
+die Ank"undigung von \nbname{N2B} als Lokaler Master Browser erhalten
+hat, wird auch er sich mit dem Local Master Browser
+synchronisieren. Nachdem beide Synchronisationen stattgefunden haben,
+sehen die Browse Listen so aus:
+
+\vspace{\baselineskip}
+\[\begin{tabular}{|c|c|l|}
+\hline
+Netz & LMB & Liste \\ \hline \hline
+1 & \nbname{N1C} & \nbname{N1A}, \nbname{N1B}, \nbname{N1C}, \nbname{N1D}\\
+ & & \nbname{N2A*}, \nbname{N2B*}, \nbname{N2C*}, \nbname{N2D*}\\
+\hline
+2 & \nbname{N2B} & \nbname{N2A}, \nbname{N2B}, \nbname{N2C}, \nbname{N2D}\\
+& & \nbname{N1A*}, \nbname{N1B*}, \nbname{N1C*}, \nbname{N1D*}\\
+\hline
+3 & \nbname{N3D} & \nbname{N3A}, \nbname{N3B}, \nbname{N3C}, \nbname{N3D}\\
+\hline
+\end{tabular}\]
+\vspace{\baselineskip}
+
+Die mit * bezeichneten Eintr"age werden als nicht ma"sgeblich
+angesehen, da sie von anderen Master Browsern erhalten wurden. F"ur
+den Client macht dies jedoch keinen Unterschied. Nur der LMB darf
+diese Eintr"age selbstverst"andlich beim n"achsten Abgleich nicht an
+den DMB als seine eigenen zur"uckmelden.
+
+Zu diesem Zeitpunkt werden Benutzer in den Subnetzen 1 und 2, die die
+Netzwerkumgebung ansehen, die Server in beiden Subnetzen sehen,
+Benutzer im Subnetz 3 sehen immer noch nur die Server in ihrem eigenen
+Subnetz.
+
+Der lokale Master Browser im Subnetz 3 (\nbname{N3D}) macht nun exakt
+das gleiche wie \nbname{N2B}. Wenn er die Browse Listen mit dem Domain
+Master Browser (\nbname{N1B}) abgeglichen hat, bekommt er sowohl die
+Server in Subnetz 1, als auch die im Subnetz 2. Nachdem sich
+\nbname{N3D} mit \nbname{N1C} synchronisiert hat und umgekehrt, sehen
+die Browse Listen folgenderma"sen aus:
+
+\vspace{\baselineskip}
+\[\begin{tabular}{|c|c|l|}
+\hline
+Netz & LMB & Liste \\ \hline \hline
+1 & \nbname{N1C} & \nbname{N1A}, \nbname{N1B}, \nbname{N1C}, \nbname{N1D}\\
+ & & \nbname{N2A*}, \nbname{N2B*}, \nbname{N2C*}, \nbname{N2D*}\\
+ & & \nbname{N3A*}, \nbname{N3B*}, \nbname{N3C*}, \nbname{N3D*}\\
+\hline
+2 & \nbname{N2B} & \nbname{N2A}, \nbname{N2B}, \nbname{N2C}, \nbname{N2D}\\
+ & & \nbname{N1A*}, \nbname{N1B*}, \nbname{N1C*}, \nbname{N1D*}\\
+\hline
+3 & \nbname{N3D} & \nbname{N3A}, \nbname{N3B}, \nbname{N3C}, \nbname{N3D}\\
+ & & \nbname{N1A*}, \nbname{N1B*}, \nbname{N1C*}, \nbname{N1D*}\\
+ & & \nbname{N2A*}, \nbname{N2B*}, \nbname{N2C*}, \nbname{N2D*}\\
+\hline
+\end{tabular}\]
+\vspace{\baselineskip}
+
+Jetzt sehen Benutzer in den Subnetzen 1 und 3 alle Server in allen
+Subnetzen, Benutzer im Subnetz 2 sehen jedoch immer noch nur die
+Server von Subnetz 1 und 2, nicht jedoch die im Subnetz 3.
+
+Zum guten Schlu"s wird sich der lokale Master Browser im Subnetz 2
+(\nbname{N2B}) erneut mit dem Domain Master Browser abstimmen, und die
+fehlenden Servereintr"age bekommen. Endlich sehen die Browse Listen
+als stabiler Zustand so aus:
+
+\vspace{\baselineskip}
+\[\begin{tabular}{|c|c|l|}
+\hline
+Netz & LMB & Liste \\ \hline \hline
+1 & \nbname{N1C} & \nbname{N1A}, \nbname{N1B}, \nbname{N1C}, \nbname{N1D}\\
+ & & \nbname{N2A*}, \nbname{N2B*}, \nbname{N2C*}, \nbname{N2D*}\\
+ & & \nbname{N3A*}, \nbname{N3B*}, \nbname{N3C*}, \nbname{N3D*}\\
+\hline
+2 & \nbname{N2B} & \nbname{N2A}, \nbname{N2B}, \nbname{N2C}, \nbname{N2D}\\
+ & & \nbname{N1A*}, \nbname{N1B*}, \nbname{N1C*}, \nbname{N1D*}\\
+ & & \nbname{N3A*}, \nbname{N3B*}, \nbname{N3C*}, \nbname{N3D*}\\
+\hline
+3 & \nbname{N3D} & \nbname{N3A}, \nbname{N3B}, \nbname{N3C}, \nbname{N3D}\\
+ & & \nbname{N1A*}, \nbname{N1B*}, \nbname{N1C*}, \nbname{N1D*}\\
+ & & \nbname{N2A*}, \nbname{N2B*}, \nbname{N2C*}, \nbname{N2D*}\\
+\hline
+\end{tabular}\]
+\vspace{\baselineskip}
+
+Synchronisationen zwischen dem Domain Master Browser und den Local
+Master Browsern wird weiterhin auftreten, aber dies sollte den
+stabilen Zustand nur best"atigen.
+
+Wenn Router R1 oder R2 ausfallen, wird das folgende passieren:
+
+\begin{enumerate}
+\item Namen der Computer auf beiden Seiten der nicht mehr erreichbaren
+Subnetze werden f"ur 36 Minuten weiter in den Browse Listen gehalten,
+so da"s sie in der Netzwerkumgebung weiterhin erscheinen.
+
+\item Versuche, Verbindungen zu diesen Rechnern aufzubauen, werden
+scheitern, aber die Namen werden nicht von den Browse Listen entfernt
+werden.
+
+\item Wenn ein Subnetz vom WINS-Server getrennt wird, wird es nur noch
+auf die lokalen Server zugreifen k"onnen, deren Namen mit lokaler
+Broadcast NetBIOS-Namensaufl"osung aufgel"ost werden k"onnen. Das ist
+vergleichbar mit der Situation, keinen Zugriff auf einen DNS Server
+mehr zu haben.
+\end{enumerate}
+
+\subsection{Browsing mit vielen Arbeitsgruppen}
+
+Wenn man in der Netzwerkumgebung auf das Microsoft Windows Netzwerk
+klickt, bekommt man eine Liste s"amtlicher Arbeitsgruppen im Netz
+angezeigt. Diese Liste der Arbeitsgruppen wird vom Local Master
+Browser vorgehalten. Wie bekommt er diese Liste?
+
+Jeder Local Master Browser reserviert f"ur sich einen speziellen
+Gruppennamen, der folgenderma"sen dargestellt wird:
+\nbname{..\_\_MSBROWSE\_\_.<01>}. Die Punkte stehen dabei f"ur die
+Ascii-Werte eins und zwei. Regelm"a"sig wird jeder Local Master
+Browser seine Existenz an diesen Gruppennamen senden. Alle anderen
+Local Master Browser im Netz sammeln diese Ank"undigungen, damit sie
+Clients die Liste der vorhandenen Arbeitsgruppen und Local Master
+Browser mitteilen k"onnen.
+
+Wenn Domain Master Browser ins Spiel kommen, wird das Bild etwas
+komplizierter. Samba hat Erweiterungen implementiert, mit denen das
+Browsing "uber Subnetzgrenzen stabiler gemacht werden soll. Samba
+fragt den WINS-Server regelm"a"sig nach allen Domain Master Browsern.
+Diese werden in zuf"alligen Abst"anden kontaktiert, um die Browse
+Listen mit ihnen abzugleichen. Dadurch kann es passieren, da"s
+Arbeitsgruppen, die nicht mehr existieren, weiterhin in der
+Netzwerkumgebung auftauchen und sich nicht l"oschen lassen. Samba
+kennt den Parameter \param{enhanced browsing = no}, mit dem sich
+dieses Verhalten abstellen l"a"st.
+
+\section{Virtuelle Sambaserver}
+\label{virtuelle-server}
+
+Manchmal kann es notwendig sein, mehr als einen Sambaserver
+gleichzeitig auf einem Rechner laufen zu lassen. Zur
+Serverkonsolidierung kann es notwendig sein, unter mehreren Namen in
+der Netzwerkumgebung zu erscheinen. Dies ist mit dem Parameter
+\param{netbios aliases} sehr einfach m"oglich. Wenn es n"otig ist, in
+mehr als einer Arbeitsgruppe aufzutauchen, dann scheitert dies
+Verfahren jedoch, da der Parameter \param{workgroup} nur einmal
+angegeben werden kann.
+
+Eine andere Konfiguration ist die Einbindung von virtuellen Servern in
+eine Hochverf"ugbarkeitsumgebung. Es kann w"unschenswert sein, zwei
+physikalisch vorhandene Server unabh"angig voneinander arbeiten und
+sich gegenseitig "uberwachen zu lassen. Jeder der beiden Server hat
+seinen eigenen Namen und seine eigenen Freigaben. Stellt ein Server
+fest, da"s sein Partner defekt ist, mu"s er dessen Aufgaben
+"ubernehmen. Dies ist am einfachsten m"oglich, wenn die Aufgaben des
+defekten Servers isoliert in einer eigenen Samba-Instanz wahrgenommen
+werden. Die Hochverf"ugbarkeitssoftware mu"s nur daf"ur sorgen, da"s
+die Platten "ubernommen werden und der ausgefallene Dienst auf dem
+noch lebenden Server gestartet wird. Es ist keine Neukonfiguration des
+bereits laufenden Servers notwendig.
+
+Hier soll ein Beispiel aufgebaut werden, mit dem Samba auf einem
+Rechner f"ur verschiedene Arbeitsgruppen Local Master Browser
+wird. Ist dieser Rechner ein Unixserver, der 24 Stunden durchl"auft,
+kann so mit sehr einfachen Mitteln eine recht stabile Netzwerkumgebung
+f"ur beliebig viele Arbeitsgruppen erreicht werden.
+
+Zun"achst wird ein isolierter Local Master Browser f"ur die
+Arbeitsgruppe \nbname{GOETTINGEN} installiert. Der Name dieses
+Rechners soll der Einfachheit halber \nbname{GOE} hei"sen. Die gesamte
+Konfiguration wird unter \dateistyle{/samba/goe} abgelegt, so da"s sie
+recht einfach duplizierbar ist. Die Datei
+\dateistyle{/samba/goe/smb.conf} hat folgenden Aufbau:
+
+\begin{verbatim}
+[global]
+workgroup = goettingen
+netbios name = goe
+
+interfaces = eth0:1
+bind interfaces only = yes
+
+encrypt passwords = yes
+smb passwd file = /samba/goe/smbpasswd
+
+log file = /samba/goe/var/log.smb
+lock directory = /samba/goe/locks
+
+os level = 100
+preferred master = yes
+\end{verbatim}
+\label{smbconf-goe}
+
+In dieser Konfigurationsdatei gibt es einige Einstellungen, die die
+Voreinstellungen vom Kompilieren "uberschreiben. Normalerweise finden
+sich die Logdateien unter Linux in \dateistyle{/var/log} oder bei
+selbstkompilierten Sambas in \dateistyle{/usr/local/samba/var}, hier
+sollen sie pro Server separat in einem eigenen Verzeichnis abgelegt
+werden.
+
+Die nicht offensichtlichen Einstellungen bedeuten:
+
+\begin{description}
+\item[bind interfaces only:] Normalerweise nimmt der \prog{smbd} auf
+ jeder im System konfigurierten IP-Adresse Verbindungen entgegen. Den
+ Vorgang, mit dem der \prog{smbd} dies dem Kernel mitteilt, nennt
+ sich "`An eine Adresse binden"'. Um auf jeder Adresse Verbindungen
+ entgegen zu nehmen, bindet Samba an die spezielle Adresse 0. Jede
+ konfigurierte IP-Adresse kann nur von einem einzigen Proze"s
+ gebunden werden. Versucht ein \prog{smbd}, eine bereits verwendete
+ Adresse zu binden, wird dies mit der Fehlermeldung \textbf{Address
+ already in use} verweigert. Mit \prog{bind interfaces only = yes}
+ wird der \prog{smbd} nur die im Parameter \prog{interfaces}
+ angegebenen Adressen beziehungsweise Interfaces verwenden.
+
+ Der Unterschied wird im Vergleich zweier Ausgaben des Programms
+ \prog{netstat -nat} (hier unter Linux) deutlich. Zun"achst der
+ relevante Teil \emph{ohne} \param{bind interfaces only = yes}:
+
+\begin{verbatim}
+vlendec@server:~ > netstat -natu
+Active Internet connections (servers and established)
+Proto Recv-Q Send-Q Local Address Foreign Address State
+
+tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
+
+vlendec@server:~/ >
+\end{verbatim}
+
+ Im Vergleich dazu die Ausgabe des gleichen Programmaufrufs
+ \emph{mit} \param{bind interfaces only = yes}:
+
+\begin{verbatim}
+vlendec@server:~ > netstat -natu
+Active Internet connections (servers and established)
+Proto Recv-Q Send-Q Local Address Foreign Address State
+
+tcp 0 0 192.168.42.1:139 0.0.0.0:* LISTEN
+
+vlendec@server:~/ >
+\end{verbatim}
+
+ Mit \param{bind interfaces only = yes} wird ausschlie"slich an die
+ im Parameter \param{interfaces} referenzierte IP-Adresse gebunden,
+ so da"s sich mehrere \prog{smbd}s nicht st"oren.
+
+
+\item[log file:] Hier wird das Logfile nur f"ur den \prog{smbd}
+ festgelegt. Es ist m"oglich, f"ur alle Samba-Instanzen ein
+ gemeinsames Logfile zu verwenden, das kann jedoch sehr schnell
+ un"ubersichtlich werden. Der \prog{nmbd} ignoriert diese
+ Einstellung. Sein Logfile mu"s "uber den Kommandozeilenparameter
+ \prog{-l} festgelegt werden.
+\item[lock directory:] Die verschiedenen D"amonen von Samba
+ kommunizieren "uber viele Datenbanken miteinander. Sie haben die
+ Endung \dateistyle{.tdb}, und ihr Verzeichnis ist durch das
+ \param{lock directory} festgelegt. Jede Instanz von Samba ben"otigt
+ ihr eigenes \param{lock directory}, da die Datenbanken jeweils nur
+ f"ur eine Samba-Instanz ausgelegt sind.
+\end{description}
+
+Diese Samba-Instanz kann "uber die folgende Startdatei kontrolliert werden:
+
+\begin{verbatim}
+#!/bin/sh
+DIR=/samba/goe
+case "$1" in
+ start)
+ echo "Starte Samba in $DIR"
+ /usr/local/samba/bin/smbd -D -s $DIR/smb.conf
+ /usr/local/samba/bin/nmbd -D -s $DIR/smb.conf -l $DIR/var
+ ;;
+ stop)
+ echo "Fahre Samba in $DIR herunter"
+ kill -TERM $(cat $DIR/locks/smbd.pid)
+ kill -TERM $(cat $DIR/locks/nmbd.pid)
+ ;;
+ *)
+ echo "Usage: $0 [start|stop]"
+ ;;
+esac
+\end{verbatim}
+
+Diese Installation von Samba ist so weit isoliert, da"s eine zweite
+ungest"ort gleichzeitig laufen kann. Um jetzt eine zweite Installation
+zu bauen, m"ussen folgende Dinge angepa"st werden:
+
+\begin{description}
+\item[workgroup:] Die Arbeitsgruppe mu"s nur in dem aktuell
+ verwendeten Beispiel der Local Master Browser ge"andert werden. Ein
+ zweites Samba kann selbstverst"andlich auch in der gleichen
+ Arbeitsgruppe sein.
+\item[netbios name:] Jede Instanz braucht zwingend ihren eigenen
+ Namen.
+\item[interfaces:] Jede Instanz ben"otigt ihre eigene IP-Adresse.
+\item[smb passwd file:] Falls jede der Instanzen ihre eigene
+ Benutzerdatenbank m"ochte, so mu"s die Datei \dateistyle{smbpasswd}
+ separat angelegt werden. Die Unix-Benutzerdatenbank teilen jedoch
+ alle Instanzen. Das hei"st, Benutzer \username{meier} auf der einen
+ Instanz wird immer der gleiche Unixbenutzer wie Benutzer
+ \username{meier} auf allen anderen Instanzen sein. Wenn man die
+ gleiche Benutzerdatenbank ben"otigt, kann man auf die gleiche
+ \dateistyle{smbpasswd} zugreifen. Empfehlenswerter ist es jedoch,
+ eine der beiden Instanzen als Dom"anencontroller einzurichten und
+ die andere als Dom"anenclient. Dann kann man v"ollig ohne
+ Unterbrechung die gesamte Konfiguration komplett auf einen anderen
+ Rechner migrieren, ohne da"s irgend etwas ge"andert werden m"u"ste.
+ Insbesondere f"ur Hochverf"ugbarkeitsl"osungen ist dies die
+ Konfiguration der Wahl.
+\item[log file:] Dies kann f"ur alle Instanzen gleich sein, meistens
+ wird man jedoch separate logfiles f"ur die einzelnen \prog{smbd}s
+ haben wollen.
+\item[lock directory:] Dieses mu"s zwingend f"ur jede Instanz separat
+ angelegt werden.
+\end{description}
+
+Als letztes ist die Variable DIR in der Startdatei anzupassen, und
+mehreren Instanzen von Samba steht nichts mehr im Wege.
+
+\section{Browsing im WAN -- schneller}
+
+Das im Kapitel \ref{browsing-im-wan} beschriebene Verfahren, mit dem
+"uber Subnetzgrenzen hinweg die Netzwerkumgebung gepflegt wird, ist
+au"serordentlich tr"age. Jede "Anderung mu"s vom Local Master Browser
+an den Domain Master Browser "ubergeben werden und von dort aus wieder
+an die anderen Local Master Browser zur"uck. Bis diese "Anderung beim
+Client ankommt, kann es sehr lange dauern.
+
+Zudem ist bei einem komplexen Setup die Zahl der beteiligten Rechner
+sehr hoch. Als Beispiel sei ein Netz auf 4 Subnetze verteilt. Jeder
+Mitarbeiter ist einer von 5 verschiedenen Arbeitsgruppen zugeteilt.
+Nun ist es gefordert, da"s die Mitarbeiter sich im Netz frei bewegen
+k"onnen m"ussen, da"s sie also unabh"angig von ihrem Standort im Netz
+immer ihre eigene Arbeitsgruppe vorfinden m"ussen. Dazu mu"s
+selbstverst"andlich ein WINS-Server eingerichtet sein. Damit das
+Browsing funktioniert, mu"s es zudem f"ur jede Arbeitsgruppe einen
+Domain Master Browser geben, der sich mit den jeweiligen Local Master
+Browsern abgleicht. Die Zahl der Local Master Browser ist hier recht
+hoch. Da jeder Mitarbeiter in jedem Subnetz seine Arbeitsgruppe sehen
+soll, mu"s es in jedem Subnetz f"ur jede Arbeitsgruppe einen eigenen
+Local Master Browser geben. Das hei"st, es werden 20 Local Master
+Browser ben"otigt.
+
+Um das folgende Beispiel zu verstehen, sollte man sich
+vergegenw"artigen, von welchen Rechnern welche Information bezogen
+wird, wenn man im Explorer die Netzwerkumgebung durchklickt. Man kann
+die Vorg"ange sehr gut nachvollziehen, wenn man an einer frisch
+angemeldeten Sitzung mit \prog{nbtstat -s} die aktiven
+NetBIOS-Sitzungen nach jedem Schritt nachvollzieht. Direkt nach dem
+anmelden sollte keine NetBIOS-Sitzung aktiv sein, mit jedem Klick in
+der Netzwerkumgebung kommt gegebenenfalls eine Verbindung hinzu.
+
+\begin{description}
+\item[Netzwerkumgebung:] Hier wird die eigene Arbeitsgruppe
+ dargestellt. Diese Information liefert der eigene Local Master
+ Browser. Dieser wird "uber eine Broadcast-Anfrage auf den Namen der
+ eigenen Arbeitsgruppe vom Typ \nbname{<\#1d>} herausgefunden.
+\item[Gesamtes Netzwerk:] Dieser Schritt liefert nur die lokal
+ installierten Clientsysteme. Wenn ein Novell-Client installiert ist,
+ wird hier das Novell-Netz neben dem Microsoft Windows-Netzwerk
+ angeboten, ansonsten nur das Microsoft-Windows Netzwerk. Da dies
+ rein lokal passiert, wird es keine zus"atzliche Verbindung geben.
+\item[Microsoft Windows Netzwerk:] Hier wird die Liste der
+ verf"ugbaren Arbeitsgruppen angezeigt. Diese Information liefert
+ ebenfalls der eigene Local Master Browser. Das kann man sich mit
+ einem \prog{smbclient -L} \emph{ lmb} verdeutlichen. Neben der Liste der
+ Freigaben und der Server liefert der LMB eine Liste der
+ Arbeitsgruppen, die er kennt. Zus"atzlich gibt er noch den jeweils
+ zust"andigen Local Master Browser heraus.
+\item[Arbeitsgruppe:] Diese Information liefert der jeweilige Local
+ Master Browser. Der eigene Local Master Browser hat im letzten
+ Schritt dessen Namen herausgegeben. Dessen IP-Adresse findet der
+ Client durch eine normale NetBIOS-Namensanfrage heraus.
+\item[Freigabeliste:] Ein Rechner ist f"ur seine Freigaben selbst
+ verantwortlich, nur der Rechner selbst kann die Liste der von ihm
+ freigegebenen Verzeichnisse herausgeben.
+\end{description}
+
+Gibt ein Rechner Informationen der genannten Art heraus, dann
+geschieht dies "uber eine vollst"andig aufgebaute SMB-Sitzung, die auf
+einer NetBIOS-Sitzung aufbaut. Kapitel \ref{smb-sitzungen} beschreibt
+dies im Detail. Wie auf Seite \pageref{protokolle-und-ports}
+dargestellt, nutzt der NetBIOS-Sitzungsdienst TCP "uber Port 139.
+
+\subsection{Trennung von \prog{nmbd} und \prog{smbd}}
+
+Die folgende Situation l"a"st sich erheblich einfacher und stabiler
+l"osen als mit einem Domain Master Browser. Das Beispielnetz besteht
+aus zwei Filialen einer Firma in G"ottinen und Heidelberg. F"ur das
+sp"ater vollst"andig aufgebaute Beispiel seien die beiden Netze
+192.168.1.0/24 in G"ottingen und 192.168.2.0/24 in Heidelberg
+vergeben.
+
+In jeder Filiale gibt es eine Arbeitsgruppe, also die Gruppen
+\nbname{GOETTINGEN} und \nbname{HEIDELBERG}. In G"ottingen stehen nur
+Rechner der Arbeitsgruppe \nbname{GOETTINGEN}, in Heidelberg nur
+Rechner der Arbeitsgruppen \nbname{HEIDELBERG}. Nun soll auf beiden
+Seiten jeweils die eigene und die entfernte Arbeitsgruppe sichtbar
+sein, um sich im Netz mit dem Explorer frei bewegen zu k"onnen. Dazu
+mu"s es sowohl in G"ottingen als auch in Heidelberg jeweils einen
+Local Master Browser f"ur \nbname{GOETTINGEN} und \nbname{HEIDELBERG}
+geben. Es gibt im Beispiel vier Local Master Browser, die hier auch
+bereits mit IP-Adressen versehen wurden:
+
+\vspace{\baselineskip}
+\begin{center}
+\begin{tabular}{|l|l|l|}\hline
+&\nbname{GOETTINGEN}&\nbname{HEIDELBERG}\\
+\hline
+Ort: G"ottingen & \nbname{GOE}, 192.168.1.1 & \nbname{GOEHD}, 192.168.1.2 \\
+Ort: Heidelberg & \nbname{HDGOE}, 192.168.2.2 & \nbname{HD}, 192.168.2.1 \\
+\hline
+\end{tabular}
+\end{center}
+\vspace{\baselineskip}
+
+%\begin{tabular}{|L|L|L|}\hline
+% \LCC
+% \tabulargray&\tabulargray&\tabulargray\\
+% &\tabularheader{\nbname{GOETTINGEN}}&\tabularheader{\nbname{HEIDELBERG}}\\
+% \hline
+% \ECC
+% &&\topseparation
+% Ort: G"ottingen & \nbname{GOE} & \nbname{GOEHD} \\
+% Ort: Heidelberg & \nbname{HDGOE} & \nbname{HD}
+% \bottomseparationline
+%\end{tabular}
+
+Die Idee f"ur die Konfiguration ist nun, die G"ottinger Anfragen an
+den Local Master Browser f"ur \nbname{HEIDELBERG} (Rechner
+\nbname{GOEHD}) direkt nach Heidelberg an den Rechner \nbname{HD}
+umzuleiten. In G"ottingen mu"s nur ein \prog{nmbd} behaupten, er sei
+Local Master Browser f"ur die Arbeitsgruppe \nbname{HEIDELBERG}. Dies
+tut er, indem er auf UDP Port 137 die NetBIOS-Namensanfragen f"ur
+\nbname{HEIDELBERG\#1D} beantwortet. Der TCP-Port 139 auf dem Rechner
+\nbname{GOEHD} in G"ottingen wird dann an den echten Local Master
+Browser \nbname{HD} weitergeleitet.
+
+Das Weiterleiten von TCP Port 139 auf dem Rechner \nbname{GOEHD} an
+Port 139 des Rechners \nbname{HD} kann unterschiedlich geschehen.
+
+\setlength{\unitlength}{4144sp}%
+%
+\begingroup\makeatletter\ifx\SetFigFont\undefined%
+\gdef\SetFigFont#1#2#3#4#5{%
+ \reset@font\fontsize{#1}{#2pt}%
+ \fontfamily{#3}\fontseries{#4}\fontshape{#5}%
+ \selectfont}%
+\fi\endgroup%
+\begin{picture}(5019,4611)(1789,-4483)
+\thinlines
+{\color[rgb]{0,0,0}\put(1936,-1051){\framebox(945,405){}}}%
+{\color[rgb]{0,0,0}\put(2386,-646){\line( 0, 1){405}}}%
+{\color[rgb]{0,0,0}\put(3286,-1051){\framebox(945,405){}}}%
+{\color[rgb]{0,0,0}\put(3736,-646){\line( 0, 1){405}}}%
+{\color[rgb]{0,0,0}\put(4861,-1051){\framebox(945,405){}}}%
+{\color[rgb]{0,0,0}\put(5311,-646){\line( 0, 1){405}}}%
+{\color[rgb]{0,0,0}\put(4861,-3166){\framebox(945,405){}}}%
+{\color[rgb]{0,0,0}\put(5311,-2761){\line( 0, 1){405}}}%
+{\color[rgb]{0,0,0}\put(3826,-1276){\framebox(405,225){}}}%
+\put(3916,-1231){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}139}%
+}}}
+{\color[rgb]{0,0,0}\put(4771,-4471){\framebox(405,225){}}}%
+\put(4861,-4426){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}139}%
+}}}
+{\color[rgb]{0,0,0}\put(4231,-4246){\framebox(945,405){}}}%
+{\color[rgb]{0,0,0}\put(4681,-3841){\line( 0, 1){405}}}%
+{\color[rgb]{0,0,0}\put(5401,-4246){\framebox(945,405){}}}%
+{\color[rgb]{0,0,0}\put(5851,-3841){\line( 0, 1){405}}}%
+{\color[rgb]{0,0,0}\put(1801,-241){\line( 1, 0){4050}}}%
+{\color[rgb]{0,0,0}\put(5311,-2671){\line( 0, 1){1620}}}%
+{\color[rgb]{0,0,0}\put(5311,-3166){\line( 0,-1){270}}}%
+{\color[rgb]{0,0,0}\put(4231,-1141){\line( 3, 1){945}}\put(5176,-826){\line( 0,-1){2205}}
+\put(5176,-3031){\line(-1,-5){242.308}}}%
+{\color[rgb]{0,0,0}\put(3691,-3436){\line( 1, 0){3105}}}%
+\put(2071,-871){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}GOE}%
+}}}
+\put(3466,-871){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}GOEHD}%
+}}}
+\put(4366,-4111){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}HD}%
+}}}
+\put(5581,-4111){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}HDGOE}%
+}}}
+\put(2386,-16){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}Goettingen}%
+}}}
+\put(5941,-3301){\makebox(0,0)[lb]{\smash{\SetFigFont{12}{14.4}{\rmdefault}{\mddefault}{\updefault}{\color[rgb]{0,0,0}Heidelberg}%
+}}}
+\end{picture}
+
+\subsection{Konfiguration}
+
+Als Beispiel soll hier die vollst"andige Konfiguration am Standort
+G"ottingen mit beiden Local Master Browsern beschrieben werden, die am
+Standort Heidelberg kann dann spiegelverkehrt aufgesetzt werden.
+
+Der Local Master Browser in G"ottingen hat die beiden IP-Adressen
+192.168.1.1 (Interface eth0) f"ur den LMB der Arbeitsgruppe
+\nbname{GOETTINGEN} und 192.168.1.2 (Interface eth0:1) f"ur die
+Arbeitsgruppe \nbname{HEIDELBERG}. Die Interface-Bezeichnungen sind
+hier Linux-spezifisch. Andere Unix-Versionen vergeben virtuelle
+IP-Adressen m"oglicherweise anders. Die beiden virtuellen Sambaserver
+werden mit ihren Konfigurationen in den Verzeichnissen
+\dateistyle{/samba/goe} und \dateistyle{/samba/goehd} abgelegt.
+
+Es m"ussen nun zwei Dateien \dateistyle{smb.conf} erstellt werden,
+f"ur jeden Local Master Browser eine. F"ur die Arbeitsgruppe
+\nbname{GOETTINGEN} kann direkt die \dateistyle{smb.conf} von Seite
+\pageref{smbconf-goe} verwendet werden. Nur die Zeile \prog{interfaces
+ =} mu"s angepa"st werden, so da"s sich die folgende
+\dateistyle{/samba/goe/smb.conf} ergibt:
+
+\begin{verbatim}
+; /samba/goe/smb.conf
+[global]
+workgroup = goettingen
+netbios name = goe
+interfaces = eth0
+bind interfaces only = yes
+encrypt passwords = yes
+smb passwd file = /samba/goe/smbpasswd
+log file = /samba/goe/var/log.smb
+lock directory = /samba/goe/locks
+os level = 100
+preferred master = yes
+\end{verbatim}
+
+Entsprechend ist die Datei \dateistyle{/samba/goehd/smb.conf}
+aufgebaut. Um der K"urze willen sind s"amtliche Einstellungen, die
+ausschlie"slich den \prog{smbd} betreffen, weggelassen worden. In
+G"ottingen soll f"ur die Arbeitsgruppe \nbname{HEIDELBERG} kein
+\prog{smbd} gestartet werden, daf"ur ist der \prog{smbd} auf dem
+Rechner \nbname{HDGOE} in Heidelberg zust"andig.
+
+\begin{verbatim}
+; /samba/goehd/smb.conf
+[global]
+workgroup = heidelberg
+netbios name = goehd
+interfaces = eth0:1
+bind interfaces only = yes
+lock directory = /samba/goe/locks
+os level = 100
+preferred master = yes
+\end{verbatim}
+
+Die Startdatei f"ur die Local Master Browser kann folgenderma"sen
+aussehen. Es werden drei Prozesse gestartet, ein vollst"andiges Samba
+f"ur den Rechner \nbname{GOE} und nur den \prog{nmbd} f"ur
+\prog{GOEHD}.
+
+\begin{verbatim}
+#!/bin/sh
+SMBD=/usr/local/samba/bin/smbd
+NMBD=/usr/local/samba/bin/nmbd
+case "$1" in
+ start)
+ echo "Starte Samba"
+ $SMBD -D -s /samba/goe/smb.conf
+ $NMBD -D -s /samba/goe/smb.conf
+ $NNBD -D -s /samba/goehd/smb.conf -l /samba/goehd/var
+ ;;
+ stop)
+ echo "Fahre Samba herunter"
+ kill -TERM $(cat /samba/goe/locks/smbd.pid)
+ kill -TERM $(cat /samba/goe/locks/nmbd.pid)
+ kill -TERM $(cat /samba/goehd/locks/nmbd.pid)
+ ;;
+ *)
+ echo "Usage: $0 [start|stop]"
+ ;;
+esac
+\end{verbatim}
+
+Die Weiterleitung des TCP-Ports 139 von der IP-Adresse 192.168.1.2 in
+G"ottingen an die Adresse 192.168.2.1 Port 139 in Heidelberg kann mit
+unterschiedlichen Methoden geschehen. Die einfachste Methode mit dem
+Programm \prog{netcat} und dem \prog{inetd} funktioniert hier leider
+nicht, da dem \prog{inetd} leider nicht gesagt werden kann, da"s er
+bitte nur an ein spezielles Interfaces binden soll. G"abe es f"ur den
+Rechner \nbname{GOEHD} eine eigene Maschine, k"onnte man den
+\prog{inetd} jedoch problemlos verwenden. Die Zeile
+
+\begin{verbatim}
+netbios-ssn stream tcp nowait nobody /usr/bin/netcat netcat 192.168.2.1 139
+\end{verbatim}
+
+in der \dateistyle{/etc/inetd.conf} zusammen mit
+
+\begin{verbatim}
+netbios-ssn 139/tcp
+\end{verbatim}
+
+in der \prog{/etc/services} leiten eingehende TCP-Verbindungen auf
+Port 139 zum Port 139 des Rechners 192.168.2.1 weiter.
+
+Die zweite M"oglichkeit der Portweiterleitung bietet das Programm
+\prog{rinetd}. Der \prog{rinetd} ist f"ur genau diesen Zweck
+geschaffen worden und ist bei SuSE-Linux als fertiges Paket
+mitgeliefert. Im Gegensatz zum \prog{inetd} kann der \prog{rinetd} an
+spezielle Interfaces binden, so da"s sein Einsatz auch mit virtuellen
+Sambaservern m"oglich ist. Der \prog{rinetd} wird "uber die Datei
+\prog{/etc/rinetd.conf} konfiguriert. Die notwendige Datei besteht nur
+aus einer einzigen Zeile:
+
+\begin{verbatim}
+192.168.1.2 139 192.168.2.1
+\end{verbatim}
+
+Alternative drei besteht beim Einsatz des \prog{xinetd}, der den
+\prog{inetd} vollst"andig ersetzt und erheblich leistungsf"ahiger ist.
+Der \prog{xinetd} beherrscht einerseits das Binden an einzelne
+Interfaces, andererseits kennt er bereits die M"oglichkeit,
+TCP-Verbindungen weiterzuleiten. Der Abschnitt in der
+Konfigurationsdatei \dateistyle{/etc/xinetd.conf} k"onnte
+beispielsweise so aussehen\todo{CHECK}:
+
+\begin{verbatim}
+service goehd
+{
+ socket_type = stream
+ protocol = tcp
+ wait = no
+ port = 139
+ redirect = 192.168.2.1 139
+ bind = 192.168.1.2
+}
+\end{verbatim}
+
+F"ur welche der Alternativen man sich entscheidet, h"angt von der
+Umgebung ab. Setzt man virtuelle Server ein, f"allt der \prog{inetd}
+aus. Die Entscheidung zwischen \prog{rinetd} und \prog{xinetd} wird
+vermutlich danach fallen, ob der eventuell vorhandene \prog{inetd}
+abgel"ost werden soll. Die Kombination von \prog{inetd} und virtuellen
+Servern l"a"st nur die Wahl, den \prog{rinetd} einzusetzen. Wird der
+\prog{xinetd} bereits verwendet, sollte man ihn selbstverst"andlich
+auch f"ur die Portweiterleitung nutzen.
+
+\section{Einfache Freigaben}
+
+Warum setzt man Samba "uberhaupt ein? Einer der wichtigsten Dienste
+von Samba ist, Festplattenbereiche f"ur Clients zur Verf"ugung zu
+stellen. Damit ein Client Plattenplatz eines Servers erreichen kann,
+mu"s man eine sogenannte \emph{Freigabe} erstellen.
+
+Beispielsweise m"ochte man den Inhalt des Unix-CDROM-Laufwerks an
+Clients exportieren. Das Laufwerk sei unter \dateistyle{/cdrom}
+eingebunden, und soll f"ur Clients unter
+\nbname{\textbackslash{}\textbackslash{}servername\textbackslash{}cd}
+erreichbar sein. Dazu mu"s man in der \dateistyle{smb.conf} einen
+neuen Abschnitt einleiten, der den Namen \param{[cd]} tr"agt. Damit
+wird eine Freigabe eingeleitet, die im Netz unter dem Namen
+\nbname{cd} zu sehen ist.
+
+Das folgende Beispiel gibt genau dieses Verzeichnis frei. Dabei ist
+zus"atzlich die Zugriffskontrolle so angelegt, da"s wirklich
+\textbf{jeder} darauf zugreifen kann. Wenn Sie irgend eine Art von
+sch"utzenswerten Daten auf der exportierten CD haben, sollten Sie sich
+auf jeden Fall das Kapitel \ref{freigaberechte} zu Rechten an
+Freigaben und das Kapitel \ref{smb-sitzungen} ansehen, um die Freigabe
+sinnvoll sch"utzen zu k"onnen.
+
+\begin{verbatim}
+[global]
+workgroup = arbeitsgruppe
+interfaces = <IP-Adresse>/<Netzmaske>
+security = share
+encrypt passwords = yes
+
+[cd]
+path = /cdrom
+guest ok = yes
+\end{verbatim}
+
+
+\section{SMB-Sitzungen}
+\label{smb-sitzungen}
+
+Sobald ein Rechner Freigaben im Netz zur Verf"ugung stellt, k"onnen
+Clients darauf zugreifen. Bevor ein Client tats"achlich auf eine
+Freigabe zugreifen kann, werden sechs Schritte durchlaufen. Diese
+sechs Schritte im Detail zu verstehen, ist f"ur die Konfiguration
+einfacher Server nicht wirklich notwendig. Sobald es aber darum geht,
+Fehlerdiagnose zu betreiben, ist das Wissen um die genaue
+Fehlerursache sehr wertvoll. Die genaue Stelle, an der eine
+Freigabeverbindung scheitert, kann bei der Fehlersuche gute Hinweise
+geben.
+
+\subsection{NetBIOS-Namensaufl"osung}
+
+Ein Benutzer an einem Client gibt den Namen des Servers mit
+unterschiedlichen Methoden an. Ein typischer Weg geht "uber die
+Netzwerkumgebung "uber einen Doppelklick auf den Rechner. Das
+Erscheinen in der Netzwerkumgebung ist jedoch nicht notwendig, da ein
+Client auch auf der Kommandozeile "uber ein
+
+\begin{verbatim}
+net use h: \\server\freigabe
+\end{verbatim}
+
+\noindent das Laufwerk H verbinden kann. Genauso kann im Explorer durch den
+Men"upunkt "`Netzwerklaufwerk verbinden"' eine direkte Verbindung
+ge"offnet werden. Ein weiterer Weg ist "uber Men"upunkt "`Ausf"uhren"'
+im Startmen"u von Windows 95. Wenn man dort \verb|\\server| angibt,
+bekommt man die Liste der Freigaben des Servers angezeigt,
+unabh"angig, in welcher Arbeitsgruppe sich der Server befindet.
+
+\subsection{TCP-Verbindung}
+
+Wenn die IP-Adresse klar ist, wird eine TCP-Verbindung zu Port 139 des
+Servers aufgebaut. Um vorhandene TCP-Verbindungen anzuzeigen, gibt es
+sowohl auf Unix- als auch auf Windowsrechnern das Werkzeug
+\prog{netstat}.
+
+Ob die TCP-Verbindung klappt, pr"uft man am besten mit
+
+\begin{verbatim}
+telnet <ip> 139
+\end{verbatim}
+
+\noindent und einem Test mit \prog{netstat}, ob die Verbindung
+im Zustand \prog{ESTABLISHED} ist.
+
+\subsection{NetBIOS-Sitzung}
+
+Auf einem Serverrechner arbeiten unter Umst"anden mehrere
+Applikationen, die Namen f"ur sich reserviert haben. Diese sind alle
+unter der IP-Adresse des Rechners und dem TCP-Protokoll auf Port 139
+erreichbar. Anhand des TCP-Verbindungsaufbaus ist nicht klar, welche
+Serverapplikation angesprochen werden soll. Die Unterscheidung wird
+durch den Servernamen getroffen, der in der TCP-Verbindung als erstes
+"ubertragen wird.
+
+Da"s der Servername "ubertragen wird, kann man ganz einfach mit Hilfe
+des Programms \prog{smbclient} sehen. Man versucht, sich die Liste der
+Freigaben eines realen Windowsrechners geben zu lassen, indem man
+folgendes aufruft:
+
+\verb|smbclient -L smallwin|
+
+Damit wird zun"achst eine NetBIOS-Namensanfrage ausgel"ost, und dann
+eine Verbindung zum entsprechenden Server ausgel"ost. \prog{smbclient}
+hat jedoch die M"oglichkeit, einen Server unter einem anderen Namen
+anzusprechen, indem man
+
+\verb|smbclient -L test -I ip-adresse|
+
+\noindent
+eingibt. \prog{smbclient} wird zun"achst versuchen, eine Verbindung
+zum NetBIOS-Namen \texttt{test} aufzubauen, und zwar ohne da"s eine
+NetBIOS-Namensanfrage ausgel"ost wird. Stattdessen wird die angegebene
+IP-Adresse auf Port 139 direkt angesprochen, und der Name
+\texttt{test} als Servername angegeben. Windows merkt, da"s das nicht
+stimmen kann und verweigert den Verbindungsaufbau mit einer
+Fehlermeldung. Erst im zweiten Versuch wird es \prog{smbclient}
+gelingen, eine Verbindung aufzubauen, da diese Verbindung zum
+allgemeinen Namen \texttt{*smbserver}\footnote{Das SMB-Protokoll wurde
+ als Antwort auf das WebNFS von SUN in Common Internet File System
+ umbenannt. Im Gegensatz zur Firma SUN, die tats"achlich das
+ NFS-Protokoll verbessert hat, hat sich Microsoft die Arbeit
+ einfacher gemacht. Der Name \texttt{*SMBSERVER} ist der einzige
+ echte Unterschied, der CIFS von seinem Urvater SMB unterscheidet.
+ Mit Windows 2000 werden diese NetBIOS-Namen beim Verbindungsaufbau
+ gar komplett unterschlagen. Daf"ur war es aber notwendig, einen
+ weiteren Port zu reservieren, und zwar Port 445.} aufgebaut wird.
+
+Auch der Clientname wird in der Verbindung "ubergeben. Dies testet man
+am besten mit
+
+\verb|smbclient //win/c\$ -n blafasel|
+
+\noindent und schaut sich
+die Verbindungstabelle auf der Windowsmaschine mit \verb|nbtstat -s|
+an.
+
+Mit dem "ubergebenen Servernamen kann man sehr nette Tricks anstellen.
+Man stelle sich vor, da"s einige Freigaben nur f"ur bestimmte
+Clientrechner sichtbar sein sollen. Dies ist mit Bordmitteln von Samba
+so nicht m"oglich. Man kann zwar mit dem Parameter \param{browseable}
+festlegen, ob bestimmte Freigaben in der Netzwerkumgebung erscheinen.
+Dieser Parameter hat aber zwei Nachteile. Erstens sind die Freigaben nur
+unsichtbar geworden, darauf zugreifen kann man immer noch. Zweitens kann man
+Freigaben nur f"ur alle Rechner verstecken oder freigeben.
+
+Samba bietet die Option, unter zwei oder mehreren verschiedenen Namen
+in der Netzwerkumgebung zu erscheinen. Mit dem Parameter
+\param{netbios name} gibt man einen Namen f"ur den Server an.
+Zus"atzliche Namen kann man mit \param{netbios aliases} vergeben. Mit
+
+\begin{verbatim}
+netbios name = fichte
+netbios aliases = birke eiche kiefer buche
+\end{verbatim}
+
+\noindent
+handelt man sich einen ganzen Wald in der Netzwerkumgebung ein. Klickt
+man auf die einzelnen Server, sieht man "uberall die gleichen
+Freigaben und Zugriffsrechte. Nun kann man f"ur jeden dieser
+virtuellen Rechner eine eigene Konfigurationsdatei anlegen.
+Beispielsweise kann man diese Dateien \dateistyle{/etc/smb.conf.birke},
+\dateistyle{/etc/smb.conf.eiche} und so weiter nennen. Die Datei
+\dateistyle{/etc/smb.conf} ist f"ur den Rechner \nbname{fichte} zust"andig
+und enth"alt neben den Einstellungen f"ur \nbname{fichte} den
+Parameter
+
+\param{config file = /etc/smb.conf.\%L}
+
+\noindent Dabei steht
+\param{\%L} f"ur den Servernamen, unter dem Samba angesprochen wird.
+Wenn es eine passende Datei gibt, dann bewirkt der Parameter
+\param{config file}, da"s die komplette Konfiguration neu eingelesen
+wird. Existiert keine passende Datei, so wird der Parameter einfach
+ignoriert. Um nun den Zugriff nur f"ur einzelne Clients zu erlauben,
+kann bei den einzelnen virtuellen Servern mit den Parametern
+\param{hosts allow} und \param{hosts deny} der Zugriff geregelt
+werden.
+
+\subsection{Negotiate Protocol}
+
+Die NetBIOS-Sitzung ist nun aufgebaut, und es k"onnen Daten
+"ubermittelt werden. Innerhalb dieser NetBIOS-Sitzung wird eine
+SMB-Sitzung schrittweise aufgebaut. SMB ist ein Protokoll, bei dem im
+Prinzip der Client jede Aktion durch eine Anfrage anst"o"st, und der
+Server diese beantwortet\footnote{Im Prinzip deshalb, da mit Oplocks
+ auch der Server von sich aus aktiv werden kann.}.
+
+SMB (Server Message Block) ist ein gewachsenes Protokoll. Es ist mit
+den F"ahigkeiten der Betriebssysteme gewachsen, die damit arbeiten.
+Zun"achst ist es entstanden, um die Dateisystemaufrufe der MS-DOS
+Systemschnittstelle INT 0x21 auf das Netz zu verlagern. Mit einer
+gewissen Weitsicht hat man jedoch vorausgesehen, da"s die Entwicklung
+nicht bei MS-DOS stehen bleiben w"urde, sondern sich die
+Dateisystemaufrufe "andern w"urden. Man hat im Protokoll also eine
+M"oglichkeit vorgesehen, mit der unterschiedliche Protokollvarianten
+ausgehandelt werden k"onnen. Die unterschiedlichen Protokolle
+orientieren sich immer an den F"ahigkeiten der jeweiligen
+Betriebssysteme. Beispielsweise wurde mit dem LAN Manager, der eine
+Benutzerverwaltung besitzt, das Konzept des Benutzers im Protokoll
+aufgenommen. OS/2 hat ein recht weitgehendes Konzept der
+Druckerverwaltung, das entsprechend mit Protokollerweiterungen bedacht
+wurde. Sogar f"ur XENIX gibt es einen eigenen Protokolldialekt, der
+das Unix-Zugriffsrechtekonzept im SMB-Protokoll abbildet. Diese
+Protokollvariante beherrscht nur leider kein moderner Client. Mit
+Ausnahme des ausgestorbenen XENIX-Dialektes lassen sich die Protokolle
+gut in eine Hierarchie einordnen. Sp"atere Protokolle beherrschen alle
+Aspekte der vorherigen Varianten.
+
+Im Jahr 1996 wurde SMB in CIFS umbenannt. CIFS ist die Abk"urzung f"ur
+Common Internet File System. Warum diese neue Bezeichnung, und warum
+zu diesem Zeitpunkt? Kurz vorher hatte Sun Microsystems sein Protokoll
+NFS angepa"st, um "uber Weitverkehrsstrecken besser benutzbar zu sein.
+NFS setzt voraus, da"s zwischen Client und Server nur sehr kurze
+Pingzeiten vorliegen. F"ur jeden Dateizugriff sind mehrere Anfragen
+notwendig. Auch wenn jede Anfrage nur sehr kurz ist und wenig
+Bandbreite verbraucht, mu"s doch jedesmal die Antwort des Servers
+abgewartet werden. Hohe Pingzeiten belasten so die Leistung des NFS
+erheblich. Sun hat das NFS so ver"andert, da"s die Anzahl der Anfragen
+erheblich reduziert wurde. Das Ergebnis nannten sie WebNFS und haben
+um dieses "`neue"' Protokoll eine gro"se Marketinginitiative
+gestartet. Kurz vorher hatte Microsoft die Kr"ote namens Java von SUN
+schlucken m"ussen und wollte sich nicht ein zweites Mal von SUN eine
+Technologie aufzwingen lassen. Daher hat man einfach das hauseigene
+Datei- und Druckprotokoll so umbenannt, da"s das Wort Internet im
+Namen vorkam. Im Gegensatz zu SUN hat sich Microsoft bis auf ein
+kleines Detail\footnote{Dies Detail hat nichts mit SMB, sondern mit
+ NetBIOS zu tun. SMB-Server wollen im NetBIOS-Sitzungsaufbau mit
+ ihrem eigenen NetBIOS-Namen angesprochen werden. Ein CIFS-Server im
+ Internet ist aber nur unter seinem DNS-Namen oder seiner IP-Adresse
+ bekannt. Der NetBIOS-Name ist normalerweise nicht publiziert. Daher
+ lauschen alle CIFS-Server auf den eigentlich illegalen NetBIOS-Namen
+ \nbname{*SMBSERVER}. Das ist der ganze Unterschied zwischen SMB und
+ CIFS.} nicht die M"uhe gemacht, das Protokoll wirklich in Richtung
+Internet zu optimieren.
+
+Die erste Anfrage, die der Client an den Server schickt, ist ein
+\defin{Negotiate Protocol Request}. In dieser Anfrage schickt der
+Client an den Server eine Liste der Protokollvarianten, die er
+beherrscht. Der Server w"ahlt nun aus dieser Liste der Protokolle eins
+aus, und schickt eine entsprechende Antwort zur"uck. Die verschiedenen
+Protokolle bauen aufeinander auf. Daher kann man mit dem Parameter
+\param{protocol} das h"ochste Protokoll festlegen, mit dem Samba
+arbeiten soll.
+
+In der Antwort auf diese erste Anfrage werden zwei weitere
+Einstellungen verschickt, die Teile des weiteren Ablaufs festlegen.
+
+Der Server entscheidet, ob er die Zugriffssteuerung auf Benutzer- oder
+auf Freigabeebene regeln m"ochte. Damit wird festgelegt, zu welchem
+Zeitpunkt der Benutzer ein Pa"swort liefern mu"s. Entweder kann es
+beim direkt folgenden \defin{Session Setup} erfolgen, oder erst beim
+\defin{Tree Connect} danach.
+
+Der Parameter \param{security} legt fest, welche Art der
+Zugriffssteuerung gew"ahlt wurde. Mit \param{security = share} wird
+die Freigabeebene eingestellt, \param{security = user} legt die
+Clients auf die Benutzerebene fest.
+
+Sichtbar wird diese Unterscheidung in der Windowswelt nur bei Windows
+95 und Windows 98. Diese Betriebssysteme beherrschen zun"achst einmal
+nur die Zugriffssteuerung auf Freigabeebene, da sie nicht "uber eine
+Benutzerdatenbank verf"ugen. Es ist nicht m"oglich, einzelnen
+Benutzern den Zugriff auf Freigaben zu gew"ahren oder zu
+verweigern. Um trotzdem benutzerbasiert Zugriffssteuerung zu
+erm"oglichen, mu"s ein Server angegeben werden, der f"ur Windows die
+Benutzerdatenbank pflegt. Damit k"onnen Pa"sw"orter benutzerbasiert
+"uberpr"uft werden.
+
+Weiterhin gibt der Server dem Client vor, ob Klartextpa"sw"orter
+verwendet werden sollen, oder ob die Pa"sw"orter verschl"usselt
+werden. Wenn der Server festlegt, da"s verschl"usselte Pa"sw"orter
+verwendet werden, wird zus"atzlich die Herausforderung f"ur das
+\defin{Challenge Response} Verfahren mitgeschickt.
+
+Die Entscheidung "uber Klartextpa"sw"orter mu"s also getroffen werden,
+ohne da"s der Server den Benutzernamen, der sich anmelden will,
+kennt. Es ist also nicht m"oglich, f"ur einige Benutzer
+Klartextpa"sw"orter und f"ur andere Benutzer verschl"usselte
+Pa"sw"orter zu verwenden.
+
+\subsection{Session Setup}
+
+Nachdem die Protokollversion ausgehandelt ist, wird vom Client ein
+\defin{Session Setup} verschickt. In diesem Session Setup schickt der
+Client seinen Benutzernamen an den Server. Sofern dieser
+\param{security = user} verlangt hat, wird an dieser Stelle das
+Pa"swort mitgeschickt. Damit ist der Server in der Lage, die
+Identit"at des Benutzers festzustellen. Wenn \param{security = share}
+vereinbart wurde, dann ignoriert der Server ein hier eventuell
+mitgeschicktes Pa"swort.
+
+\subsection{Tree Connect}
+
+Als letztes legt der Client fest, welche Freigabe er ansprechen will.
+Der entsprechende Aufruf hei"st \defin{Tree Connect}. Sofern
+\param{security = share} vereinbart wurde, wird an dieser Stelle das
+Pa"swort "uberpr"uft. Der Benutzername kann in diesem Fall nicht zur
+Zugriffsregelung verwendet werden. Dieser wurde unter Umst"anden gar
+nicht "ubermittelt, da der Client den Session Setup komplett auslassen
+darf. Andererseits hat er bei einem durchgef"uhrten Session Setup kein
+Pa"swort angeben m"ussen, anhand dessen die Identit"at des Benutzers
+zweifelsfrei h"atte festgestellt werden k"onnen.
+
+\section{Rechte an Freigaben}
+\label{freigaberechte}
+
+Bei Windows NT kann man mit zwei unterschiedlichen Mechanismen Rechte
+vergeben. An einer Freigabe kann man "uber Schreib- und Lesezugriff
+entscheiden. Innerhalb des Dateisystems kann man detailiert Rechte
+vergeben.
+
+Ist bei Samba \param{security = user} gesetzt, so hat der Server die
+M"oglichkeit, anhand des angemeldeten Benutzers Zugriffsrechte zu
+vergeben oder zu verweigern. Wenn bei der Einstellung einer Freigabe
+keine Parameter f"ur die Zugriffsrechte gesetzt sind, hat jeder
+korrekt angemeldete Benutzer Leserecht. Man kann auch Gastbenutzern
+Leserecht geben, indem man \param{guest ok = yes} setzt.
+
+Mit den Optionen zur Rechtevergabe an Freigaben hat man die
+M"oglichkeit, einzelnen Benutzern und ganzen Unixgruppen Rechte zu
+geben oder zu nehmen. Die M"oglichkeiten sind hier deutlich weitergehend
+als die Semantik, die Unix mit den Rechtemasken f"ur den
+Dateibesitzer, die besitzende Gruppe und den Rest der Welt bereit
+stellt. Von den m"oglichen Anwendungen sollen hier drei h"aufig
+ben"otigte F"alle dargestellt werden:
+
+\begin{itemize}
+\item {\bf \emph{Alle} Benutzer haben gleichen Zugriff}
+
+\begin{verbatim}
+[projekt]
+path = /data/projekt
+\end{verbatim}
+
+Bei dieser Freigabe bekommen alle Benutzer, die sich mit Namen und
+Pa"swort am Server angemeldet haben, \emph{Leserecht} auf die
+Freigabe. Schreibrecht vergibt man, indem man den Parameter
+\param{writeable = yes} setzt:
+
+\begin{verbatim}
+[projekt]
+ path = /data/projekt
+ writeable = yes
+\end{verbatim}
+
+\item {\bf \emph{Einige} Benutzer haben gleichen Zugriff}
+
+Will man den Zugriff auf einige Benutzer einschr"anken, erstellt man
+eine Liste \param{valid users} auf:
+
+\begin{verbatim}
+[projekt]
+path = /data/projekt
+valid users = mueller, meier
+\end{verbatim}
+
+Zu dieser Freigabe haben die Benutzer mueller und meier
+Lesezugriff. Sollen diese Benutzer Schreibzugriff bekommen, so ist wie
+im vorangegangenen Beispiel der Parameter \param{writeable = yes} zu
+setzen:
+
+\begin{verbatim}
+[projekt]
+path = /data/projekt
+valid users = mueller, meier
+writeable = yes
+\end{verbatim}
+
+F"ur den Parameter \param{valid users} spielt der Benutzer root keine
+besondere Rolle. Das hei"st, da"s er auf die Freigabe \param{projekt}
+keinen Zugriff hat. Soll er Zugriff bekommen, mu"s man ihn wie jeden
+anderen Benutzer in die Liste \param{valid users} mit aufnehmen.
+
+Der Parameter \param{valid users} gibt die M"oglichkeit, ganze
+Unixgruppen in den Zugriff mit aufzunehmen. Um dies zu erreichen, mu"s
+man das at-Zeichen voranstellen:
+
+\begin{verbatim}
+[projekt]
+path = /data/projekt
+valid users = root, @users
+writeable = yes
+\end{verbatim}
+
+Mit dieser Einstellung haben alle Benutzer, die in der Unixgruppe
+users sind, Schreibzugriff auf die Freigabe. Zus"atzlich kann der
+Benutzer root schreiben.
+
+\item {\bf Einige Benutzer haben Leserecht, andere Schreibrecht}
+
+Will man differenziert Rechte vergeben, so mu"s man s"amtliche
+Benutzer, die "uberhaupt Zugriff auf die Freigabe bekommen sollen, in
+die Liste \param{valid users} aufnehmen, und mit \param{writeable =
+no} nur Leserechte vergeben. Die Benutzer, die "uber diese
+Standardeinstellung hinaus Schreibrecht bekommen sollen, m"ussen in
+die \param{write list} aufgenommen werden.
+
+\begin{verbatim}
+[projekt]
+path = /data/projekt
+valid users = @users, @admins
+write list = @admins
+\end{verbatim}
+
+Mit diesen Einstellungen haben die Benutzer der Gruppe users
+Leserecht, und die Benutzer der Gruppe admins haben Schreibrecht.
+
+\end{itemize}
+
+\section{Zugriffsrechte im Dateisystem}
+
+Unter Windows NT gibt es zwei M"oglichkeiten, Netzzugriff auf Dateien
+zu kontrollieren. "Uber eine Freigabe kann ein Lese- oder ein
+Schreibrecht vergeben werden. Ist das freigegebene Dateisystem mit
+NTFS formatiert, k"onnen durch Access Control Lists im Dateisystem
+Rechte vergeben werden. Damit mu"s ein Benutzer sowohl durch die
+Freigabe- als auch durch die Dateisystemrechte zu einer Operation
+berechtigt sein.
+
+Auch bei Samba auf Unix gibt es zwei Stellen, an denen Zugriff auf
+Dateien und Verzeichnisse geregelt ist. Die im Kapitel
+\ref{freigaberechte} beschriebenen Zugriffsrechte beziehen sich
+ausschlie"slich auf die von Samba selbst vergebenen Rechte. Diese von
+Samba vergebenen Rechte k"onnen die darunter liegenden Unixrechte
+nicht erweitern. Das hei"st, Samba kann f"ur bestimmte Freigaben
+Schreibrecht vergeben. Der Benutzer, der zugreift, kann aber nur dann
+wirklich in den freigegebenen Dateien und Verzeichnissen schreiben,
+wenn er dies unter Unix ebenfalls darf. Diese Einschr"ankung durch
+Unixrechte ist ein wichtiges Prinzip von Samba: Im Dateisystem
+implementiert Samba keine eigenen Zugriffskontrollen, sondern
+verl"a"st sich auf die Unixmechanismen.
+
+Samba k"onnte theoretisch eine eigene Datenbank von Zugriffsrechten
+f"uhren. In dieser Datenbank k"onnte die vollst"andige NT-Semantik von
+Access Control Lists abgelegt und implementiert werden. Zwei Gr"unde
+sprechen gegen diesen Ansatz:
+
+\begin{itemize}
+\item Wenn Samba tats"achlich Dateisystemrechte implementieren w"urde,
+ w"aren die Entwickler daf"ur verantwortlich, da"s diese korrekt
+ eingehalten werden. Zugriffsrechte auf Dateien werden vom
+ Betriebssystem bereits hervorragend implementiert, warum sollte man
+ sich also die zus"atzliche Komplexit"at einhandeln?\footnote{Unter
+ Marketinggesichtspunkten kann es wichtig sein, vollst"andige
+ NT-Kompatibilit"at zu implementieren, die Samba mit dem
+ Unix-Rechtemodell bisher nicht bietet. Es existieren Patches, die
+ eine eigene ACL-Datenbank implementieren. Diese sind jedoch leider
+ momentan noch nicht frei verf"ugbar. Dies ist mit der GPL durchaus
+ m"oglich, da sie niemandem zug"anglich gemacht wurden. Es wird
+ jedoch in der Zukunft eine ver"offentlichte Version geben.}
+\item Sobald Samba eine eigene ACL-Datenbank implementiert, gilt diese
+ ausschlie"slich f"ur den Dateizugriff via SMB. Es ist nicht
+ m"oglich, Samba-ACL synchron mit dem Unix-Dateisystem zu halten,
+ wenn auch noch Zugriff von Unixprozessen aus erlaubt wird. Wenn sich
+ Verzeichnisb"aume "andern, ohne da"s Samba involviert ist, wie soll
+ Samba dann die ACLs korrekt anpassen?
+\end{itemize}
+
+Eng verwoben mit den Unix-Zugriffsrechten auf Dateien ist in der
+Implementation von Samba die Behandlung der DOS-Attribute. Diese
+Attribute sind Eigenschaften von Dateien, die es in dieser Form unter
+Unix nicht gibt. Viele Applikationen, die auf ein Netzwerklaufwerk
+zugreifen, setzen jedoch funktionierende Attribute voraus.
+Insbesondere das Archiv-Attribut wird von vielen Programmen verwendet.
+Insgesamt kennt DOS vier verschiedene Attribute, die f"ur Dateien
+vergeben werden k"onnen:
+
+\begin{description}
+\item[Read-Only] Der Inhalt dieser Datei kann nur gelesen, aber nicht
+ geschrieben werden. Die Datei kann nicht gel"oscht werden.
+\item[System] Diese Datei ist f"ur spezielle Betriebssystemzwecke
+ vorgesehen.
+\item[Hidden] Diese Datei wird mit dem Kommando 'DIR' nicht angezeigt.
+\item[Archiv] Das Archivbit wird bei jedem Schreibzugriff gesetzt.
+ Backupprogrammen ist es freigestellt, dieses Bit zur"uckzusetzen.
+ Damit kann eine inkrementelle Sicherung erm"oglicht werden.
+\end{description}
+
+Diese Bits k"onnen unter DOS von jedem Benutzer frei gesetzt und
+wieder zur"uckgesetzt werden. Das Schreibschutzbit ist also nicht als
+echter Zugriffschutz zu verstehen, sondern nur als kleine
+Hilfestellung gegen Fehlbedienungen.
+
+\subsection{Abbildung DOS-Attribute zu Unix-Rechten}
+
+Unix f"uhrt mit jeder Datei einen Satz von Zugriffsrechten mit. Diese
+sind aufgeteilt in drei Gruppen von Benutzern: Der Dateibesitzer, die
+besitzende Gruppe und alle anderen. Jeder Gruppe k"onnen drei
+Rechte zugeteilt werden: Lesen, Schreiben und Ausf"uhren.
+
+Unter DOS werden Ausf"uhrungsrechte nicht verwendet. Sie stehen f"ur
+Samba zur Verf"ugung, um die DOS-Attribute im Unix-Dateisystem
+abzubilden. Das Schreibschutzbit unter DOS hat mit dem Schreibrecht
+des Dateibesitzers unter Unix eine Entsprechung. Bis auf die Umsetzung
+des Schreibschutzbits kann die Umsetzung der Attribute unter Samba mit
+den entsprechenden Parametern \param{map <xxx>} gesteuert werden,
+wobei das Archivbit ohne Zusatzangabe umgesetzt wird, die anderen
+beiden Attribute nicht. Die Attributumsetzung erfolgt anhand der
+folgenden Tabelle:
+
+\[ \begin{tabular}{|l|l|c|l|l|}
+\hline
+DOS-Attribut & Unix-Recht & Maske & Parameter & Standard \\
+\hline\hline
+Schreibschutz & Schreibrecht Besitzer & 200 & - & immer \\
+\hline
+Archiv & Ausf"uhrung Besitzer & 100 & \param{map archive} & \param{yes} \\
+\hline
+System & Ausf"uhrung Gruppe & 010 & \param{map system} & \param{no} \\
+\hline
+Versteckt & Ausf"uhrung Andere & 001 & \param{map hidden} & \param{no} \\
+\hline
+\end{tabular} \]
+
+Samba mu"s nun diese beiden Dateiattribute ineinander "uberf"uhren.
+Samba mu"s neu erstellten Dateien Unixrechte zuordnen. Wird eine
+Datei neu erstellt, dann gibt der Client dem Server die DOS-Attribute
+mit, mit der er die Datei erstellt haben m"ochte. Daraus formt Samba
+einen Satz von Unix-Zugriffsrechten. Diese Rechte werden vom Parameter
+\param{create mask} eingeschr"ankt. Die Standardvorgabe f"ur die
+\param{create mask} ist gleich \param{744}, was der Rechtemaske
+\param{rwxr-{}-r-{}-} entspricht. Der Dateieigent"umer hat Schreib- und
+Leserecht, alle anderen haben reines Leserecht. Samba schr"ankt die
+Rechte ein, indem der gew"unschte Satz an Rechten mit einer logischen
+UND-Operation mit der \param{create mask} verkn"upft wird. Nur die
+Rechte, die in der \param{create mask} gesetzt sind, k"onnen
+m"oglicherweise in der neu erzeugten Datei auftauchen. In einem
+weiteren Schritt setzt Samba explizit gew"unschte Zugriffsrechte
+anhand des Parameters \param{force create mode}, dessen Standardwert
+auf \param{000} steht. Dies geschieht durch eine ODER-Verkn"upfung mit
+diesem Wert.
+
+Diese Zusammenh"ange werden an einem Beispiel deutlicher. Es kann
+gew"unscht sein, da"s auf neu erstellten Dateien nur der
+Dateibesitzer und die Gruppe Leserecht haben sollen. Der Rest der Welt
+soll diese Dateien nicht lesen k"onnen. Das wird dadurch erreicht,
+da"s man die \param{create mask = 740} setzt, also das Leserecht f"ur
+den Rest der Welt ausmaskiert. Es kann dar"uber hinaus gew"unscht
+sein, da"s die besitzende Gruppe ein Schreibrecht einger"aumt
+bekommt. Das kann man durch \param{force create mode = 020} erreichen.
+Tabellarisch dargestellt hei"st dies:
+
+\[ \begin{tabular}{|l|l||c|l|}
+\hline
+Wunsch & & & \texttt{rw-r-{}-r-{}-} \\
+\hline
+create mask & 740 & UND & \texttt{rw-r-{}-{}-{}-{}-} \\
+\hline
+\hline
+& & & \texttt{rw-r-{}-{}-{}-{}-} \\
+\hline
+force create mode & 020 & ODER & \texttt{-{}-{}-{}-w-{}-{}-{}-} \\
+\hline
+\hline
+Ergebnis & & & \texttt{rw-rw-{}-{}-{}-} \\
+\hline
+\end{tabular} \]
+
+Die Ausf"uhrungsrechte auf Dateien werden unter DOS nicht verwendet,
+sie k"onnen also verwendet werden, um DOS-Attribute im
+Unix-Dateisystem abzulegen. Ausf"uhrungsrechte auf Dateiverzeichnissen
+wirken sich jedoch auf das Verhalten von Samba aus, da durch sie der
+Zugriff zu den Verzeichnissen geregelt wird. Daher kann es
+w"unschenswert sein, da"s die Rechtezuweisung auf Dateien und
+Verzeichnissen unterschiedlich geregelt wird. Die Parameter
+\param{create mask} und \param{force create mode} wirken daher nur auf
+neu angelegte Dateien. F"ur Verzeichnisse sind die Parameter
+\param{directory mask} und \param{force directory mode}
+verantwortlich. Der Vorgabewert f"ur \param{directory mask} ist
+hierbei \param{755}, um den Zutritt f"ur die Gruppe und den Rest der
+Welt zu erm"oglichen, die Vorgabe f"ur \param{force directory mode}
+besetzt mit dem Wert \param{000} kein zus"atzliches Recht.
+
+\subsection{Beispiel: Ein Projektverzeichnis}
+
+H"aufig mu"s man einer Anzahl von Benutzern gemeinsamen Schreibzugriff
+auf eine Freigabe, beispielsweise auf die Freigabe \param{fibu},
+geben. Das Beispiel der Projektverzeichnisse wird noch mehrfach
+betrachtet werden. Es gibt mit Samba viele M"oglichkeiten der
+Realisation, die alle f"ur unterschiedliche Situation geeignet sind.
+
+Ein einfaches Projektverzeichnis l"a"st sich folgenderma"sen
+realisieren:
+
+\begin{verbatim}
+[fibu]
+ path = /data/fibu
+ writeable = yes
+ valid users = @fibu, mueller, meier
+\end{verbatim}
+
+Damit darf die Gruppe \username{fibu} das Recht, auf diese Freigabe
+schreibend zuzugreifen. \username{mueller} und \username{meier}, die
+nicht Mitglied der Finanzbuchhaltung sind, d"urfen ebenfalls
+schreiben. Damit problemloser gemeinsamer Zugriff m"oglich ist, mu"s
+die Rechtevergabe im Unix-Dateisystem geregelt werden. Dabei wird hier
+vorausgesetzt, da"s im Unix selbst nur die Benutzer der Gruppe
+\username{fibu} auf \dateistyle{/data/fibu} zugreifen sollen.
+\username{meier} und \username{mueller} sind \emph{nicht} Mitglieder
+der Gruppe \username{fibu}, sollen aber trotzdem schreiben k"onnen.
+F"ur sie mu"s eine Sonderregelung geschaffen werden, die sich mit
+Standard-Unixrechten nicht abbilden l"a"st. Dazu ben"otigt man die
+ACLs aus Kapitel \ref{acl}.
+
+Hat man keine ACLs zur Verf"ugung, gibt es eine sehr einfache
+M"oglichkeit, jegliche Probleme im gemeinsamen Dateizugriff zu
+vermeiden, ist der Parameter \param{force user}. Will man diesen
+Parameter anwenden, so sollte man f"ur diese Freigabe oder f"ur alle
+solchen Gruppenfreigaben einen separaten User anlegen, und diesem dann
+das freigegebene Verzeichnis "ubergeben:
+
+\begin{verbatim}
+root@delphin:~ > mkdir -p /data/fibu
+root@delphin:~ > useradd fibuuser
+root@delphin:~ > chown projektuser /data/fibu/
+root@delphin:~ > chmod 770 /data/fibu
+\end{verbatim}
+
+Die Freigabe sieht dann folgenderma"sen aus:
+
+\begin{verbatim}
+[fibu]
+ path = /data/fibu
+ writeable = yes
+ valid users = @fibu, mueller, meier
+ force user = fibuuser
+\end{verbatim}
+
+Die Zugriffskontrolle wird bei dieser Definition ganz normal anhand
+von \param{valid users} vorgenommen. Nur die dort erw"ahnten Benutzer
+bekommen Zugriff auf die Freigabe. \emph{Nachdem} der Zugriff gew"ahrt
+wurde, vergi"st Samba den Namen, mit dem sich der Benutzer angemeldet
+hat. Samba schaltet f"ur jegliche Zugriffe im Dateisystem in den
+Benutzer \username{fibuuser}. Man mu"s sich damit nicht mehr um
+gemeinsame Zugriffsrechte im Unix k"ummern, da man ohnehin nur unter
+einer einzigen Userid arbeitet. Man verliert jedoch die
+Nachvollziehbarkeit. Alle Dateien geh"oren \username{pcuser}. Dies
+wird insbesondere auch so im entsprechenden Dialog von Windows
+angezeigt.
+
+Mit etwas mehr Aufwand kann man es schaffen, den Dateibesitzer korrekt
+zu behalten und gleichzeitig gemeinsames Schreiben zu erm"oglichen.
+Das Verzeichnis \dateistyle{/data/fibu} selbst kann mit den
+korrekten Gruppenschreibrechten angelegt werden:
+
+\begin{verbatim}
+root@delphin:~ > mkdir -p /data/fibu
+root@delphin:~ > groupadd fibu
+root@delphin:~ > chgrp fibu /data/fibu/
+root@delphin:~ > chmod 770 /data/fibu
+\end{verbatim}
+
+Die Benutzer der Gruppe \username{fibu} k"onnen in diesem
+Verzeichnis einwandfrei Dateien anlegen und ihre eigenen Dateien auch
+"andern. Es gibt jedoch noch zwei Probleme.
+
+\begin{itemize}
+\item \username{mueller} und \username{meier} k"onnen nicht auf das
+ Verzeichnis zugreifen, da Unix ihnen den Zugriff verweigert.
+\item Die Benutzer aus der Gruppe \username{fibu} m"ussen nicht
+ notwendigerweise diese Gruppe als Hauptgruppe haben. Das hei"st, neu
+ angelegte Dateien geh"oren m"oglicherweise anderen Gruppen an.
+ Dieses spezielle Problem lie"se sich mit dem set-group-id Bit auf
+ dem Verzeichnis \dateistyle{/data/fibu} l"osen:
+
+\begin{verbatim}
+chmod g+s /data/fibu
+\end{verbatim}
+
+ \username{mueller} und \username{meier} blieben jedoch immer noch
+ au"sen vor, da sie nicht in der Gruppe \username{fibu} sind, also
+ auf dem Verzeichnis \dateistyle{/data/fibu} kein Schreibrecht haben.
+\end{itemize}
+
+Beide Probleme bekommt man mit dem Parameter \param{force group =
+ fibu} in den Griff. Dieser Parameter arbeitet genau so wie
+\param{force user}, nur da"s er sich anstatt der User-ID auf die
+Group-ID bezieht. Jegliche Dateisystemzugriffe werden damit als Gruppe
+\username{fibu} vorgenommen, die User-ID bleibt unangetastet.
+
+Als letztes mu"s nun noch sichergestellt werden, da"s die Gruppe, in
+diesem Fall \username{fibu}, immer schreiben kann, und da"s der
+Rest der Welt keinen Zugriff bekommt. Die vollst"andige
+Freigabedefinition sieht demnach folgenderma"sen aus:
+
+\begin{verbatim}
+[fibu]
+ path = /data/fibu
+ writeable = yes
+ valid users = @fibu, mueller, meier
+ force group = fibu
+ create mask = 740
+ directory mask = 750
+ force create mode = 020
+ force directory mode = 020
+\end{verbatim}
+
+\todo{Global- und shareparameter, copy = freigabe}
+
+\section{Projektverzeichnisse, zum zweiten}
+
+Folgendes Problem stellt sich bei der Migration von Novell zu Samba
+recht h"aufig. Unter Novell kann man anhand von
+Gruppenzugeh"origkeiten den Zugriff auf Verzeichnisse regeln. Dies ist
+unter Samba anhand von Unixrechten ebenfalls m"oglich. Was Unix leider
+nicht zur Verf"ugung stellt, ist die M"oglichkeit, Verzeichnisse vor
+Benutzern zu verstecken. Ein Benutzer sieht grunds"atzlich alle
+Verzeichnisse, bekommt aber bei vielen dieser Verzeichnisse die
+Meldung, da"s der Zugriff verweigert wurde. Wenn es jetzt anhand der
+Gruppenzugeh"origkeit des Benutzers m"oglich w"are, nur die
+Verzeichnisse anzuzeigen, auf die er tats"achlich Zugriff hat,
+k"onnten die Verzeichnisse deutlich "ubersichtlicher werden.
+
+Die Flexibilit"at von Samba erm"oglicht es, diese von Unix
+vorgegeben Beschr"ankung zu umgehen, und zwar unter Benutzung von
+Skripten, die vor dem Verbinden mit einer Freigabe ausgef"uhrt werden.
+
+Folgendes Szenario wird vorausgesetzt: Jeder Benutzer ist in mehrere
+Gruppen eingeteilt, die jeweils Projekte, Arbeitsgruppen oder
+Abteilungen darstellen k"onnen. Jede dieser Gruppen hat unter
+\dateistyle{/data/groups} ein eigenes Verzeichnis, auf das sie schreiben
+darf. Die einzelnen Verzeichnisse haben das Set Group ID Bit gesetzt,
+damit die neu angelegten Dateien den jeweiligen Gruppen angeh"oren.
+
+Als Beispiel gebe es die drei Gruppen \param{edv}, \param{fibu} und
+\param{verkauf}. Unter \dateistyle{/data/groups} kann man folgende
+Gruppenverzeichnisse anlegen:
+
+{\small\begin{verbatim}
+root@server:/data/groups> ls -l
+total 12
+drwxrws--- 2 root edv 4096 Jan 31 06:43 edv
+drwxrws--- 2 root fibu 4096 Jan 31 06:43 fibu
+drwxrws--- 2 root verkauf 4096 Jan 31 06:43 verkauf
+root@server:/data/groups>
+\end{verbatim}
+}
+
+Die korrekten Rechte erreicht man unter Unix durch:
+
+{\small\begin{verbatim}
+root@server:/root> mkdir /data/groups/edv
+root@server:/root> chgrp edv /data/groups/edv
+root@server:/root> chmod 2770 /data/groups/edv
+\end{verbatim}
+}
+
+Eine Freigabe, die jedem Benutzer anhand seiner Rechte hierauf Zugriff
+gew"ahrt, kann folgenderma"sen aussehen:
+
+{\small\begin{verbatim}
+[allgroups]
+path = /data/groups
+writeable = yes
+create mode = 740
+directory mode = 750
+force create mode = 020
+force directory mode = 020
+\end{verbatim}
+}
+
+Zu beachten ist hier, da"s keine zus"atzlichen Einschr"ankungen anhand
+von \param{valid users} notwendig sind, da der Zugriff durch die
+Unixrechte beschr"ankt ist. Die Parameter \param{create mask} und
+\param{directory mask} sind nicht strikt notwendig, da bereits auf der
+Ebene \dateistyle{/data/share} die Benutzer abgewiesen werden. Die
+Parameter \dateistyle{force create mode} und \param{force directory mode}
+sind hingegen notwendig, da ohne sie neu angelegte Dateien nicht die
+notwendigen Gruppenschreibrechte erhalten w"urden, die zum gemeinsamen
+Zugriff notwendig sind.
+
+Diese Freigabe erf"ullt funktional genau die Anforderungen, da"s
+jeder in die Verzeichnisse schreiben darf, f"ur die er die
+Gruppenmitgliedschaft hat. Der Nachteil an diesem Verfahren ist, da"s
+er alle anderen Verzeichnisse sieht, was bei gro"sen Servern mit
+vielen Gruppen recht un"ubersichtlich werden kann.
+
+Die preexec-Skripte von Samba erm"oglichen die "ubersichtliche
+Darstellung der Gruppenstruktur. Ein preexec-Skript wird ausgef"uhrt,
+bevor der Benutzer tats"achlich mit der Freigabe verbunden wird.
+
+{\small\begin{verbatim}
+[gruppen]
+path = /data/users/%U
+root preexec = /usr/local/bin/mklinks %U
+writeable = yes
+\end{verbatim}
+}
+
+Die Datei \dateistyle{mklinks} hat folgenden Inhalt:
+
+{\small\begin{verbatim}
+#!/bin/sh
+umask 022
+cd /data/users
+rm -rf "$1"
+mkdir "$1"
+cd "$1"
+for i in $(groups $1)
+do
+ ln -s "/data/groups/$i" .
+done
+\end{verbatim}
+}
+
+Beim Verbinden an die Freigabe wird das Verzeichnis
+\dateistyle{/data/users/username} frisch erstellt, das anhand der
+Gruppenzugeh"origkeit des Benutzers eine Liste von symbolischen Links
+erstellt, die auf die eigentlichen Gruppenverzeichnisse verweisen.
+Damit bekommt er nur die Verzeichnisse im Explorer angezeigt, auf die
+er tats"achlich Zugriff hat. Durch die Angabe \param{path =
+/data/users/\%U} ist zudem sichergestellt, da"s die Freigabe f"ur
+alle Benutzer gleich hei"st, aber f"ur jeden Benutzer auf ein eigenes
+Verzeichnis verweist.
+
+Das Skript wird in diesem Beispiel als \param{root preexec}
+ausgef"uhrt, um den Verwaltungsaufwand beim Anlegen neuer Benutzer zu
+minimieren. Mit einem reinen \param{preexec} ohne Rootrechte w"are es
+notwendig, f"ur jeden Benutzer unterhalb von \param{/data/users} ein
+eigenes Verzeichnis mit den notwendigen Rechten anzulegen. Jedoch darf dieses
+Verfahren nur dann angewendet werden, wenn die Benutzernamen unter
+vertrauensw"urdiger Kontrolle stehen. Wenn es m"oglich ist, da"s
+Benutzernamen beispielsweise von einem NIS-Server bezogen werden, kann "uber
+einen Benutzernamen \username{../..} das gesamte Dateisystem
+gel"oscht werden. Ist ein NIS-Server beteiligt, mu"s man das Verfahren
+ohne \param{root preexec} und nur mit \param{preexec} ohne Root-Rechte
+verwenden.
+
+Alternativ k"onnte man das Verzeichnis mit der Gruppenliste im
+Heimatverzeichnis des Benutzers anlegen, wobei dabei Zweifel
+bez"uglich der "Ubersichtlichkeit angebracht sind. Ein weiteres
+Argument, das Skript unter Rootrechten auszuf"uhren, ist die
+Betriebssicherheit. Ohne dies w"are es dem Benutzer m"oglich, sich
+vollst"andig von einem Gruppenverzeichnis auszuschlie"sen indem er das
+gesamte Verzeichnis inklusive symbolischem Link l"oscht. Mit der
+dargestellten Version geh"ort das Verzeichnis mit den symbolischen
+Links dem Benutzer root, und Fehlbedienungen in dieser Ebene sind
+ausgechlossen.
+
+Wenn man die Freigabe \param{[allgroups]} auf \param{browseable =
+ no} setzt, so hat man maximale "Ubersichtlichkeit bei vollem
+Zugriff auf s"amtliche Gruppenverzeichnisse durch den Administrator
+gegeben.
+
+"Andern sich die Gruppenzugeh"origkeiten eines Benutzers, so kann
+er einfach durch ein Neuverbinden an die Freigabe die neue Sicht auf
+die Verzeichnisstruktur bekommen. Dieses Neuverbinden kann erzwungen
+werden, indem der richtige Serverprozess get"otet wird. Dieser kann
+anhand des Programms \prog{smbstatus} leicht herausgefunden werden.
+
+\section{ACLs}
+\label{acl}
+
+Die Zugriffsrechte unter Unix werden durch den Dateimodus bestimmt.
+Dieser Dateimodus enth"alt neun Bits, die den Zugriff auf die Datei
+regeln. Dazu kommen drei zus"atzliche Bits f"ur spezielle Anwendungen.
+Mit diesen neun Bits k"onnen Zugriffsrechte f"ur drei Benutzerklassen
+vergeben werden: Den Dateibesitzer, die besitzende Gruppe und den Rest
+der Welt. Mit dem Befehl \prog{chmod} werden diese Rechte gesetzt.
+
+Dieser Mechanismus hat einen unsch"atzbaren Vorteil: Er ist einfach.
+Mit insgesamt zw"olf Bits kann ein sehr gro"ses Spektrum an Szenarien
+abgedeckt werden. Jedoch ist es oft notwendig, Zugriffsrechte feiner
+zu vergeben, als dies mit Unix m"oglich ist. Insbesondere haben viele
+Unternehmensanwendungen komplexere Anforderungen an die
+Zugriffsrechte.
+
+Beispielsweise soll auf einem Verzeichnis die Gruppe \username{fibu}
+Schreibrecht haben und die Gruppe \username{controlling} soll Leserecht
+bekommen. Der Benutzer \username{mueller} ist nun in der Gruppe
+\username{controlling} und hat sich bei der Finanzbuchhaltung unbeliebt
+gemacht. Er soll auf dieses Verzeichnis keinen Zugriff mehr haben. Eine
+solche Konfiguration ist mit den traditionellen Unix-Zugriffsrechten nicht
+mehr abzubilden.
+
+Die Hersteller von Unix haben sich irgendwann zusammengefunden, um das
+beschr"ankte Rechtemodell zu erweitern. Geplant war eine Erweiterung, die
+sich in das vorhandene Rechtemodell von Unix nahtlos einbinden l"a"st, aber
+die dem Benutzer erheblich mehr M"oglichkeiten zur
+Rechtesteuerung gibt.
+
+Zugriffskontrollisten (Access Control Lists oder ACLs) unterst"utzen genau
+diese weitergehenden Zugriffsrechte. Beliebige Benutzer und
+Gruppen k"onnen Rechte auf Dateien und Verzeichnissen bekommen oder
+verweigert bekommen. Die klassischen drei Benutzerklassen kann man als drei
+Eintr"age in einer ACL ansehen.
+
+Das Modell der ACLs erweitert M"oglichkeiten, wem man Rechte geben
+kann. Es erweitert nicht die Art der Rechte, die vergeben werden
+k"onnen. Es geht weiterhin nur um die Rechte Lesen, Schreiben und
+Ausf"uhren, mit der bekannten Bedeutung auf Dateien und
+Verzeichnissen.
+
+\subsection{Rechte unter Unix}
+
+Die Auswertung der Zugriffsrechte unter Unix funktioniert, indem
+zuerst entschieden wird, welche der drei Rechtegruppen Benutzer,
+Gruppe und Andere benutzt werden soll. Im zweiten Schritt wird
+nachgesehen, ob das gew"unschte Recht auf der Datei gesetzt ist.
+
+Die Zugriffsrechte eines Benutzers werden bestimmt durch seinen
+Sicherheitskontext. Dieser Sicherheitskontext besteht aus seiner
+effektiven User ID (EUID), seiner prim"aren Gruppe (EGID) und seinen
+zus"atzlichen Gruppen (GIDs). Die Entscheidung f"ur eine Rechtegruppe
+funktioniert in drei Schritten:
+
+\begin{itemize}
+\item Ist EUID gleich dem Dateibesitzer? In diesem Fall wird die erste
+ Rechtegruppe, die f"ur den User benutzt.
+\item Ist der Benutzer in der besitzenden Gruppe? Dann wird die zweite
+ Rechtegruppe f"ur Group benutzt. Die tats"achliche Pr"ufung
+ passiert, indem die besitzende Gruppe in der Liste GID's gesucht
+ wird, in der der Benutzer aufgenommen ist.
+\item Ist beides nicht der Fall, so wird die dritte Rechtemaske f"ur
+ Others benutzt.
+\end{itemize}
+
+Wenn entschieden wurde, welche Rechtemaske verwendet werden soll, wird
+nicht mehr versucht, eine andere Rechtemaske zu verwenden. Wenn ein
+Benutzer sich selbst das Leserecht auf einer Datei genommen hat, und
+dem Rest der Welt "uber die Maske Others Leserecht gegeben hat, wird
+er die Datei nicht lesen k"onnen.
+
+\subsection{Eintr"age in einer ACL}
+
+Da ACLs eine reine Erweiterung des Unix-Rechtemodells sind, gibt es
+weiterhin einen Dateibesitzer und eine besitzende Gruppe f"ur jede
+Datei. Eine Access Control List kennt eine Anzahl unterschiedlicher
+Eintr"age:
+
+\begin{description}
+\item[ACL\_USER\_OBJ:] Dies ist die Rechtemaske f"ur den
+ Dateibesitzer. Sie entspricht der ersten Rechtemaske f"ur den User
+ im klassischen Rechtemodell.
+\item[ACL\_GROUP\_OBJ:] Dies ist die Entsprechung der
+ Group-Rechtemaske im klassischen Modell.
+\item[ACL\_OTHER:] Die Rechtemaske f"ur den Rest der Welt unter Unix.
+ Von diesen ersten drei Eintr"agen gibt es jeweils genau einen in
+ jeder ACL.
+\item[ACL\_USER:] Ein Eintrag f"ur einen benannten Benutzer. Von
+ diesem Eintrag kann es mehrere geben, mit denen f"ur
+ unterschiedliche Benutzer unterschiedliche Rechte vergeben werden.
+ Gibt es einen Benutzereintrag ohne jegliche Rechte, kann dieser auf
+ die Datei nicht zugreifen.
+\item[ACL\_GROUP:] Eintrag f"ur eine Gruppe. Auch von diesem Eintrag
+ kann es mehrere geben.
+\item[ACL\_MASK:] Die Maske f"ur die effektiven Rechte. Sobald f"ur
+ eine Datei ACLs verwendet werden, wird \prog{ls -l} diese
+ Rechtemaske als Gruppenrecht anzeigen. Sobald mit \prog{chmod} die
+ Rechte f"ur die besitzende Gruppe ver"andert werden (etwa per
+ \prog{chmod g-rx}), wird die ACL\_MASK ver"andert.
+\end{description}
+
+\subsection{Rechte mit ACLs}
+
+Wenn ein Prozess auf eine Datei zugreifen will, wird mit dem folgenden
+Algorithmus festgestellt, ob der Zugriff zugelassen oder verweigert
+wird.
+
+\begin{itemize}
+\item Ist die EUID des Prozesses gleich dem Dateibesitzer, wird der
+ Zugriff gew"ahrt, wenn der Eintrag f"ur ACL\_USER\_OBJ die
+ ben"otigten Zugriffsrechte enth"alt.
+\item Wenn es in der ACL einen ACL\_USER Eintrag gibt, der der EUID
+ entspricht, wird dieser Eintrag verwendet. Ist dass gew"unschte
+ Recht in diesem Eintrag vorhanden, wird der Zugriff gew"ahrt, sofern
+ es \emph{auch} im Eintrag ACL\_MASK vorhanden ist. Ist das Recht
+ entweder im ACL-Eintrag oder in ACL\_MASK \emph{nicht} vorhanden,
+ wird das Recht verweigert.
+\item Ist der Benutzer in der besitzenden Gruppe der Datei ist
+ (Eintrag f"ur ACL\_GROUP\_OBJ), oder wenn der Benutzer in einer
+ Gruppeneintr"age vom Typ ACL\_GROUP ist, wird folgendes getestet:
+ Sind die gew"unschten Rechte in einem der Eintr"age vollst"andig
+ vorhanden, so wird der Zugriff gew"ahrt, sofern das Recht ebenfalls
+ im Eintrag ACL\_MASK vorhanden ist. Ansonsten wird der Zugriff
+ verweigert.
+\item Wenn kein Eintrag gefunden werden konnte, wird der Zugriff
+ anhand des Eintrags ACL\_OTHER gew"ahrt.
+\end{itemize}
+
+Es ist hier wichtig festzustellen, da"s die Benutzereintr"age in einer
+ACL immer \emph{vor} Gruppeneintr"agen durchsucht werden. Damit werden
+die spezifischeren Eintr"age grunds"atzlich vorrangig vor den weniger
+spezifischen Eintr"agen behandelt.
+
+\subsection{ACL-Beispiel}
+
+Linux unterst"utzt mit dem richtigen Kernelpatch die beschriebenen
+ACLs auf dem Ext2-Dateisystem. Der Kernelpatch ist zu diesem Zeitpunkt
+(Sommer 2001) notwendig, da Linus Torvalds ihn noch nicht in den
+Standardkernel aufgenommen hat. Unter
+\href{http://acl.bestbits.at/}{http://acl.bestbits.at} findet man den
+entsprechenden Kernelpatch und die notwendigen Utilities. ACLs setzen
+kann man mit \prog{setfacl}, mit \prog{getfacl} werden ACLs angezeigt.
+
+Das oben beschriebene Beispiel eines Verzeichnisses f"ur die
+Finanzbuchhaltung l"a"st sich folgenderma"sen erstellen:
+
+\begin{verbatim}
+root@delphin:~ > cd /
+root@delphin:/ > mkdir fibu
+root@delphin:/ > chmod o-rwx fibu
+root@delphin:/ > setfacl -m group:fibu:rwx fibu
+root@delphin:/ > setfacl -m group:controlling:rx fibu
+root@delphin:/ > setfacl -m user:mueller:--- fibu
+root@delphin:/ > getfacl fibu
+# file: fibu
+# owner: root
+# group: root
+user::rwx
+user:mueller:---
+group::r-x
+group:fibu:rwx
+group:controlling:r-x
+mask:rwx
+other:---
+\end{verbatim}
+
+Obwohl der Benutzer \username{mueller} Mitglied der Gruppe
+\username{controlling} ist, hat er keinen Zugriff auf dieses
+Verzeichnis, da der ACL-Eintrag f"ur ihn keinen Zugriff erlaubt, und
+dieser vor seinem Gruppeneintrag gefunden wird.
+
+Interessant an diesem Beispiel ist die Behandlung der ACL-mask. Sie
+wird in der Anzeige von \prog{ls -l} als Gruppenberechtigung
+angezeigt.
+
+\begin{verbatim}
+root@delphin:/ > ls -ld fibu
+drwxrwx--- 2 root root 4096 Aug 28 07:56 fibu
+\end{verbatim}
+
+An der Ausgabe von \prog{getfacl} ist zu sehen, da"s die besitzende
+Gruppe \username{root} nur Lese- und Ausf"uhrungsrechte hat. Trotzdem
+zeigt \prog{ls -l} f"ur die Gruppe ein \prog{rwx} an. Dies wird
+gemacht, um Benutzer vor "Uberraschungen zu sch"utzen. "Uber ACLs sind
+auf dem Verzeichnis \dateistyle{fibu} mehr Rechte vergeben, als aus
+der Ausgabe von \prog{ls -l} ersichtlich ist. Will man die
+Rechtevergabe durch ACLs ausschalten, gen"ugt es, mit \prog{chmod
+ g-rwx fibu} die Rechte f"ur die besitzende Gruppe komplett
+wegzunehmen.
+
+\subsection{Default ACLs}
+
+Das vorangegangene Beispiel ist noch nicht vollst"andig. F"ur das
+Verzeichnis \dateistyle{fibu} sind die Rechte korrekt gesetzt. Wenn
+jedoch Benutzer in diesem Verzeichnis Dateien anlegen, gelten wieder
+nur die normalen Regeln von Unix. Erreichen m"ochte man jedoch in der
+Regel, da"s f"ur neue Dateien unterhalb eines solchen Verzeichnisses
+wieder die gleichen Regeln gelten wie f"ur das Verzeichnis selbst.
+
+Wenn eine neue Datei oder ein Verzeichnis erstellt wird, mu"s "uber
+die Zugriffsrechte entschieden werden, die darauf gesetzt werden. Im
+traditionellen Unixmodell wird die Rechtemaske auf neuen Dateien und
+Verzeichnissen durch die so genannte \emph{umask} eingeschr"ankt. Ein
+Programm, das eine Datei erzeugt, kann einen Satz von Zugriffsrechten
+bestimmen, mit dem die Datei erzeugt werden soll. Bevor die Datei
+tats"achlich mit diesen Rechten erzeugt wird, wird dieser Satz von
+Rechten um die Bits eingeschr"ankt, die in der \emph{umask} gesetzt
+sind. Wenn ACLs verwendet werden, ist dieses einfache Modell nicht
+mehr verwendbar. Stattdessen kann man f"ur jedes Verzeichnis eine
+so genannte \emph{Default ACL} vergeben. Diese werden an Dateien und
+Verzeichnisse weitergegeben.
+
+Setzen kann man die Default ACL, indem man dem Befehl \prog{setfacl}
+den Schalter \prog{-d} mitgibt:
+
+\begin{verbatim}
+root@delphin:/ > setfacl -d -m group:fibu:rwx fibu/
+root@delphin:/ > setfacl -d -m group:controlling:r-x fibu
+root@delphin:/ > setfacl -d -m user:mueller:--- fibu
+root@delphin:/ > getfacl fibu
+# file: fibu
+# owner: root
+# group: root
+user::rwx
+user:mueller:---
+group::r-x
+group:fibu:rwx
+group:controlling:r-x
+mask:rwx
+other:---
+default:user::rwx
+default:user:mueller:---
+default:group::r-x
+default:group:fibu:rwx
+default:group:controlling:r-x
+default:mask:rwx
+default:other:---
+\end{verbatim}
+
+Mit diesen Eintr"agen ist das Beispielverzeichnis vollst"andig. Die
+Default-Eintr"age werden an neue Dateien und Verzeichnisse
+weitergegeben.
+
+Zu beachten ist hier noch die umask des Benutzers. Sobald ACLs benutzt
+werden, wirken die Gruppenrechte, die im \prog{ls} dargestellt und mit
+\prog{chown} ge"andert werden, als \emph{mask} einschr"ankend auf die
+ACLs. Wenn die umask eines Unix-Benutzers so gesetzt ist, da"s die
+Gruppe eingeschr"ankt wird, so wirkt sich das beim Einsatz von ACLs so
+aus, da"s bei neu angelegten Dateien und Verzeichnissen diese
+Gruppeneinschr"ankungen als \emph{mask} wirken und somit die default
+ACLs beschr"anken.
+
+\subsection{ACLs aus Windows-Sicht}
+
+Was hat das ganze mit Samba zu tun? Zun"achst einmal sind
+Windows-Administratoren gewohnt, deutlich st"arker mit ACLs zu
+arbeiten, als Unixbenutzer. Dies mag daran liegen, da"s Unix lange
+Zeit keine ACLs unterst"utzt hat und man vieles auch mit den
+traditionellen Zugriffsrechten erreichen kann. Bei der Planung eines
+Sambaservers als Ersatz f"ur einen NT-Server stellt sich so
+zwangsl"aufig die Frage nach der Unterst"utzung von ACLs.
+
+Der Zusammenhang mit Samba ergibt sich nun daraus, da"s mit Samba 2.2
+diese ACLs von Windows aus angeschaut und sogar gesetzt werden
+k"onnen. Dazu mu"s bei der Kompilation von Samba die Option
+\prog{-{}-with-acl-support} an das Skript \prog{configure} "ubergeben
+worden sein, und beim Kompilieren mu"s die ACL-Unterst"utzung in den
+Headerfiles des Kernels vorhanden sein. Ist beides der Fall, kann man
+"uber die Sicherheitseigenschaften von Dateien und Verzeichnissen
+deren ACLs editieren. Dabei ergibt sich bei der Umsetzung von den sehr
+komplexen NT-ACLs zu den deutlich einfacheren Posix-ACLs h"aufig eine
+gewisse Einschr"ankung der Funktionalit"at, aber dies ist leider nicht
+zu vermeiden. Die Anforderungen, die im obigen Beispiel skizziert
+wurden, werden jedoch korrekt umgesetzt. Wer sich f"ur die genaue
+Umsetzung der ACLs zwischen der NT- und der Posix-Welt interessiert,
+mag sich die Datei \dateistyle{samba-acls.ag.pdf} aus dem
+Unterverzeichnis \prog{slides} eines Samba-FTP Servers ansehen. Dies
+sind die Folien eines Vortrags von Jeremy Allison "uber jene
+Umsetzung, den er bei der CIFS 2001 Konferenz in Bellevue gehalten
+hat.
+
+\section{oplocks}
+
+Dateizugriffe "uber ein Netzwerk sind trotz leistungsf"ahiger
+Netzwerkhardware meistens deutlich langsamer als auf einer lokalen
+Festplatte. Der lokale Hauptspeicher, der heutzutage in den meisten
+Workstations im "Uberflu"s vorhanden ist, ist nochmal um
+Gr"o"senordnungen schneller. F"ur lokale Festplatten gibt es in allen
+Systemen Caches im Hauptspeicher, und so w"are es Verschwendung,
+Caching nicht auch auf Netzwerkdateien anzuwenden. Netzwerkzugriffe,
+die gar nicht erst gemacht werden m"ussen, sind die schnellsten
+Zugriffe. Im Gegensatz zu einem lokalen Festplattencache kann ein
+Cache von Netzwerkdateien nicht davon ausgehen, die Datei alleine zu
+benutzen\footnote{Geteilte Blockger"ate in einem Storage Area Network
+ sei hier einmal au"sen vor gelassen.}. Zugriffe unterschiedlicher
+Clients m"ussen koordiniert werden.
+
+Opportunistic Locks (Oplocks) sind ein Mechanismus, mit dem Clients
+erlaubt werden kann, Dateiinhalte zu cachen. Mit einem Oplock bekommt
+der Client eine Datei solange exklusiv f"ur sich, bis der Server ihn
+auffordert, die "Anderungen zur"uckzuschreiben und die Sperre
+freizugeben.
+
+Ein Client A m"ochte eine Datei "offnen und beantragt ein Oplock auf
+die Datei. Wenn der Server dieses Oplock gew"ahrt, ist das die Zusage,
+da"s niemand anders auf die Datei zugreift. Damit mu"s Client A
+weder bei jedem Lesezugriff den Server befragen, noch mu"s er jeden
+Schreibzugriff unverz"uglich an den Server liefern. Moderne
+Windowsclient nutzen dieses Feature sehr ausgiebig und erreichen damit
+in typischen Applikationen zwischen drei"sig und vierzig Prozent mehr
+Geschwindigkeit.
+
+Wenn ein zweiter Client, B, auf die Datei "offnen m"ochte, schickt der
+Server dem Client A ein so genanntes Oplock Break. Dies ist die
+Anweisung, s"amtliche lokalen "Anderungen zur"uckzuschreiben und den
+Schreibcache auf dieser Datei in Zukunft auszuschalten. Erst nachdem
+Client A alle "Anderungen zur"uckgeschrieben hat, wird Client B die
+Datei "offnen k"onnen. Da keiner von beiden noch ein Oplock bekommt,
+sehen beide s"amtliche "Anderungen sofort.
+
+Dieses Schema funktioniert innerhalb von Samba hervorragend. Sobald
+Unix-Prozesse ebenfalls auf Dateien zugreifen m"ussen, die von Samba
+freigegeben sind, gibt es Probleme mit Oplocks. Beispielsweise wird es
+nicht m"oglich sein, vern"unftig Datensicherung zu betreiben, da
+Clients m"oglicherweise nicht alle Daten zum Server geschickt haben.
+
+Es gibt mehrere M"oglichkeiten, dieses Problem in den Griff zu
+bekommen:
+
+\begin{description}
+\item[Keine Oplocks:] Durch den Parameter \param{oplocks = no} k"onnen
+ Oplocks f"ur eine Freigabe komplett abgeschaltet werden. Damit
+ handelt man sich aber massive Performanceprobleme ein.
+\item[Keine Oplocks f"ur einzelne Dateien:] Der Parameter \param{veto
+ oplock files} verweigert Oplocks f"ur einzelne Dateien. Dieser
+ Parameter verlangt eine Liste von Unix-Pfadnamen oder
+ DOS-Wild\-cards. Die Syntax ist in der Beschreibung zum Parameter
+ \param{veto files} zu finden.
+\item[Kernel Oplocks:] Das Problem mit Oplocks liegt darin, da"s Samba
+ vom Kernel nicht informiert werden kann, wenn ein Unixproze"s eine
+ Datei "offnen will. Samba k"onnte f"ur diese Datei ein Oplock
+ vergeben haben und m"u"ste es vom Client zur"uckfordern, bevor der
+ Unixproze"s die Datei "offnen kann. IRIX und Linux 2.4 sind um ein
+ API erweitert worden, das genau dies leistet. Um Kernel Oplocks zu
+ nutzen, mu"s Samba entsprechend kompiliert werden. Liegen bei der
+ Kompilation die Quellen des Kernel 2.4 vor, erkennt Samba diese
+ automatisch. Sollten sich bei der Nutzung dieses Features Probleme
+ herausstellen, kann es mit \param{kernel oplocks = no} abgeschaltet
+ werden, obwohl dies nie notwendig sein sollte.
+\end{description}
+
+Bevor Samba Oplocks unterst"utzt hat, konnte man mit \param{fake
+ oplocks = yes} f"ur read only Freigaben jegliche Oplocks vergeben,
+ohne sie jemals zur"uckzufordern. Dies sollte man heutzutage
+\emph{nicht} mehr einsetzen.
+
+\section{Pa"sw"orter}
+\label{passwoerter}
+
+Protokolle der IP-Welt wie telnet, ftp und pop3 "ubertragen die
+Pa"sw"orter zur Benutzerauthentifizierung im Klartext. Damit kann
+jeder, der den Netzverkehr abh"oren kann, s"amtliche Pa"sw"orter
+mitschreiben. Daf"ur existieren fertige Programme, die Benutzernamen
+und dazugeh"orige Pa"sw"orter ausgeben. In der Unixwelt wurde dies
+zun"achst nicht als problematisch angesehen, da zum Zugriff auf das
+Netz Administratorrechte oder physikalischer Zugriff zum Netz
+notwendig sind. Beides war historisch oft nicht gegeben, so da"s das
+Risiko als relativ gering eingesch"atzt wurde. Seit dem Aufkommen von
+DOS und Ethernet hat jeder Benutzer Administratorrechte, kann also den
+Netzverkehr mitschneiden.
+
+Benutzerauthentifizierung mu"s vor allem eins leisten: Der Benutzer
+mu"s beweisen, da"s er sein Pa"swort kennt. Ein
+Authentifizierungsprotokoll kann es dabei erm"oglichen, da"s das
+Pa"swort nicht "ubertragen werden mu"s.
+
+Klassische symmetrische Verschl"usselung funktioniert folgenderma"sen:
+Jemand m"ochte einem Bekannten\footnote{In der Literatur hei"sen diese
+ beiden Bekannten Alice und Bob. Es gibt ganze Abhandlungen dazu, was
+ diesen beiden schon alles passiert ist$\ldots$} eine geheime
+Nachricht zukommen lassen. Das hei"st, jemand, der die "Ubertragung
+abh"ort, soll diese Nachricht nicht lesen k"onnen. Dazu kann man ein
+symmetrisches Verfahren wie DES, IDEA oder AES einsetzen. Diese
+Verfahren zerst"uckeln die Nachricht so, da"s sie niemand mehr lesen
+kann, au"ser jemand wei"s, mit welchem Verfahren die Nachricht
+verschl"usselt wurde. Zu jedem Verschl"usselungsverfahren gibt es
+n"amlich ein Gegenst"uck, das aus der zerst"uckelten Nachricht das
+Original wieder herstellt. Es gibt auch Verfahren, bei denen es keinen
+R"uckweg gibt. Diese sind zwar f"ur die genannte Anwendung nicht
+brauchbar, denn man kommt nicht mehr an die Nachricht, aber in anderen
+Bereichen sind diese so genannten Hashverfahren sehr weit verbreitet.
+
+Alle heute verwendeten symmetrischen Verschl"usselungsverfahren
+verwenden zus"atzlich Schl"ussel. Erst mit einem Schl"ussel wird die
+genaue Methode festgelegt, mit der die Nachricht verschl"usselt wird.
+Jemand, der die verschl"usselte Nachricht liest, mu"s also nicht nur
+das grunds"atzliche Verfahren kennen, sondern insbesondere mu"s er den
+Schl"ussel herausbekommen, um die Nachricht lesen zu k"onnen. Das
+Raten des Schl"ussels ist meistens der viel schwierigere Teil, da es
+sehr viel mehr Schl"ussel gibt als Verschl"usselungsverfahren. An
+dieser Stelle kommt die vielzitierte Schl"ussell"ange ins Spiel. Wenn
+ein Schl"ussel wie bei DES 56 Bit lang ist, dann gibt es $2^56 =
+72.057.594.037.927.936$ verschiedene Schl"ussel. Mit heutiger
+Technologie k"onnen diese Schl"ussel alle in kurzer Zeit ausprobiert
+werden, daher arbeiten moderne Verfahren mit mindestens 128 Bit langen
+Schl"usseln. Man nimmt an, da"s $2^128$ Schl"ussel auch in der
+absehbaren Zukunft nicht alle durchprobiert werden k"onnen. Abbildung
+\ref{symmetrisch} verdeutlicht die symmetrische Verschl"usselung.
+
+\begin{figure}\[
+\setlength{\unitlength}{1cm}
+\begin{picture}(11,3.5)
+
+\put(0,0){\framebox(11,3.5){}}
+
+\put(4,0){\line(0,1){3.5}}
+\put(7,0){\line(0,1){3.5}}
+\put(0,2.5){\line(1,0){11}}
+
+\put(2,3){\makebox(0,0){Alice}}
+\put(5.5,3){\makebox(0,0){Eve}}
+\put(9,3){\makebox(0,0){Bob}}
+
+\put(0.2,1.5){\framebox(1,0.5){Pssst!}}
+\put(1.2,1.75){\vector(1,0){0.8}}
+\put(2,1.5){\framebox(1,0.5){AES}}
+\put(3,1.75){\vector(1,0){1.6}}
+\put(1.6,0.3){\framebox(1.8,0.5){Schl"ussel}}
+\put(2.5,0.8){\vector(0,1){0.7}}
+
+\put(4.6,1.5){\framebox(1.8,0.5){@Yx!?a\{}}
+\put(6.4,1.75){\vector(1,0){1.6}}
+
+\put(8,1.5){\framebox(1,0.5){AES}}
+\put(7.6,0.3){\framebox(1.8,0.5){Schl"ussel}}
+\put(8.5,0.8){\vector(0,1){0.7}}
+\put(9,1.75){\vector(1,0){0.8}}
+\put(9.8,1.5){\framebox(1,0.5){Pssst!}}
+
+\end{picture}\]
+\caption{Symmetrische Verschl"usselung}
+\label{symmetrisch}
+\end{figure}
+
+\subsection{Challenge-Response Verfahren}
+
+Werden im SMB-Protokoll verschl"usselte Pa"sw"orter verwendet, so wird
+die symmetrische Verschl"usselung trickreich eingesetzt. Der Client
+m"ochte eine Verbindung zum Server aufbauen. Bevor dies geschieht,
+mu"s der Benutzer seinen Namen und sein Pa"swort eingeben. Erst danach
+baut der Client die Verbindung zum Server auf. In der Antwort auf die
+erste Anfrage des Clients, der Negotiate Protocol Response, schickt
+der Server dem Client eine Zufallszahl. Diese Zufallszahl wird
+Herausforderung genannt.
+
+Der Client verf"ugt nun "uber drei Werte: Den Benutzernamen, das
+Pa"swort des Benutzers und die Herausforderung. Das Pa"swort soll nun
+verschl"usselt "uber das Netz "ubertragen werden. Ein naiver Ansatz
+w"are, die Herausforderung als Schl"ussel f"ur ein symmetrisches
+Verschl"usselungsverfahren einzusetzen. Der Server kennt die
+Herausforderung, da er sie selbst verschickt hat, kann also das
+verschl"usselte Pa"swort wieder entschl"usseln. Das Problem liegt
+darin, da"s jeder Zuh"orer ebenfalls den Schl"ussel kennt, also auch
+das Pa"swort entschl"usseln kann. Daher wird anders vorgegangen: Das
+Pa"swort wird als Schl"ussel benutzt, um die Herausforderung zu
+verschl"usseln. Diese mit dem Pa"swort verschl"usselte Herausforderung
+schickt der Client im Session Setup zusammen mit dem Benutzernamen an
+den Server.
+
+Wor"uber verf"ugt der Server, wenn er den Session Setup erhalten hat?
+Er hat sich die Zufallszahl gemerkt, und der Client hat im den
+Benutzernamen geschickt. Aus der Benutzerdatenbank kann er damit das
+Pa"swort des Benutzers auslesen. Mit diesem ausgelesenen Pa"swort als
+Schl"ussel entschl"usselt der Server die verschl"usselte
+Herausforderung und pr"uft, ob wieder die versendete Zufallszahl
+herauskommt. Ist dies der Fall, stimmen die beiden Schl"ussel
+"uberein. Das hei"st, der Client hat die als Herausforderung gesendete
+Zufallszahl mit dem gleichen Pa"swort verschl"usselt, das auch der
+Server in seiner Benutzerdatenbank gespeichert hat. Stimmt der
+entschl"usselte Wert nicht mit der gesendeten Zufallszahl "uberein,
+wurde f"ur die Verschl"usselung ein anderer Schl"ussel, also ein
+anderes Pa"swort, benutzt, als f"ur die Entschl"usselung. Das am
+Client eingegebene Pa"swort stimmt also nicht mit dem "uberein, das
+der Server in seiner Benutzerdatenbank gespeichert hat. Der Server
+bekommt nicht heraus, welches Pa"swort der Client benutzt hat, aber
+das mu"s er auch gar nicht. Das Pa"swort war in jedem Fall falsch.
+
+Abbildung \ref{encrypt-challenge} verdeutlicht die verwendete
+Verschl"usselung, Abbildung \ref{challenge-requests} den zeitlichen
+Ablauf des Protokolls.
+
+\begin{figure}\[
+\setlength{\unitlength}{1cm}
+\begin{picture}(11,3.5)
+
+\put(0,0){\framebox(11,3.5){}}
+
+\put(4,0){\line(0,1){3.5}}
+\put(7,0){\line(0,1){3.5}}
+\put(0,2.5){\line(1,0){11}}
+
+\put(2,3){\makebox(0,0){Client}}
+\put(5.5,3){\makebox(0,0){Zuh"orer}}
+\put(9,3){\makebox(0,0){Server}}
+
+\put(0.2,1.5){\framebox(1.2,0.5){Zufall}}
+\put(1.4,1.75){\vector(1,0){0.6}}
+\put(2,1.5){\framebox(1,0.5){DES}}
+\put(3,1.75){\vector(1,0){1.6}}
+\put(1.6,0.3){\framebox(1.8,0.5){Pa"swort}}
+\put(2.5,0.8){\vector(0,1){0.7}}
+
+\put(4.6,1.5){\framebox(1.8,0.5){@Yx!?a\{}}
+\put(6.4,1.75){\vector(1,0){1.6}}
+
+\put(8,1.5){\framebox(1,0.5){DES}}
+\put(7.6,0.3){\framebox(1.8,0.5){Pa"swort}}
+\put(8.5,0.8){\vector(0,1){0.7}}
+\put(9,1.75){\vector(1,0){0.5}}
+\put(9.5,1.5){\framebox(1.3,0.5){Zufall?}}
+
+\end{picture}\]
+\caption{Verschl"usselung der Herausforderung}
+\label{encrypt-challenge}
+\end{figure}
+
+\begin{figure}\[
+\begin{pspicture}(11.5,6.5)
+%\psgrid[subgriddiv=1,griddots=10]
+\psframe(11.5,6.5)
+\psline(3,6.5)(3,0)
+\psline(7,6.5)(7,0)
+\psframe[fillstyle=solid,fillcolor=lightgray](3,0)(7,6.5)
+\rput(2,6){{\sffamily\bfseries Client}}
+\rput(5,6){{\sffamily\bfseries Zuh"orer}}
+\rput(8,6){{\sffamily\bfseries Server}}
+\psline(0,5.7)(11.5,5.7)
+
+\psline{->}(2.5,5)(7.5,5)
+\rput(5,5.2){Negotiate Protocol}
+
+\rput[lB](8,4.5){H: Herausforderung}
+\psline{->}(7.5,4.5)(2.5,4.5)
+\rput(5,4.3){{\bfseries H}}
+
+\psline{->}(2.5,3)(7.5,3)
+\rput(5,3.2){Session Setup}
+\rput(5,2.8){{\bfseries Username, PW(H)}}
+\rput[lB](0.3,3.9){Herausforderung}
+\rput[lB](0.3,3.5){Username}
+\rput[lB](0.3,3.1){Pa"swort}
+
+\rput[lB](8,2.9){Username}
+\rput[lB](8.2,2.5){$\Rightarrow$ Pa"swort}
+\rput[lB](8.2,2.1){entschl"ussle PW(H)}
+
+% \pscurve{->}(5.8,2.7)(8,1.8)(9.5,1.8)(10,2)
+\rput[tl](9.8,1.9){$\Rightarrow$ =H?}
+
+% \pscurve{<->}(10.5,1.6)(10.8,1.5)(11.3,2)(11,3)(8.3,4.4)
+%\rput[t](10.8,1.4){=?}
+
+\psline{->}(7.5,0.8)(2.5,0.8)
+\rput(5,0.6){{\bfseries Ok?}}
+\end{pspicture}\]
+\caption{Challenge-Response Verfahren}
+\label{challenge-requests}
+\end{figure}
+
+Warum ist das Verfahren sicher? Die mit dem Pa"swort verschl"usselte
+Herausforderung hat den Server davon "uberzeugt, da"s der Benutzer
+sein Pa"swort kennt. Man k"onnte vermuten, da"s man diese
+verschl"usselte Herausforderung einfach nochmal schicken mu"s, um die
+Rechte des Benutzers zu bekommen. Dieser so genannte Replay-Angriff
+schl"agt jedoch fehl, da bei jeder neuen Anmeldung eine neue
+Herausforderung verschl"usselt werden mu"s. Dies gilt nat"urlich nur,
+wenn der Server sich jedes Mal eine neue Herausforderung
+ausdenkt$\ldots$
+
+Windows NT verh"alt sich diesbez"uglich vern"unftig. Windows 95 denkt
+sich jedoch nur alle 15 Minuten eine neue Herausforderung aus. Das
+hei"st, da"s jemand nur einen Verbindungsaufbau mitschneiden mu"s, und
+sich sofort danach mit der gleichen Benutzerkennung bei der gleichen
+Maschine anmelden kann. Man kann sich fast sicher darauf verlassen,
+die gleiche Herausforderung zu bekommen, und mit der mitgeschnittenen
+Antwort Zugriff zu erhalten. Dies gilt selbstverst"andlich nur f"ur
+die Zugriffe, bei denen Windows 95 als Server benutzt wird. Und wer
+tut das schon?
+
+Ein Zuh"orer verf"ugt "uber die Herausforderung und den
+verschl"usselten Wert. Mit diesen beiden Werten k"onnte er einen
+Known-Plaintext-Angriff gegen die Verschl"usselung starten. Das
+hei"st, es mu"s ein Verschl"usselungsalgorithmus gew"ahlt werden, der
+gegen einen solchen Angriff f"ur alle praktischen Belange immun ist.
+
+\subsection{Vor- und Nachteile von verschl"usselten Pa"sw"ortern}
+
+Das Challenge-Response Verfahren setzt voraus, da"s der Server "uber das
+Benutzerpa"swort im Klartext verf"ugt. Unter Unix tut er das nicht, sondern
+der Server kennt nur eine zerhackte Version des Pa"swortes. Die meisten
+Linuxsysteme speichern diesen Wert in der Datei \dateistyle{/etc/shadow},
+andere Unixe k"onnen die Pa"swortdatenbank in anderen Dateien abspeichern. Der
+Wert, der dort gespeichert wird, ist f"ur die Authentifizierung benutzbar. Der
+Server ist jedoch nicht in der Lage, daraus das Klartextpa"swort des Benutzers
+zu berechnen.
+
+Die Authentifizierung unter Unix benutzt eine Hashfunktion, die drei
+Eigenschaften erf"ullt:
+
+\begin{enumerate}
+
+\item Sie ist leicht zu berechnen. Dies ist notwendig, damit die
+Pa"swort"uberpr"ufung nicht zu lange dauert.
+
+\item Sie ist nur sehr schwer umkehrbar. Das hei"st, aus dem
+ zerhackten Pa"swort ist das Klartextpa"swort nicht berechenbar. Als
+ Beispiel f"ur eine solche Einwegfunktion soll hier die
+ Multiplikation herhalten. 98453*34761=3422324733 ist relativ einfach
+ zu berechnen. Da"s die Zahl 3422324733 aus den beiden
+ Ursprungszahlen entstanden ist, ist schon sehr viel schwieriger
+ herauszufinden. Es gibt Verfahren, bei denen es keinen R"uckweg gibt, der
+irgendwie berechnet werden kann. Um f"ur einen Funktionswert den Ausgangswert
+herauszubekommen, mu"s man alle m"oglichen Ausgangswerte durchprobieren oder
+gleich eine Wertetabelle mit allen Ausgangswerten anlegen.\footnote{Wie
+"uberall in der Kryptographie gilt
+ dies auch nur so lange, bis jemand den R"uckweg gefunden hat.}.
+
+Mit dieser Eigenschaft war es zu rechtfertigen, da"s in den fr"uhen Tagen von
+Unix die Hashwerte der Pa"sw"orter f"ur alle Benutzer lesbar waren, da
+niemand daraus etwas ableiten konnte. Mit dem "Uberflu"s an Rechenleistung
+kann man aber so genannte crack-Programme verwenden, die die erste
+Eigenschaft der Hashfunktion ausnutzen: Sie probieren einfach tausende von
+Pa"sw"ortern pro Sekunde aus. Schlechte Pa"sw"orter k"onnen so sehr schnell
+gefunden werden. Daher hat man die Pa"sw"orter in die nicht allgemein lesbare
+Datei \dateistyle{/etc/shadow} ausgelagert.
+
+\item Zwei verschiedene Pa"sw"orter f"uhren zu zwei verschiedenen Hashwerten.
+Damit kann das Loginprogramm ausreichend sicher sein, da"s ein korrekter
+Hashwert aus dem korrekten Pa"swort entstanden ist.
+
+\end{enumerate}
+
+Authentifizierung unter Unix setzt voraus, da"s der Client dem Server
+das Klartextpa"swort pr"asentiert. Der Server kann daraus den Hashwert
+berechnen, und mit dem gespeicherten Wert vergleichen. Leider verf"ugt er
+nicht "uber das Klartextpa"swort des Benutzers, um das
+Challenge-Response Verfahren durchf"uhren zu k"onnen. Daher mu"s unter Samba
+f"ur die Pa"swortversch"usselung eine zweite Pa"swortdatenbankgepflegt
+werden, die Datei \dateistyle{smbpasswd}.
+
+Was bis jetzt beschrieben wurde, entspricht nur fast der Wahrheit. Oben wurde
+beschrieben, da"s die Verschl"usselung der Herausforderung mit dem Pa"swort des
+Benutzers geschieht. Dies ist so nicht ganz richtig. Die Verschl"usselung
+geschieht mit einem Hashwert des Pa"swortes. Dieser Hashwert wird vom Client
+direkt nach Eingabe des Pa"swortes gebildet und gespeichert. Das gesamte oben
+beschriebene Verfahren wird dann mit diesem Hashwert durchgef"uhrt. Das hei"st,
+da"s auch in der Datei \dateistyle{smbpasswd} keine echten Klartextpa"sw"orter
+gespeichert werden m"ussen, sondern diese Hashwerte. Das hei"st, da"s man mit
+den dort enthaltenen Werten so direkt nicht mehr anfangen kann als mit den
+Werten aus der Datei \dateistyle{/etc/shadow} unter Unix. Wenn man sie als
+Pa"swort eingeben w"urde, w"urde Windows sofort wieder den Hash darauf
+anwenden, und einen anderen, also falschen Wert daraus errechnen. Das
+Programm \prog{smbclient} mu"s diese Operation ebenfalls durchf"uhren, nur
+hat man hierzu den Quellcode und kann die entsprechenden Stellen
+auskommentieren. So hat man die M"oglichkeit, sich anhand der Werte in der
+\dateistyle{smbpasswd} ohne Einsatz von crack bei einem NT-Rechner
+anzumelden. Damit sind die Werte aus der \dateistyle{smbpasswd} so gut wie
+Klartextpa"sw"orter.
+
+Alles nicht dramatisch, sagt Microsoft. Das "Aquivalent zur Datei
+\dateistyle{smbpasswd} liegt unter NT verschl"usselt vor. Diese
+Verschl"usselung mu"s jedoch reversibel sein, um das
+Challenge-Response Verfahren durchf"uhren zu k"onnen. Ein Teil der
+Sicherheitsargumentation liegt darin, da"s dieses
+Verschl"usselungsverfahren nicht offengelegt wurde. Das Verfahren war solange
+geheim, bis Jeremy Allison das Programm \prog{pwdump} ver"offentlicht hat.
+Dieses Programm extrahiert aus der Benutzerdatenbank von NT eine Datei, die
+direkt als
+\dateistyle{smbpasswd} verwendet werden kann \footnote{Allerdings nur f"ur
+Samba 1.9, zu 2.0 hin wurde das Format ge"andert. Es gibt in Samba 2.0 aber
+ein Konvertierungsskript.}.
+
+Das hei"st, der Administrator unter NT verf"ugt direkt "uber die
+Pa"sw"orter aller Benutzer oder zumindest "uber etwas Gleichwertiges.
+Damit hat er automatisch die M"oglichkeit, sich bei fremden Systemen
+anzumelden, sofern dort das Pa"swort gleich ist. Bei Unix kann sich
+der Administrator zwar in die Identit"at jedes Benutzers versetzen.
+Dies bleibt aber auf das lokale System beschr"ankt, da er das Pa"swort
+des Benutzers nicht kennt. Windows 2000 mit dem dort eingesetzten
+Kerberos-Verfahren ist in dieser Hinsicht "ubrigens nicht besser. Der
+Dom"anencontroller kennt hier ebenfalls die Klartextpa"sw"orter der Benutzer.
+Ihm wird also genau so vertraut wie einem NT4-Dom"anencontroller.
+
+Sollte ein neugieriger Administrator einmal an den tats"achlichen
+Klartextpa"sw"ortern seiner Benutzer interessiert sein, dann macht NT
+es ihm deutlich einfacher als Unix dies tut. Unix verwendet so
+genannte versalzene Pa"sw"orter. Wenn ein Pa"swort ge"andert wird,
+dann wird ein Zufallswert berechnet, dem Pa"swort hinzugef"ugt und
+dann die Hashfunktion durchgef"uhrt. Der Zufallswert wird der Datei
+\dateistyle{/etc/shadow} im Klartext hinzugef"ugt, damit die
+"Uberpr"ufung die gleichen Operationen durchf"uhren kann. So kann man
+keine Tabelle von Pa"sw"ortern und den zugeh"origen Hashwerten
+anlegen. Man kann auch nicht erkennen, wenn zwei Benutzer das gleiche
+Pa"swort verwenden. Windows NT verwendet dieses Verfahren nicht.
+
+Aus Kompatibilit"atsgr"unden mu"s NT auch noch zus"atzlich einen sehr
+schlechten Hashwert mitf"uhren. Bei alten Windowsversionen konnte das
+Pa"swort bis zu 14 Zeichen lang sein. War es k"urzer, wurde es mit
+Leerzeichen aufgef"ullt. Dann wurde mit den ersten 7 Zeichen ein
+Hashwert berechnet, und dann mit den zweiten 7 Zeichen. Das hei"st, es
+sind sofort alle Pa"sw"orter erkennbar, die weniger als 7 Zeichen
+haben, da die zweite H"alfte des Hashwertes immer gleich ist.
+
+\subsection{NT4 Service Pack 3}
+
+Um die Pa"swortverschl"usselung im Zusammenhang mit Windows NT 4
+Service Pack 3 und Windows 95 in sp"ateren Versionen gibt es immer
+noch weitverbreitete Mi"sverst"andnisse. Beispielsweise da"s alle
+Systeme vorher nicht in der Lage waren, mit verschl"usselten
+Pa"sw"ortern zu arbeiten. Richtig ist folgendes:
+
+\begin{itemize}
+\item \emph{Alle} Clients sind in der Lage, mit verschl"usselten
+ Pa"sw"ortern umzugehen. Das gilt f"ur alle aktuellen Clients
+ sowieso. Aber sogar der DOS-LanManager-Client, den man sich heute
+ noch von Microsofts FTP-Server laden kann, kann Pa"sw"orter
+ verschl"usseln.
+\item Auch die neuen Clients k"onnen sowohl mit verschl"usselten
+ Pa"sw"ortern, als auch mit Klartextpa"sw"ortern umgehen.
+\item Windows NT4 Service Pack 3 ist das erste NT-System, das sich in
+ der Default-Einstellung weigert, Klartextpa"sw"orter zu verschicken.
+\end{itemize}
+
+Ein Client wirkt an der Entscheidung "uber verschl"usselte Pa"sw"orter
+zun"achst einmal "uberhaupt nicht mit. Der Server wird f"ur
+verschl"usselte oder f"ur Klartextpa"sw"orter mit der Einstellung
+\param{encrypt passwords} konfiguriert. In der Antwort zum Negotiate
+Protocol teilt der Server dem Client seine Entscheidung mit. Der
+Server verschickt im Falle der verschl"usselten Pa"sw"orter noch eine
+Herausforderung mit. Der Server teilt dem Client m"oglicherweise mit,
+da"s er ein Klartextpa"swort sehen will. Der Client kann nur noch die
+Verbindung sofort abbrechen, sofern er keine Pa"sw"orter im Klartext
+verschicken m"ochte. Windows NT tut dies ab Service Pack 3 mit der
+Fehlermeldung, da"s man sich micht diesem Konto nicht an dem Server
+anmelden kann.
+
+\begin{center}
+\epsfig{file=konto.eps,width=6cm}
+\end{center}
+
+Windows 95 und folgende fragen immer wieder nach dem Kennwort f"ur die
+Freigabe \texttt{IPC\$}. F"ur alle Clientbetriebssysteme liefert Samba
+im Unterverzeichnis \dateistyle{docs/} Registrierungsdateien mit, mit
+denen diese Verweigerung von Klartextpa"sw"ortern abgestellt werden
+kann.
+
+Mit Klartextpa"sw"ortern bekommt man den gro"sen Vorteil, da"s man
+nicht zwei verschiedene Pa"swortdatenbanken pflegen mu"s. Einige
+Nachteile handelt man sich jedoch ein:
+
+\begin{itemize}
+\item Man mu"s heutzutage jeden Client anfassen, um die Registrierung
+ zu "andern.
+\item Man versendet Pa"sw"orter im Klartext, man hat also ein
+ m"oglicherweise erhebliches Sicherheitsproblem. Tools wie
+ \prog{dsniff}\footnote{Suchen Sie einmal auf http://freshmeat.net
+ nach dsniff und lesen Sie das README.} sammeln die Pa"sw"orter
+ automatisch auf.
+\item Man verliert jegliche Dom"anenfunktionalit"at, auf die weiter
+ unten noch genauer eingegangen wird. Ein Dom"anencontroller kann nur
+ mit verschl"usselten Pa"sw"ortern funktionieren.
+\end{itemize}
+
+Insgesamt kann man nur zu verschl"usselten Pa"sw"ortern raten, wenn
+nicht wirklich wichtige Gr"unde f"ur Klartextpa"sw"orter sprechen.
+
+\subsection{Migration zu verschl"usselten Pa"sw"ortern}
+
+Sind momentan Klartextpa"sw"ortern auaf einem Server im Einsatz, und
+ist die Migration zu verschl"usselten Pa"sw"ortern geplant, gibt es
+einen sehr einfachen Weg, dies binnen einer Woche ohne gro"se Arbeit
+zu erledigen. Direkt aus der \dateistyle{/etc/shadow} bekommt man die
+die NT- und LanManager-Hashes leider nicht heraus, da man dazu die
+Klartextpa"sw"orter ben"otigt. Nur aus diesen k"onnen die
+Windows-Hashwerte berechnet werden. Die Clients liefern die
+Pa"sw"orter jedoch bei jedem Anmelden im Klartext zum Server, und
+daraus k"onnen dann die Hashwerte berechnet werden. Dazu mu"s man aus
+der \dateistyle{/etc/passwd} mit dem Skript
+\dateistyle{mksmbpasswd.sh} zun"achst eine Datei
+\dateistyle{smbpasswd} machen, in der alle Benutzer mit leerem
+Pa"swort angelegt sind. Dieses Skript findet sich in den Samba-Quellen
+im Unterverzeichnis \dateistyle{source/script}. Die neu angelegte
+\dateistyle{smbpasswd} mu"s dann mit den korrekten Zugriffsrechten
+versehen werden:
+
+\begin{verbatim}
+sh mksmbpasswd.sh < /etc/passwd > /etc/smbpasswd
+chown root.root /etc/smbpasswd
+chmod 700 /etc/smbpasswd
+\end{verbatim}
+
+Die Migration leitet man mit den folgenden Einstellungen ein:
+
+\begin{verbatim}
+[global]
+ encrypt passwords = no
+ update encrypted = yes
+\end{verbatim}
+
+Jeder Benutzer, der sich anmeldet, liefert sein Pa"swort im Klartext
+an den Server. Dieser berechnet daraus die beiden Windows-Hashwerte
+und tr"agt sie in der \dateistyle{/etc/smpasswd} ein. Das hei"st, man
+mu"s jetzt nur abwarten, bis sich alle Benutzer einmal angemeldet
+haben, und kann dann verschl"usselte Pa"sw"orter aktivieren:
+
+\begin{verbatim}
+[global]
+ encrypt passwords = yes
+ update encrypted = no
+\end{verbatim}
+
+\section{Druckfreigaben}
+
+Um Drucker unter Samba zur Verf"ugung zu stellen, m"ussen diese von
+Unix aus ansprechbar sein. Unter Linux mit einem BSD-kompatiblen
+Drucksystem geschieht dies durch Eintr"age in der Datei
+\dateistyle{/etc/printcap}. Alle Drucker, die dort definiert sind,
+kann man als Netzwerkdrucker f"ur Windowsclients freigeben.
+
+Unter Linux ist die Frage der Druckertreiber noch nicht
+zufriedenstellend gel"ost. Druckertreiber unter Windows w"urde man
+unter Linux nicht als solche bezeichnen. In der Linuxwelt sind Treiber
+Softwaremodule, die direkt Hardware wie Netzwerkkarten oder den
+parallelen Port ansprechen. Druckertreiber im Sinne von Windows sind
+unter Linux so genannte Filter, die Druckdaten in ein f"ur den Drucker
+akzeptables Format aufbereiten. Das einheitliche Druckformat unter
+Linux ist Postscript, das mit dem Programm Ghostscript in viele
+druckereigene Formate umgewandelt werden kann. Druckertreiber unter
+Windows gehen vom Windows Metafile-Format aus, und wandeln dies
+entsprechend um. Das Windows Metafile-Format enth"alt Aufrufe an die
+Graphische Komponente von Windows, das GDI.
+
+Wenn man einen Drucker, der "uber Unix angesprochen wird, von Windows
+aus nutzen m"ochte, mu"s man planen, wo die Aufbereitung in das
+druckereigene Format geschehen soll. Zwei Wege sind denkbar.
+
+\begin{itemize}
+\item Auf den Arbeitspl"atzen wird ein generischer Postscripttreiber
+ installiert. Die Clients m"ussen nicht wissen, welches Druckermodell
+ sich hinter einer Freigabe verbirgt. Die Umwandlung findet auf dem
+ Druckerserver mittels \prog{ghostscript} statt.
+\item Der Druckertreiber reicht die Daten weiter, ohne sie weiter zu
+ behandeln. Auf den Arbeitspl"atzen werden f"ur jeden Netzdrucker die
+ korrekten Treiber installiert.
+\end{itemize}
+
+Beide Wege haben Vor- und Nachteile. Im ersten Fall hat man weniger
+Aufwand mit der Administration auf Clientseite. Man mu"s den korrekten
+"`Druckertreiber"' nur einmal definieren, am Druckerserver. Beim
+zweiten Weg kann man die bessere Unterst"utzung der Druckerhersteller
+f"ur die Windowsplattformen nutzen. Druckertreiber f"ur Windows bieten
+in der Regel die M"oglichkeit, Sonderfunktionen wie die Auswahl des
+Papierschachtes zu nutzen. Dieser erh"ohte Komfort zieht jedoch nach
+sich, da"s auf jedem Client der korrekte Druckertreiber installiert
+ist.
+
+Nutzt eine Windows NT Workstation einen Drucker, der von einem Windows
+NT Server freigegeben wurde, so gibt es noch die M"oglichkeit, die
+Druckaufbereitung komplett vom NT Server vornehmen zu lassen, und
+trotzdem s"amtliche Komfortfunktionen auf der Workstation zu nutzen.
+Dazu mu"s auf der Workstation kein Druckertreiber installiert sein.
+Diese so genannten EMF-Druckerwarteschlangen kann Samba zur Zeit nicht
+exportieren. Samba wird dies voraussichtlich auch nicht so schnell
+erm"oglichen, da hierf"ur gro"se Teile von Windows, n"amlich das GDI,
+auf Sambaseite implementiert werden m"u"ste.
+
+Eine Druckfreigabe wird genau wie eine Dateifreigabe in einem eigenen
+Abschnitt erstellt, wobei f"ur die Druckfunktion drei Optionen
+notwendig sind:
+
+\begin{verbatim}
+[deskjet]
+printable = yes
+printer = lp
+path = /tmp
+\end{verbatim}
+
+Zu einer Druckfreigabe wird die Definition durch die Angabe
+\param{printable = yes}.
+
+Mit der Option \param{printer =} wird festgelegt, welche
+Druckerwarteschlange unter Unix angesprochen werden soll. Diese
+Warteschlange mu"s das Format verstehen, das vom Windowsdruckertreiber
+geliefert wird. Also sollte hier entweder Postscript angenommen
+werden, oder die Daten sollten per so genannter Raw-Queue direkt ohne
+Umwandlung an den Drucker weitergeleitet werden.
+
+Die Option \param{path =} legt einen Spoolbereich fest. Ein Druckjob,
+den ein Windowsrechner an Samba schickt, mu"s zun"achst in einer Datei
+abgespeichert werden. Wenn diese Datei geschlossen wird, teilt der
+Client dem Server mit, da"s diese nun zum Drucker geschickt werden
+soll. Samba realisiert dies, indem das Programm \prog{lpr} mit der
+Druckdatei als Argument aufgerufen wird. Samba mu"s also f"ur sich die
+M"oglichkeit haben, Druckjobs in Dateien zu speichern, bevor sie an
+den \prog{lpd} "ubergeben werden. Dies sollte nicht das
+Spoolverzeichnis sein, das der \prog{lpd} selbst f"ur den Drucker
+vorsieht.
+
+\section{Windows NT Dom"anen}
+
+Installiert man eine Arbeitsgruppe von Windows NT Rechnern, dann
+bekommt man komplett getrennte Benutzerdatenbanken auf den einzelnen
+Rechnern. Erstellt man auf einem Server eine Freigabe und m"ochte f"ur
+diese Freigabe Rechte vergeben, so mu"s man zun"achst die
+Benutzer\footnote{Windows NT benutzt grunds"atzlich \param{security =
+ user}} einrichten, die Rechte auf dieser Freigabe bekommen sollen.
+Greift ein Benutzer von einer anderen Workstation auf die Freigabe zu,
+so probiert die Workstation das so genannte transparente Anmelden: Die
+Workstation versucht es erst einmal mit dem lokal angemeldeten
+Benutzer und seinem Pa"swort. Dadurch sieht es so aus, als ob man nur
+ein Benutzerkonto verwenden w"urde.
+
+Die Administration der Benutzerdatenbanken kann komplett von einem
+zentralen Rechner aus erfolgen. Dazu ben"otigt man den Benutzermanager
+f"ur Dom"anen\footnote{Benutzermanager f"ur Dom"anen}, der
+normalerweise bei Windows NT Server mitgeliefert wird. Man kann sich
+diesen aber auch kostenlos von Microsoft von der Webseite
+\url{http://www.microsoft.com/} beziehen. Man mu"s zu dem Rechner, den
+man administrieren m"ochte, eine Verbindung als Administrator
+aufbauen. Dazu mu"s man auf der Workstation, von der aus man
+administriert, auf der Kommandozeile mit
+
+\begin{verbatim}
+net use \\remote\ipc$ /user:administrator
+\end{verbatim}
+
+eine Verbindung aufgebaut werden. Kommt dann die Fehlermeldung
+\emph{Die Referenzen passen nicht zu einer bestehenden
+ Referenzenmenge}, so besteht unter einer anderen Benutzerkennung
+bereits eine Verbindung. In diesem Fall mu"s man sich ab- und neu
+anmelden, und den Befehl als allererstes absetzen, bevor irgend eine
+Verbindung zum entfernten Rechner \nbname{remote} aufgebaut werden
+kann. Hat man eine solche Verbindung, kann man im Benutzermanager f"ur
+Dom"anen im Men"upunkt \emph{Dom"ane ausw"ahlen} mit
+\nbname{\textbackslash{}\textbackslash{}remote} die Benutzerdatenbank
+von \nbname{remote} ausw"ahlen und voll administrieren.
+
+Diese Art der Administration skaliert nicht besonders gut. Jeden
+Benutzer mu"s es auf jedem Server geben, die lokalen Workstations
+brauchen ebenfalls separat gepflegte Benutzer. Mit Windows NT wurde,
+um dieses Problem zu l"osen, das Dom"anenkonzept eingef"uhrt. Mit
+einer Windows NT Dom"ane bekommt jeder Benutzer ein zentrales Konto,
+das auf allen Dom"anenmitgliedern g"ultig ist.
+
+Realisiert ist die Dom"ane durch einen speziellen Rechner, den Primary
+Domain Controller PDC, der seine Benutzerdatenbank f"ur andere im Netz
+zur Verf"ugung stellt. Alle Dom"anenmitglieder importieren diese
+Benutzerdatenbank. Somit sind auf den Dom"anenmitgliedern zwei
+Benutzerdatenbanken g"ultig: Die lokale und die des PDC.
+
+Die Kommunikation zwischen der Workstation und dem Primary Domain
+Controller l"auft verschl"usselt ab. Um eine solche Verschl"usselung
+zu erm"oglichen, mu"s ein gemeinsamer Schl"ussel vereinbart werden. Um
+sich "uber einen Schl"ussel einig zu werden, gibt es spezialisierte
+Protokolle, wie beispielsweise den Diffie-Hellmann
+Schl"usselaustausch. Um jeglichen Problemen mit Patenten oder
+Exportrestriktionen zu umgehen, ist Microsoft einen anderen Weg
+gegangen. Beim Schl"usselaustausch geht es im wesentlichen darum,
+sich "uber ein gemeinsames Geheimnis einig zu werden. Um ein
+gemeinsames Geheimnis zu wahren und zu pr"ufen, kennt Microsoft
+bereits eine Gruppe von Protokollen: Die Protokolle zum Pr"ufen und
+Austauschen von Benutzerpa"sw"ortern. Genau diese Protokolle werden
+verwendet, um die Kommunikation zwischen PDC und Workstation zu
+sichern. Das hei"st, es mu"s f"ur jedes Dom"anenmitglied ein
+Benutzerkonto auf dem PDC geben, damit f"ur dieses Konto ein Pa"swort
+vergeben werden kann. Dieses Benutzerkonto hei"st "ublicherweise
+Computerkonto.
+
+\section{Samba als Primary Domain Controller}
+
+Um Samba als PDC zu konfigurieren, sind in der \dateistyle{smb.conf}
+im Abschnitt \param{[global]} 2 Einstellungen notwendig:
+
+\begin{verbatim}
+domain logons = yes
+domain master = yes
+\end{verbatim}
+
+Eine vollst"andige \dateistyle{smb.conf} f"ur einen PDC sieht damit
+folgenderma"sen aus\label{pdc-smbconf}:
+
+\begin{verbatim}
+[global]
+ workgroup = samba
+ encrypt passwords = yes
+ domain master = yes
+ domain logons = yes
+\end{verbatim}
+
+Da"s ein PDC auch gleichzeitig Domain Master Browser sein mu"s, ist
+eine Einschr"ankung der Implementation der Microsoft-Clients.
+Eigentlich hat die Funktion des Domain Master Browsers (siehe
+Abschnitt \ref{browsing-im-wan}) nichts mit der Funktion als zentraler
+Server f"ur die Benutzerdatenbank zu tun. Die Clientimplementation von
+Microsoft setzt aber voraus, da"s beide Funktionen auf einer Maschine
+vereinigt sind. Auch funktionieren die Dom"anenfunktionen
+ausschlie"slich mit verschl"usselten Pa"sw"ortern. Ist man auf
+Klartextpa"sw"orter angewiesen, kann man Samba nicht als PDC
+einsetzen.
+
+Befinden sich Windows 9x Clients im Netz, k"onnen diese den Samba-PDC
+sofort ohne weitere Konfiguration als Anmeldeserver nutzen. Dazu
+tr"agt man in den Eigenschaften des Clients f"ur Microsoft-Netzwerke
+ein, da"s sich die Clients an der Samba-Dom"ane anmelden m"ussen. Ist
+dies erfolgreich, so kann man "uber die Systemsteuerung des Clients
+direkt sein SMB-Pa"swort auf dem Server "andern.
+
+\subsection{Manuelles Erstellen der Computerkonten}
+
+F"ur Dom"anenmitglieder unter Windows NT oder 2000 m"ussen noch die
+Computerkonten erstellt werden. Jedes Maschinenkonto mu"s unter Unix
+als normaler Benutzer existieren. Dieser Benutzer braucht weder ein
+Unixpa"swort, noch eine Login-Shell oder ein Heimatverzeichnis. Der
+Name des Benutzers ist der Name der Workstation, erg"anzt um ein
+\$-Zeichen. Erstellt wird ein solcher Benutzer f"ur die Workstation
+\nbname{WKS} unter Linux beispielsweise mit
+
+\begin{verbatim}
+root@erde: useradd -d /dev/null -s /bin/false wks\$
+root@erde: smbpasswd -a -m wks
+\end{verbatim}
+
+Der Befehl \prog{smbpasswd -a -m wks} f"ugt den Benutzer mit einem
+Standardpa"swort in die Datei \dateistyle{smbpasswd} ein. Das
+Standardpa"swort f"ur Computerkonten ist der Name der Workstation, in
+diesem Fall also \nbname{wks}. Man beachte, da"s beim Befehl
+\texttt{useradd} ein Dollarzeichen, maskiert durch den Backslash,
+hinzugef"ugt wurde. Der Befehl \prog{smbpasswd} f"ugt diesen bei
+Verwendung des Parameters \prog{-m} selbst hinzu.
+
+Nachdem das Computerkonto auf dem PDC erstellt wurde, kann in den
+Eigenschaften der Netzwerkumgebung in die Dom"ane gewechselt werden.
+Dabei wird das Pa"swort des Computerkontos ge"andert. Sollte aus
+irgendwelchen Gr"unden ein erneutes Betreten der Dom"ane notwendig
+sein, dann mu"s der Befehl \prog{smbpasswd -a -m wks} erneut
+ausgef"uhrt werden, um das Pa"swort des Computerkontos auf den
+Anfangswert zur"uckzusetzen.
+
+\subsection{Automatisches Erstellen der Computerkonten}
+
+Windows NT 4 bietet in dem Dialog, in dem in die Dom"ane gewechselt
+wird, die M"oglichkeit, das Computerkonto automatisch erstellen zu
+lassen. Dies geschieht unter Angabe eines Benutzers und Kennwortes,
+der auf dem PDC berechtigt ist, Computerkonten zu erstellen. Dies ist
+unter Unix nur \emph{root}, da die \dateistyle{/etc/passwd} hierzu
+ge"andert werden mu"s.
+
+Um das Computerkonto automatisch erstellen zu lassen, m"ussen zwei
+Dinge auf dem PDC konfiguriert sein:
+
+\begin{itemize}
+\item \emph{root} oder ein anderer Benutzer mit der UID 0 mu"s ein
+ Pa"swort in der \dateistyle{smbpasswd} haben. Dieses Pa"swort mu"s
+ nicht mit dem Systempa"swort von \emph{root} "ubereinstimmen. Wenn
+ man nicht \emph{root}, sondern beispielsweise einen Benutzer
+ \emph{admin} mit der UID 0 verwendet, braucht dieser Benutzer nicht
+ einmal eine Login-Shell auf Unix. Er mu"s nur in die
+ \dateistyle{/etc/passwd} schreiben d"urfen.
+\item Der Parameter \param{add user script} mu"s korrekt konfiguriert
+ werden. Mit \param{add user script} wird ein Unix-Script angegeben,
+ mit dem das Computerkonto in der \dateistyle{/etc/passwd} angelegt
+ wird. Beispielsweise kann man mit
+
+\begin{verbatim}
+add user script = useradd -d /dev/null -s /bin/false %u
+\end{verbatim}
+
+ die gleiche Wirkung erzielen wie mit der manuellen Konfiguration aus
+ dem letzten Abschnitt.
+\end{itemize}
+
+\subsection{BDCs mit Samba}
+
+In einer echten NT Dom"ane gibt es zwei Arten von Dom"anencontrollern:
+Prim"are Dom"anencontroller (PDCs) und Backup Dom"anencontroller
+(BDCs). Der PDC besitzt die Hauptkopie der Benutzerdatenbank
+SAM\todo{uebersetzung}, die BDCs halten read-only Kopien der SAM vor,
+um Authentifizierungsanfragen von Workstations und Mitgliedsservern
+beantworten zu k"onnen. Alle "Anderungen an der Benutzerdatenbank,
+beispielsweise Pa"swort"anderungen, m"ussen auf dem PDC durchgef"uhrt
+werden. Der PDC "ubertr"agt diese "Anderungen dann an die BDCs, damit
+diese wieder "uber den aktuellen Stand der Datenbank verf"ugen.
+
+Samba 2.2.2 ist noch kein voller Ersatz f"ur einen Backup Domain
+Controller in einer echten NT-Dom"ane. Auch kann Samba als PDC keinen
+echten NT-BDC mit Dom"anendaten versorgen. Die Protokolle zur
+Replikation der Benutzerdatenbank sind noch nicht vollst"andig
+implementiert. Das Samba Team, insbesondere Tim Potter, arbeitet
+jedoch daran, die Protokolle zu verstehen und in Samba zu integrieren.
+Vermutlich ist mit Erscheinen dieses Buches die echte
+BDC-Funktionalit"at bereits in Samba integriert.
+
+Wird Samba als PDC eingesetzt, k"onnen weitere Sambaserver jedoch als
+Backup Domain Controller eingesetzt werden. Die Replikation der
+Benutzerdatenbank zwischen den Servern kann mit Unix-Bordmitteln
+vorgenommen werden. Die wesentliche Idee beim Einsatz eines BDC ist
+seine \dateistyle{smb.conf}:
+
+\begin{verbatim}
+workgroup = samba
+encrypt passwords = yes
+domain master = no
+domain logons = yes
+\end{verbatim}
+
+Der Unterschied zum PDC ist die Zeile \param{domain master = no} im
+Gegensatz zu \param{domain master = yes}. Mit dieser
+\dateistyle{smb.conf} sehen die Workstations den BDC als
+Dom"anencontroller f"ur die Dom"ane \nbname{SAMBA} an.
+
+Wenn eine Workstation einen Benutzer authentifizieren mu"s, tut sie
+dies nicht selbst, sondern sucht ihren Dom"anencontroller f"ur die
+Best"atigung der Identit"at des Benutzers. Dies tut sie, indem sie
+eine NetBIOS-Namensanfrage nach dem Namen \nbname{SAMBA<1c>} absetzt.
+\nbname{SAMBA<1c>} ist ein NetBIOS-Gruppenname, den jeder
+Dom"anencontroller per Broadcast oder beim WINS-Server reserviert.
+Diese Reservierung wird bei Samba durch den Parameter \nbname{domain
+ logons = yes} angesto"sen. Im n"achsten Schritt authentifizieren
+sich die Workstation und der Dom"anencontroller gegenseitig anhand des
+Workstationkontos. Dieses Workstationkonto mu"s somit sowohl auf dem
+PDC, als auch auf den BDCs vorhanden sein, damit die Workstation auch
+die BDCs als Dom"anencontroller akzeptiert. Auch die gesamte restliche
+Benutzerdatenbank mu"s vom PDC auf die BDCs "ubertragen werden.
+
+\subsection{Hintergrund: Benutzerdatenbanken und SIDs}
+
+Unter Unix besteht ein Benutzer im wesentlichen aus einer numerischen
+Userid, und nicht mehr. Das Programm \prog{login} mu"s beim Anmelden
+des Benutzers anhand seines Namens herausfinden, welche numerische
+Userid er hat. Dazu sieht es in der Datei \dateistyle{/etc/passwd}
+nach. Mit der Datei \dateistyle{/etc/shadow} pr"uft \prog{login} das
+Pa"swort. Ist es korrekt, wird in die gefundene Userid umgeschaltet
+und die Loginshell des Benutzers gestartet. Nach diesem Vorgang ist
+es Unix v"ollig egal, wie der Benutzer hei"st, das einzige, was
+interessiert, ist der numerische Wert. Damit h"angt an jedem Proze"s
+eine endeutige Identifikation der Rechte, die er hat.
+
+Unter Unix ist es so, da"s Userids nur auf dem Rechner gelten, auf dem
+sie zugeordnet wurden. Es gibt keine M"oglichkeit, Rechte von einem
+Rechner auf den n"achsten zu "ubernehmen oder global Benutzer
+zuzuordnen. Die einzige M"oglichkeit, die man zu Vereinheitlichung
+hat, ist der Austausch der jeweils auf einem Rechner geltenden
+Tabellen "uber verschiedene Rechner hinweg. Genau das tut NIS. Die
+Benutzerdatenbank wird im Netz kopiert, gilt aber
+auf jedem Rechner rein lokal.
+
+Unter NT ist das zun"achst genau so. Es gibt eine numerische Userid,
+der Name des Benutzers ist nur w"ahrend der Anmeldung f"ur das System
+interessant. Nach der Anmeldung ist nur noch die numerische Userid
+relevant. Windows NT Benutzer sind jedoch im Gegensatz zu Unix
+Benutzern "uber Rechnergrenzen hin g"ultig. Um dies zu erreichen, wird
+der Benutzer nicht durch eine kleine Zahl beschrieben, sondern durch
+einen so genannten Security Identifier SID. Dieser SID besteht aus zwei
+wesentlichen Teilen. Der erste Teil besteht aus einer 96 Bit langen
+Zahl, die die Benutzerdatenbank des SID eindeutig identifiziert. Der
+zweite Teil ist der so genannte Relative Identifier RID. Der RID ist
+mit der numerischen Userid unter Unix vergleichbar. Da eine Userid
+unter NT jedoch \emph{nur} zusammen mit den 96 Bit der
+Benutzerdatenbank verwendet werden, sind Benutzer unterschiedlicher
+Maschinen oder Dom"anen unterscheidbar.
+
+Mit dieser eindeutigen Zuordnung von Benutzern zu ihren jeweiligen
+Benutzerdatenbanken wird es m"oglich, da"s eine Workstation
+gleichnamige Benutzer aus mehreren Benutzerdatenbanken lokal v"ollig
+gleichwertig verwenden kann. Je nachdem, ob sich ein Dom"anenbenutzer
+oder ein lokaler Benutzer an der Workstation anmelden m"ochte, wird
+die lokale Benutzerdatenbank oder die des PDC um Best"atigung des
+Kennwortes gebeten. Ist dies erfolgt, ist der Benutzer dem System nur
+noch unter dem numerischen SID bekannt. Dabei ist es v"ollig
+gleichg"ultig, ob es sich bei diesem SID um einen lokalen, oder einen
+Dom"anen-SID handelt.
+
+Jeder Sambaserver generiert beim ersten Start seine eigene
+Maschinenkennung und speichert sie in der Datei
+\dateistyle{MACHINE.SID} ab. Die Maschinenkennung wird sp"atestens
+dann ben"otigt, wenn der Sambaserver als Dom"anencontroller
+konfiguriert wird. Die Benutzer, die sich an den Workstations
+anmelden, m"ussen eine eindeutige Dom"anenkennung als Teil ihres SID
+bekommen. Selbst wenn der Sambaserver nicht als Dom"anencontroller
+fungiert, wird die Maschinenkennung verwendet. Beispielsweise bei der
+Anzeige der ACLs in den Sicherheitseigenschaften von Dateien und
+Verzeichnissen wird die Liste der Benutzer in Form eine SID-Liste
+"ubergeben. Diese SIDs m"ussen eindeutig sein und mit separaten
+Aufrufen in Benutzernamen "ubersetzt werden k"onnen.
+
+\section{Profile, Logon Scripts und Policies}
+
+Unter Unix gibt es f"ur jeden Benutzer ein Heimatverzeichnis als
+einzigen Bereich im System, in dem der Benutzer schreiben kann. So
+etwas kennt Windows in dieser restriktiven Form nicht, da viele
+Anwendungen voraussetzen, "uberall im System schreiben zu k"onnen. Aus
+Kompatibilit"atsgr"unden mu"s Windows also relativ offen sein. Dem
+Heimatverzeichnis am n"achsten kommt unter NT das Profil des
+Benutzers, ein ihm zugeordneter Bereich unter
+\verb|c:\winnt\profiles\<benutzername>|. Dort ist der Desktop, der
+benutzereigene Teil des Startmen"us, der Zweig HKEY\_CURRENT\_USER der
+Registry und vieles andere abgelegt. Also alles, was zur
+Arbeitsumgebung des Benutzers geh"ort.
+
+Meldet sich ein Benutzer bei NT das erste Mal an, wird aus
+\verb|c:\winnt\profiles\default user| eine Kopie in das benutzereigene
+Profil gelegt. Beim Anmelden an der n"achsten Workstation wird der
+gleiche Vorgang wiederholt. Das hei"st, jeder Benutzer hat an jeder
+Workstation ein anderes Profil. In einer Dom"anenumgebung m"ochte man
+nat"urlich erreichen, da"s ein Benutzer sein Profil mitnehmen kann,
+da"s er also an jedem Arbeitsplatz seine eigene Umgebung vorfindet.
+Windows l"ost dies mit den serverbasierten Profilen.
+
+F"ur jeden Benutzer kann ein Pfad angegeben werden, in dem sein Profil
+abgelegt wird. Viele Anwendungen setzen aber voraus, da"s das Profil auf
+einer lokalen Platte abgelegt wird. Folglich kopiert Windows beim Anmelden
+des Benutzers das Profil von seinem Serverpfad nach \verb|c:\winnt\profiles|
+und bei jedem abmelden wieder zur"uck auf den Serverpfad.
+
+Der Pfad f"ur das serverbasierte Profil wird bei Samba mit dem
+Parameter \param{logon path} festgelegt. Der Standardpfad steht auf
+\param{logon path =
+\textbackslash{}\textbackslash{}\%N\textbackslash{}\%U\textbackslash{}profile}
+.
+Damit wird im Heimatverzeichnis des Benutzers auf dem PDC ein
+Verzeichnis namens \dateistyle{profile} angelegt und das Profil dort
+gespeichert. Leider kann man mit Samba nicht sauber f"ur einzelne
+Benutzer festlegen, da"s sie ihre Profile auf einem Server ablegen,
+andere Benutzer ihre Profile aber lokal auf den Workstations belassen.
+
+\todo{logon home f"ur win95}
+
+\subsection{Anmeldeskripte}
+
+Meldet sich ein Benutzer an einer Dom"ane an, kann der Primary Domain
+Controller der Workstation mitteilen, da"s unter den Rechten des Benutzers
+eine Batchdatei automatisch ausgef"uhrt werden soll, das so genannte
+\emph{Logon Script}. Samba kennt den Parameter \param{logon
+ script}, mit dem der Name des Logon Schriptes festgelegt wird.
+Standarm"a"sig gibt es kein Logon Script. Wird eines festgelegt,
+bezieht es sich immer auf eine \dateistyle{.bat}-Datei in der
+festgelegten Freigabe \param{[netlogon]}. Eine vollst"andige
+\dateistyle{smb.conf} f"ur einen PDC s"ahe so aus:
+
+\begin{verbatim}
+[global]
+workgroup = samba
+encrypt passwords = yes
+domain master = yes
+domain logons = yes
+
+logon script = logon.bat
+
+[homes]
+writeable = yes
+valid users = %S
+
+ [netlogon]
+path = /data/netlogon
+\end{verbatim}
+
+Ein einfaches Logon Script in \dateistyle{/data/netlogon/logon.bat}
+kann so aussehen:
+
+\begin{verbatim}
+@echo off^M
+net use h: \\pdc\homes^M
+\end{verbatim}
+
+Die \verb|^M|-Zeichen am Zeilenende bezeichnen die
+DOS-Zeilenendekonvention, bei der an jedem Zeilenende zuerst ein
+Carriage Return und dann ein Linefeed kommt. Unix kennt nur den
+Linefeed als Zeilenende. Der Carriage Return ist hier entscheidend, da
+ansonsten Windows diese Batchdatei nicht ausf"uhren wird. Wenn ein
+Logon Script unter Unix editiert wird, bekommt man den Carriage Return
+im Editor normalerweise durch die Kombination Control-V Control-M.
+Moderne Editoren wie der vim oder der Emacs erkennen eine existierende
+Datei mit DOS-Zeilenendekonvention automatisch und speichern sie auch
+entsprechend wieder ab.
+
+\section{Samba als Dom"anenmitglied}
+\label{domain-member}
+Wenn man mehr als einen Sambaserver betreibt oder einen echten Windows-Server
+betreibt, ben"otigt man genau so wie mit einer echten Windows-Dom"ane eine
+zentrale Benutzerverwaltung.
+
+Die zentrale Verwaltung der Pa"sw"orter ist ein erster Schritt. Um dies zu
+erreichen, mu"s man mit Samba eine Windows NT-Dom"ane betreten. Dazu setzt
+man in der \dateistyle{smb.conf} folgende Parameter:
+
+\begin{verbatim}
+[global]
+ workgroup = windows
+ security = domain
+ password server = *
+ encrypt passwords = yes
+ name resolve order = wins bcast
+\end{verbatim}
+
+Im Kapitel \ref{smb-sitzungen} wurde beschrieben, wie eine SMB-Sitzung
+aufgebaut wird. Dort wurde auf den Unterschied zwischen \param{security
+= share} und \param{security = user} eingegangen. \param{security = domain}
+verh"alt sich aus der Sicht eines Clients genau wie \param{security = user},
+es wird vom Benutzer im Session
+Setup ein Benutzername, eine Dom"ane und ein Kennwort verlangt. Ist das
+Kennwort nicht korrekt, so wird der Benutzer zur"uckgewiesen. Der Parameter
+\param{security = domain} bewirkt nun, da"s das Pa"swort nicht wie bei
+\param{security = user} in der lokalen \dateistyle{smbpasswd} nachgesehen
+wird, sondern an einen PDC weitergeleitet wird. Dieser entscheidet dann, ob
+das Pa"swort korrekt ist oder nicht. Best"atigt der PDC das Pa"swort,
+akzeptiert Samba den Benutzer. Kann der PDC die Benutzeridentit"at nicht
+best"atigen, macht Samba einen zweiten Versuch anhand der lokalen
+\dateistyle{smbpasswd}. Damit kann man es erreichen, da"s f"ur Administratoren
+der Zugriff auf den Sambaserver noch m"oglich ist, falls einmal kein
+Dom"anencontroller verf"ugbar sein sollte.
+
+Zus"atzlich zu \param{security = domain} gibt es noch
+\param{security = server}. Diese Einstellung ist jedoch nicht mehr zu
+empfehlen, dazu mehr am Ende des Kapitels.
+
+F"ur den Parameter \param{password server} gibt es zwei
+M"oglichkeiten. Entweder man setzt ihn auf * wie im Beispiel
+geschehen. Dann sucht sich Samba mit NT-konformen Mitteln selbst den
+PDC oder einen BDC, um Benutzer zu authentifizieren. Man kann aber
+auch eine Liste von NetBIOS-Namen angeben, mit denen Samba arbeiten
+soll. In beiden F"allen ist es wichtig, da"s die Namensaufl"osung
+einwandfrei funktioniert. Samba mu"s in der Lage sein, einen
+Dom"anencontroller f"ur die Authentifizierung zu finden. Dies ist eine
+der wenigen Stellen, bei denen Samba als NetBIOS-Client arbeitet.
+Daher ist es hier m"oglicherweise n"otig, die \param{name resolve
+ order} korrekt zu setzen. Insbesondere ist dies wichtig, wenn die
+Namen der PDCs im DNS bereits vergeben sind und vielleicht auf andere
+Maschinen zeigen als die entsprechenden NetBIOS-Namen.
+
+Um f"ur bestimmte Benutzer nicht auf den PDC angewiesen zu sein,
+versucht Samba bei einem erfolglosen Versuch der Dom"anenanmeldung
+zus"atzlich, den Benutzer in der \dateistyle{smbpasswd} zu finden.
+Damit kann der Server mit m"oglicherweise nicht aktuellen Pa"sw"ortern
+funktionsf"ahig gehalten werden, auch wenn der PDC einmal ausfallen
+sollte.
+
+Samba mu"s, um Pa"sw"orter an den PDC weiterzuleiten, genau wie eine
+NT-Workstation ein Computerkonto auf dem PDC besitzen und die Dom"ane
+betreten. Das Computerkonto kann auf dem PDC mit dem Servermanager
+oder mit dem Kommando
+
+\begin{verbatim}
+net computer <name> /add
+\end{verbatim}
+
+auf der Kommandozeile erledigt werden. Danach kann Samba mit dem
+Aufruf
+
+\begin{verbatim}
+smbclient -j DOMAIN -r PDCNAME
+\end{verbatim}
+
+die Dom"ane betreten. Seit Samba 2.2.2 ist es zus"atzlich m"oglich,
+das Computerkonto wie von einer NT Workstation aus beim Betreten der
+Dom"ane automatisch erstellen zu lassen. Dies geschieht, indem man dem
+Aufruf von \prog{smbpasswd -j} noch einen berechtigten Benutzer
+mitgibt:
+
+\begin{verbatim}
+smbclient -j DOMAIN -r PDCNAME -U Administrator
+\end{verbatim}
+
+\prog{smbclient} erfragt das Pa"swort des Dom"anenadministrators. Nach
+Eingabe des Pa"swortes wird das Computerkonto auf dem PDC erstellt und
+das entsprechende Pa"swort korrekt gesetzt.
+
+Ist Samba Dom"anenclient, so wird das Pa"swort zum Computerkonto in
+der Datei \dateistyle{secrets.tdb} abgespeichert. Diese
+"ubernimmt damit die Aufgabe der Datei
+\dateistyle{DOMAIN.MACHINE.mac}, die es bis Samba 2.0 gab. Geht diese
+Datei verloren, mu"s die Dom"ane neu betreten werden. Dies kann durch
+Entfernen und wieder Hinzuf"ugen zur Dom"ane mit dem Servermanager und
+nachfolgendes \prog{smbpasswd -j} oder durch ein automatisches
+Erstellen des Computerkontos geschehen.
+
+\todo{allow trusted domains}
+
+Mit der Dom"anenmitgliedschaft wird der Sambaserver nur von der
+Pa"swortverwaltung befreit. Um die Benutzer und Gruppen mu"s er sich
+weiterhin selbst k"ummern. Eine gewisse Erleichterung kann dabei das
+\param{add user script} bringen, das bei Samba als PDC daf"ur gesorgt
+hat, die Computerkonten in der \param{/etc/passwd} automatisch zu
+erstellen. Ist Samba Dom"anenmitglied, so wird bei einer
+Benutzeranfrage auf den Server zun"achst der PDC nach der Richtigkeit
+des Pa"swortes befragt. Best"atigt dieser das Pa"swort und will der
+Benutzer dann auf das Dateisystem des Sambaservers zugreifen, so wird
+eine Unix UID ben"otigt, Samba schaut in die \dateistyle{/etc/passwd}.
+Findet Samba dort trotz erfolgreicher Anmeldung am PDC keinen
+Benutzer, so wird das \param{add user script} mit entsprechenden
+Argumenten aufgerufen, um den Benutzer zu erstellen.
+
+Damit mu"s man sich teilweise nicht mehr um die Verwaltung der
+Benutzer auf dem Sambaserver k"ummern. Teilweise deswegen, da von dem
+neu anzulegenden Benutzer ausschlie"slich der Name bekannt ist. Es
+fehlt jegliche Information dar"uber, in welchen Gruppen sich der
+Benutzer in der Dom"ane befindet. Diese Einschr"ankung macht eine
+Rechteverwaltung auf dem Sambaserver sehr schwierig bis unm"oglich.
+
+Unter Unix gibt es mehrere M"oglichkeiten, "uber Rechnergrenzen hinweg die
+Benutzerdatenbanken zu synchronisieren. Das reicht vom unsicheren NIS bis hin
+zur skriptgesteuerten Verteilung der Dateien \dateistyle{/etc/passwd} und
+\dateistyle{/etc/group} "uber rsync und ssh. Setzt man f"ur die Datei- und
+Druckdienste komplett auf Unix mit Samba, kann man so eine zentrale
+Verwaltung der Server erreichen. Die \dateistyle{smbpasswd} mu"s dabei in die
+Verteilung der Benutzerdatenbanken nicht mit einbezogen werden, da hierf"ur
+eine Dom"ane aufgebaut werden kann. Einer der Server wird zum
+Dom"anencontroller erkl"art, die anderen Server sind ganz normale
+Mitgliedsserver, die die Pa"sw"orter vom Dom"anencontroller "uberpr"ufen lassen.
+
+\subsection{Hintergrund: \param{security = server}}
+
+Vor Samba 2.0 gab es f"ur die zentrale Verwaltung von Pa"sw"ortern nur
+die M"oglichkeit, \param{security = server} zu setzen. Damit konnte
+ein Sambaserver sehr einfach die Anmeldung von einem weiteren Server
+oder einer NT Workstation beziehen. Samba 2.0 und 2.2 beherrschen
+diese M"oglichkeit immer noch, man sollte jedoch strikt von ihrer
+Nutzung abraten, da sie erhebliche Probleme mit sich bringt.
+\param{security = server} nutzt nicht das Dom"anencontrollerprotokoll,
+sondern leitet den Benutzernamen und das Pa"swort an einen Server
+weiter. Dies ist im Prinzip nicht schlecht, birgt aber ein subtiles
+Problem. Setzt man keine verschl"usselten Pa"sw"orter ein, verschicken
+viele Clients die Pa"sw"orter in Gro"sbuchstaben. Verlangt der
+Pa"swortserver nun verschl"usselte Pa"sw"orter, mu"s Samba raten. Dies
+kostet Last und Zeit. Setzt man auf dem Sambaserver verschl"usselte
+Pa"sw"orter ein, handelt man sich ein noch subtileres Problem ein. Um
+das zu verstehen, sollte man sich das Kapitel \ref{passwoerter} auf
+jeden Fall genau angesehen haben.
+
+In der Antwort zur Anfrage Negotiate Protocol liefert der Server dem
+Client eine Herausforderung. Im Session Setup mu"s der Client die mit
+dem Pa"swort verschl"usselte Herausforderung liefern. Will Samba dies
+nun gegen"uber einem Pa"swortserver machen, so mu"s er zun"achst einen
+Negotiate Protocol absetzen, um vom Pa"swortserver eine
+Herausforderung zu erhalten. Diese Herausforderung liefert er seinem
+Client direkt weiter, damit dieser sie dann mit dem Pa"swort
+verschl"usseln kann. Da es pro Verbindung vom Client zum Server nur
+einen Negotiate Protocol Request gibt, gilt die Herausforderung f"ur
+die gesamte Verbindung. Viele Clients setzen aber mehrere Session
+Setups "uber die gleiche Verbindung ab. Damit der Sambaserver zwischen
+Client und Pa"swortserver immer mit der gleichen Herausforderung
+arbeiten kann (der Client sieht nur diese eine Herausforderung), mu"s
+er zum Pa"swortserver st"andig eine Verbindung offen halten. Br"ache
+diese Verbindung ab, bek"ame der Sambaserver vom Pa"swortserver eine
+neue Herausforderung mitgeteilt. Der Sambaserver hat leider keine
+M"oglichkeit, den Client dazu zu zwingen, eine neue Herausforderung zu
+verlangen. Die einzige M"oglichkeit ist, die Verbindung zum Client
+abzubrechen, um einen neuen Negotiate Protocol zu verlangen. Damit
+gibt es zwei Probleme:
+
+\begin{itemize}
+\item Pro Clientsystem mu"s der Sambaserver st"andig eine Verbindung
+zum Pa"swortserver offenhalten. Damit werden auf dem Pa"swortserver
+erhebliche Resourcen gebunden.
+\item Das Netz wird au"serordentlich instabil, sollte sich der
+Pa"swortserver entscheiden, diese vielen nicht besonders aktiven
+Verbindungen abzubrechen. Clients werden sich am Sambaserver
+erneut anmelden m"ussen.
+\end{itemize}
+
+Das Dom"anencontrollerprotokoll l"ost diese beiden Probleme, indem es
+dem Sambaserver erlaubt, sich eine eigene Herausforderung pro Client
+auszudenken und diese bei der Netzwerkanmeldung beim PDC
+mitzuschicken. Um kein Sicherheitsproblem aufkommen zu lassen, mu"s
+diese Netzwerkanmeldung vom Sambserver zum PDC verschl"usselt sein,
+daher das Computerkonto, dessen Pa"swort als Schl"ussel f"ur die
+symmetrische Verschl"usselung zwischen Sambaserver und PDC verwendet
+wird.
+
+\section{winbind}
+
+Wenn man Samba als Dom"anenmitglied betreibt, hat man die gr"o"ste
+H"urde zu einer problemlosen Integration bereits genommen: Die
+Pa"swortverwaltung. Jeder Benutzer kann sein Pa"swort in der Dom"ane
+"andern, und die "Anderung wird sofort auf allen Dom"anenmitgliedern
+sichtbar. Ein Problem bleibt jedoch bestehen. Man mu"s auf den
+Sambaservern, die Dom"anenmiglieder sind, die Benutzer
+nachpflegen. Wird ein neuer Benutzer in der Dom"ane angelegt, oder
+werden Gruppenmitgliedschaften ge"andert, mu"s dies manuell auf den
+Sambaservern eingetragen werden. Ist auch der Primary Domain Cotroller
+ein Sambaserver, kann man sich mit dem Network Information System NIS
+behelfen, aber wenn die Benutzerdatenbank auf einem echten NT-Server
+liegt, ist dieser Weg verschlossen.
+
+Eine wirklich zwischen Windows NT und Unix vereinheitlichte
+Benutzerdatenbank bietet seit Samba 2.2.2 der D"amon
+\defin{winbind}. Er erm"oglicht die volle Einbindung eines Unixsystems
+in eine NT-Dom"ane. Voraussetzung daf"ur ist die Unterst"utzung der
+\prog{nsswitch}-Module. Momentan bieten dies Linux und Solaris. Die
+anderen von Samba unterst"utzten Unixsysteme bleiben au"sen vor.
+
+\subsection{nsswitch-Module}
+
+Viele Programme unter Unix m"ussen auf Datenbanken im Verzeichnis
+\dateistyle{/etc} zugreifen. Beispielsweise mu"s \prog{ls -l} den
+Dateibesitzer, der in der Datei nur in numerischer Form vorliegt, in
+einen Benutzernamen "ubersetzen. Dazu mu"s die numerische User-ID in
+der Datei \dateistyle{/etc/passwd} gesucht werden. Da"s diese
+"Ubersetzung tats"achlich stattfindet, kann man leicht folgenderma"sen
+"uberpr"ufen. Man mu"s nur testweise die Leserechte f"ur
+\username{others} von der Datei \dateistyle{/etc/passwd} mit
+\prog{chmod o-r /etc/paswd} wegnehmen und \prog{ls -l} aufrufen. Die
+Dateibesitzer werden nur noch numerisch angezeigt\footnote{Sollte dies
+nicht spontan funktionieren, kann der \prog{nscd} schuld sein. Siehe
+hierzu Seite \pageref{nscd}.}
+
+Sauber geschriebene Programme greifen nicht direkt auf die Dateien in
+\dateistyle{/etc} zu, sondern durch Bibliotheksaufrufe wie beispielsweise
+\prog{getpwuid(2)}. Seit der glibc-Version 2 werden diese Bibliotheksaufrufe
+in dynamisch geladenen Modulen implementiert. Gesteuert werden diese Module
+"uber die Datei \dateistyle{/etc/nsswitch.conf}. F"ur jede der Dateien in
+\dateistyle{/etc}, die von allgemeinem Interesse ist, gibt es eine
+Zeile in der \dateistyle{/etc/nsswitch.conf}. Beispielsweise wird der
+Zugriff auf die Datei \dateistyle{/etc/passwd} "uber die Zeile
+
+\begin{verbatim}
+passwd: compat
+\end{verbatim}
+
+\noindent oder
+
+\begin{verbatim}
+passwd: files nis
+\end{verbatim}
+
+\noindent gesteuert. Durch die erste Version wird ein
+Kompatibilit"atsmodul zum Zugriff herangezogen, die zweite Variante
+legt explizit fest, da"s zuerst in der lokalen Datei
+\prog{/etc/passwd} nach Benutzern gesucht werden soll. Schl"agt dies
+fehl, wird das NIS befragt.
+
+Wie funktioniert diese Steuerung? Die Option \param{compat} bewirkt,
+da"s zur Laufzeit eines Programms die dynamische Bibliothek
+\dateistyle{/lib/libnss\_{\bfseries compat}.so.2} geladen wird und die
+Anfrage beantworten mu"s. \param{files} und \param{nis} beziehen sich
+entsprechend auf die Dateien \dateistyle{/lib/libnss\_{\bfseries
+ files}.so.2} und \dateistyle{/lib/libnss\_{\bfseries nis}.so.2}.
+
+\prog{winbind} besteht aus zwei Teilen: Einer Datei
+\dateistyle{libnss\_winbind.so} und einem D"amon \prog{winbind}. In
+den Samba-Quellen findet sich der winbind unter
+\dateistyle{source/nsswitch}. Dort wird auch die Datei
+\dateistyle{libnss\_winbind.so} abgelegt. Zur Installation mu"s sie
+manuell nach \dateistyle{/lib} kopiert werden:
+
+\begin{verbatim}
+cp source/nsswitch/libnss_winbind.so /lib/libnss_winbind.so.2
+\end{verbatim}
+
+Der \prog{winbindd} selbst wird automatisch mit im
+\dateistyle{sbin}-Unterverzeichnis von Samba installiert.
+
+\subsection{Konfiguration von Winbind}
+
+Um Winbind zu aktivieren, m"ussen in der Datei
+\dateistyle{/etc/nsswitch.conf} die beiden Zeilen f"ur \param{passwd}
+und \param{group} durch die Angabe \param{winbind} erg"anzt werden,
+etwa so:
+
+\begin{verbatim}
+# /etc/nsswitch.conf
+passwd: files winbind
+group: files winbind
+\end{verbatim}
+
+Damit werden Benutzer und Gruppen zuerst in den lokalen Dateien
+gesucht. Danach wird der \prog{winbindd} befragt, der im Hintergrund
+laufen mu"s.
+
+F"ur die Konfiguration des \prog{winbindd} mu"s Samba ein normales
+Dom"anenmitglied sein. Siehe hierzu Kapitel \ref{domain-member}. Der
+\prog{winbindd} ben"otigt in der \dateistyle{/etc/smb.conf} einige
+zus"atzliche Parameter. Eine vollst"andige Beispielkonfiguration ist
+die folgende:
+
+\begin{verbatim}
+; Samba als Domaenenmitglied
+workgroup = windows
+security = domain
+password server = *
+encrypt passwords = yes
+
+; Winbind-Konfiguration
+winbind separator = +
+winbind uid = 10000-20000
+winbind gid = 10000-20000
+template shell = /bin/bash
+template homedir = /home/%D/%u
+\end{verbatim}
+
+Die Parameter bedeuten im einzelnen:
+
+\begin{description}
+
+\item[winbind separator:] Unter Windows wird ein vollst"andiger
+ Benutzername mit Dom"ane in der Form
+ \username{DOMAENE\textbackslash{}benutzername} angegeben. Unter Unix
+ hat dies Nachteile, da der Backslash \textbackslash{} f"ur die Shell
+ eine Sonderbedeutung hat. Daher kann man den Trenner zwischen
+ Dom"ane und Benutzername separat konfigurieren. Als unkritisch
+ erweist sich das +-Zeichen. Ein Benutzer wird somit als
+ \username{DOMAENE+benutzername} angegeben.
+
+\item[winbind uid:] Der \prog{winbindd} mu"s dynamisch f"ur
+ Dom"anenbenutzer numerische User-IDs vergeben. Um dies tun zu
+ k"onnen, wird ihm mit dem Parameter \param{winbind uid} eine Menge
+ von User-IDs "ubergeben, die nicht in der \dateistyle{/etc/passwd}
+ oder im NIS verwendet werden. Wird auf einen Benutzernamen das erste
+ Mal zugegriffen, w"ahlt der \prog{winbindd} f"ur diesen Benutzer aus
+ seinem Pool die n"achste freie User-ID aus und speichert diese
+ Zuordnung fest in der Datei \dateistyle{winbindd\_idmap.tdb}.
+
+\item[winbind gid:] F"ur Group-IDs gilt das gleiche wie f"ur User-IDs.
+
+\item[template shell:] Der Primary Domain Controller kennt das Konzept
+ der Login-Shell nicht. Diese mu"s zentral f"ur alle Winbind-Benutzer
+ in der \dateistyle{smb.conf} vergeben werden.
+
+\item[template homedir:] Auch ein Heimatverzeichnis wird in der SAM
+ von Windows nicht abgespeichert und mu"s in der
+ \dateistyle{smb.conf} vorgegeben werden. Hierbei sollte man auf
+ jeden Fall die Dom"ane des Benutzers in den Pfad mit aufnehmen, um
+ Namenskollisionen bei Vertrauensstellungen zu behandeln. Der
+ Benutzer \username{schmidt} in der Dom"ane \username{GOE} sollte ein
+ anderes Heimatverzeichnis bekommen als der Benutzer
+ \username{schmidt} in der Dom"ane \username{HD}. Die
+ Heimatverzeichnisse werden selbstverst"andlich nicht automatisch
+ erzeugt, sondern m"ussen manuell angelegt und den Benutzern
+ "ubergeben werden. Auf einem reinen Fileserver mit gemeinsamen
+ Dateien ist es jedoch m"oglicherweise nicht notwendig, f"ur jeden
+ Benutzer eigene Heimatverzeichnisse anzulegen.
+\end{description}
+
+Mit diesen Einstellungen kann man den \prog{winbindd} zus"atzlich zu
+\prog{smbd} und \prog{nmbd} starten, die ebenfalls laufen m"ussen.
+
+\subsection{Winbindd abfragen: wbinfo}
+
+Laufen \prog{winbindd}, \prog{smbd} und \prog{nmbd} in der Dom"ane,
+kann man das ganze testen. Das Utility zum Testen hei"st
+\prog{wbinfo}. Der wichtigste Test ist der Aufruf \prog{wbinfo -t}.
+Damit wird die Verbindung zum Dom"anencontroller gepr"uft,
+\prog{winbindd} sucht den PDC und meldet sich mit dem Workstationkonto
+an. Das Programm \prog{wbinfo} mu"s die Ausgabe \texttt{Secret is
+ good} geben. Gibt \prog{wbinfo} diese Ausgabe, so ist der
+\prog{winbindd} g"ultiges Dom"anenmitglied und kann Informationen vom
+PDC abrufen.
+
+\prog{wbinfo} kennt noch eine Reihe weiterer Parameter, mit denen die
+Benutzerdatenbank der Dom"ane abgefragt werden kann. Die Ausgabe des
+Aufrufts \prog{wbinfo} ohne Parameter gibt einen Hilfetext mit den
+verf"ugbaren Optionen aus.
+
+Schl"agt \prog{wbinfo -t} fehl, so mu"s die Dom"anenmitgliedschaft
+"uberpr"uft werden. Hierzu siehe Kapitel \ref{domain-member}.
+
+Verl"auft der Test mit \prog{wbinfo -t} erfolgreich, so kann man sich
+s"amtliche verf"ugbaren Benutzer mit \prog{getent passwd} und die
+Gruppen mit \prog{getent group} auflisten lassen.
+
+\todo{valid users = @DOMAIN+group}
+
+\todo{pam\_winbind}
+
+\subsection{nscd}
+\label{nscd}
+
+Unter Linux ist der Name Service Caching Daemon \prog{nscd} ist ein
+Programm, mit dem s"amtliche Abfragen durch den nsswitch-Mechanismus
+gecached werden k"onnen. Der \prog{nscd} macht Sinn, wenn diese
+Anfragen sehr lange dauern. Dies kann der Fall sein, wenn die Dateien
+sehr gro"s sind, etwa wenn hunderte von Usern im System angelegt sind.
+Ein anderer Verz"ogerungsgrund ist die Abfrage von Benutzerdaten "uber
+ein Netzwerk beim Einsatz von NIS.
+
+Ein Nachteil des \prog{nscd} kann sein, da"s er "Anderungen in der
+Benutzerdatenbank nicht schnell genug mitbekommt. Insbesondere beim
+Testen des \prog{winbind} kann dies sehr hinderlich sein. Wer
+beispielsweise folgendes schon einmal erlebt hat, hat ein Problem mit
+dem \prog{nscd}:
+
+\begin{verbatim}
+delphin:~ # useradd -m vl
+delphin:~ # passwd vl
+passwd: Unknown user vl
+delphin:~ #
+\end{verbatim}
+
+In diesem Falle sollte man den \prog{nscd} schleunigst killen und
+daf"ur sorgen, da"s er beim n"achsten booten nicht wiederkommt.
+
+
+\section{smbcontrol}
+
+Bis zur Version 2.0 hatte man relativ wenig M"oglichkeiten, in das
+laufende Samba einzugreifen. Man konnte mit dem Signal \texttt{USR1}
+den Debuglevel um einen Punkt erh"ohen und mit \texttt{USR2} um einen
+Punkt erniedrigen. Dar"uber hinaus blieb h"aufig nur die M"oglichkeit,
+einzelne Sambaprozesse oder sogar das ganze Samba herunterzufahren,
+wenn man Konfigurations"anderungen vorgenommen hatte. Mit Samba 2.2
+gibt es f"ur diese Anwendungen ein neues Werkzeug: \prog{smbcontrol}.
+\prog{smbcontrol} bietet die M"oglichkeit, einzelne Dinge anzusto"sen.
+\prog{smbcontrol} verschickt hierzu Nachrichten an einzelne
+Sambaprozesse, oder an alle \prog{smbd}s.
+
+Man kann jetzt im Gegensatz zu Samba 2.0 den Debuglevel einzelner
+Prozesse direkt setzen. Dies geschieht wie in folgendem Beispiel:
+
+\begin{verbatim}
+root@server:~ > smbcontrol smbd debuglevel
+Current debug level of PID 4423 is 0
+Current debug level of PID 17392 is 0
+Current debug level of PID 22272 is 0
+root@server:~ > smbcontrol 17392 debug 1
+root@server:~ > smbcontrol smbd debuglevel
+Current debug level of PID 4423 is 0
+Current debug level of PID 17392 is 1
+Current debug level of PID 22272 is 0
+\end{verbatim}
+
+An diesem Beispiel ist deutlich, wie \prog{smbcontrol} zu benutzen
+ist. Als ersten Parameter verlangt \prog{smbcontrol} das Ziel der
+Nachricht, die es verschicken soll. Zweiter Parameter ist die
+Nachricht, die verschickt werden soll. Daran schlie"sen sich dann
+weitere Parameter an, die m"oglicherweise zu der Nachricht geh"oren.
+
+Die Nachrichten im Einzelnen:
+
+\begin{description}
+\item[debug:] Mit dieser Nachricht wird der Debuglevel anhand des
+ weiteren Parameters gesetzt.
+\item[debuglevel:] \prog{smbcontrol} liest hiermit den aktuellen
+ Debuglevel von Prozessen aus.
+\item[force-election:] Mit dieser Nachricht wird eine Wahl zum Local
+ Master Browser erzwungen. Diese Nachricht kann nur an den
+ \prog{nmbd} geschickt werden. Der \prog{smbd} hat mit der Wahl
+ nichts zu tun.
+\item[ping:] Mit dieser Nachricht k"onnen Prozesse einfach zum
+ Antworten bewegt werden. {\bfseries ping} erwartet einen Parameter,
+ der die Anzahl der Pings zum Ziel festlegt.
+\item[profile:] Diese Nachricht ist f"ur Entwickler gedacht. Um das
+ Profiling zu nutzen, mu"s Samba mit der \prog{configure}-Option
+ \texttt{-{}-with-profiling-data} compiliert werden. Dann kann mit
+ dieser Nachricht der interne Profiling-Code gesteuert werden. Damit
+ k"onnen Entwickler die Teile des Codes bestimmen, in denen am
+ meisten Zeit verbraucht wird.
+\item[profilelevel:] Diese Nachricht ist ebenfalls f"ur Entwickler
+ gedacht.
+\item[close-share:] Der \prog{smbd} kann mit dieser Nachricht dazu
+ bewegt werden, alle Verbindungen zu einer bestimmten Freigabe zu
+ beenden, ohne die restlichen Verbindungen zu st"oren. Dies kann
+ insbesondere dann sinnvoll sein, wenn "Anderungen an den
+ Zugriffsrechten einer Freigabe vorgenommen wurden.
+\item[printer-notify:] Wenn Sie von Windows NT Clients aus mit
+ Druckern verbunden sind, nutzen Sie m"oglicherweise das neue
+ Drucksystem von Samba. In diesem Fall sind Druckereinstellungen auf
+ dem Server gespeichert. "Andern sich diese Einstellungen, k"onnen
+ Sie mit dieser Nachricht die momentan verbundenen Clients "uber
+ diese "Anderungen informieren.
+\end{description}
+
+\end{document}