diff options
Diffstat (limited to 'docs/textdocs/kurs.tex')
-rw-r--r-- | docs/textdocs/kurs.tex | 4856 |
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} |