diff options
author | Volker Lendecke <vlendec@samba.org> | 2000-08-04 16:08:04 +0000 |
---|---|---|
committer | Volker Lendecke <vlendec@samba.org> | 2000-08-04 16:08:04 +0000 |
commit | e2031ab34c3133128d38b06e82ea3b35d9cefeed (patch) | |
tree | 2b9f07dd35b7c6bbd976b96ac4cf1bcd217ef3f1 /docs/textdocs | |
parent | 05e169b558772d06f2fa29eda8c050493f14d589 (diff) | |
download | samba-e2031ab34c3133128d38b06e82ea3b35d9cefeed.tar.gz samba-e2031ab34c3133128d38b06e82ea3b35d9cefeed.tar.bz2 samba-e2031ab34c3133128d38b06e82ea3b35d9cefeed.zip |
Added my course notes. Had asked Jeremy some weeks ago.
It's german language, feel free to remove it again.
Volker
(This used to be commit a40f22427a05903dfb98e9cb849698b33b8bca90)
Diffstat (limited to 'docs/textdocs')
-rw-r--r-- | docs/textdocs/kurs.pdf | bin | 0 -> 202185 bytes | |||
-rw-r--r-- | docs/textdocs/kurs.tex | 2460 | ||||
-rw-r--r-- | docs/textdocs/logo.ps | 344 |
3 files changed, 2804 insertions, 0 deletions
diff --git a/docs/textdocs/kurs.pdf b/docs/textdocs/kurs.pdf Binary files differnew file mode 100644 index 0000000000..0846227020 --- /dev/null +++ b/docs/textdocs/kurs.pdf diff --git a/docs/textdocs/kurs.tex b/docs/textdocs/kurs.tex new file mode 100644 index 0000000000..6f5a24098e --- /dev/null +++ b/docs/textdocs/kurs.tex @@ -0,0 +1,2460 @@ +\documentclass{scrartcl} +\usepackage{pslatex} +\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{\datei}{\texttt} +\newcommand{\nbname}{\texttt} +\newcommand{\todo}{\texttt} +\newcommand{\defin}{\emph} +\hyphenation{Net-BIOS} + +\usepackage{fancyheadings} +\pagestyle{fancyplain} +\lhead{} +\rhead{\thepage} +\rfoot{\copyright{} 1999, 2000, Volker Lendecke (http://www.sernet.de/vl/)} +\cfoot{} + +\begin{document} + +\title{Kursskript\\[\baselineskip] + \epsfig{file=logo.ps,width=6cm}} + +\author{Volker Lendecke\\ +Samba Team\\ +Service Network GmbH\\ +G"ottingen\\ +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 NT erscheinen. Au"serdem lassen sich mit Samba Datei- und +Druckfreigaben erstellen. Das hei"st, unter Unix vorhandener +Plattenplatz kann ganz normal unter Windows genutzt werden, und unter +Unix vorhandene Drucker kann man als Netzwerkdrucker unter Windows +ansteuern. 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. + +\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 Primary Domain Controller ist in + einer noch nicht freigegebenen Version implementiert, ist jedoch + schon in vielen Installationen im produktiven Einsatz. + +\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 den bekannten 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, dann wird + nur dieser Client in Mitleidenschaft gezogen. Eventuell + st"urzt dieser eine Proze"s ab, die anderen werden jedoch + 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 optimal + 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. + Durch ein sehr flexibles Schema von Makroersetzungen ist mit Samba + sehr viel mehr m"oglich als mit NT. 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} + +\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 die NetBIOS-Ebene + abgeschafft, Windows 2000 kommuniziert direkt "uber TCP. Aus + Kompatibilit"atsgr"unden kann Windows 2000 jedoch noch "uber NetBIOS + kommunizieren.}. NetBIOS ist eine 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. Dabei lag der +Schwerpunkt des Entwurfs auf der Einfachheit der Anwendung. Auf +Skalierbarkeit und die Andwendung in Weitverkehrsnetzen wurde beim +Design nicht geachtet. + +Die Kommunikation mit NetBIOS wurde in drei Teilbereiche aufgeteilt, +den Namensdienst, 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. Aufeinander + folgende Pakete k"onnen in vertauschter Reihenfolge beim Empf"anger + ankommen. Es kann sogar sein, da"s Pakete auf dem Weg dupliziert + werden, also mehrfach ankommen. Diese Unzuverl"assigkeit des Netzes + wird durch den Datagrammdienst an die Benutzerprogramme + weitergegeben. 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} + +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. + +Zwei Anwendungen wollen nun per NetBIOS miteinander kommunizieren. +Dazu 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 bestimmte, f"ur den PDC + vorgesehene Namen zum richtigen Zeitpunkt reservieren.}. Eine +Reservierung geschieht also, 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 eine zweite +Reservierung und wartet wieder. Nach der dritten Reservierung 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. + +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 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. + +\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. + +\section{Bestandteile von Samba} + +Das Programmpaket Samba besteht aus mehreren Programmen, von denen +einige der Serverseite und andere der Clientseite zugeordnet werden +k"onnen. + +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 lauscht auf dem + TCP-Port 139, und nimmt neue Verbindungen entgegen. Jede neue + Verbindung st"o"st einen neuen Proze"s \prog{smbd} 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. + + Samba ist im Hauptspeicherverbrauch recht sparsam. Jeder + \emph{aktive} Client ben"otigt etwa 1 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 ist WINS-Server und f"ur den + Computersuchdienst zust"andig. + +\item[testparm] Mit diesem Programm kann man die \datei{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. + +\end{description} + +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 wird mit \prog{smbclient} die Liste + der Server im Netz erfragt, 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 Seiten von Windows ist das + Kommandozeilenprogramm \prog{nbtstat}. + +\end{description} + +Auf der Serverseite finden sich noch weitere Komponenten: + +\begin{description} + +\item[smb.conf:] Die zentrale Konfigurationsdatei von Samba. Ist Samba + als fester Systembestandteil installiert, findet sie sich in der + Regel unter \datei{/etc/smb.conf}. Ist Samba selbst compiliert, + liegt sie h"aufig unter \datei{/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 compiliert, liegt dies Verzeichnis unter + \datei{/usr/local/samba/var}. + +\item[/etc/smbpasswd] ist die Pa"swortdatenbank von Samba, sofern mit + verschl"usselten Pa"s\-w"ortern gearbeitet wird. + \datei{/usr/local/samba/private/} ist das Standardverzeichnis f"ur + diese Datei. + +\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 \datei{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 \datei{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. \prog{ifconfig + <interface>} unter Unix, oder unter Linux speziell \prog{ifconfig + eth0} gibt sowohl die IP-Adresse der Ethernetkarte als auch die dort +gesetzte Broadcastadresse als Ausgabe. 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 man 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. + +Mit diesen beiden Einstellungen wird man direkt den Sambarechner in +der Netzwerkumgebung sehen. Zur Vereinfachung sollten noch zwei +weitere Parameter gesetzt werden, die sp"ater erkl"art werden. Die +vollst"andige \datei{smb.conf} sieht also folgenderma"sen +aus:\footnote{Auf einem der Rechner sollte zus"atzlich \param{os level + = 67} und \param{preferred master = yes} im Abschnitt + \param{[global]} der /etc/smb.conf gesetzt sein.} + +\begin{verbatim} +[global] +workgroup = arbeitsgruppe +interfaces = <IP-Adresse>/<Netzmaske> +security = share +encrypt passwords = yes +\end{verbatim} + +Mit dieser Konfiguration kann Samba gestartet werden. Unter SuSE Linux +geschieht dies 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 +\datei{/etc/rc.config} auf \texttt{yes} gesetzt werden. Es mu"s +letztlich nur erreicht werden, da"s sowohl der \prog{nmbd} als auch +der \prog{smbd} mit dem Parameter \texttt{-D} gestartet 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, 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 \datei{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@server:/home/vlendec> nmblookup -B 192.168.1.31 server +querying server on 192.168.1.31 +name_query failed to find name server +vlendec@linux:/home/vlendec> +\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 + \symbol{'134}\symbol{'134}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} 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{-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. + +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 Einzelnamen 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. + +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 sogenannte + \defin{Lokale 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$<$1e$>$] Wahlen zum Lokalen Master Browser werden + "uber diesen Namen abgewickelt. Siehe hierzu Kapitel \ref{netzwerkumgebung}. + +\end{description} + +\section{Netzwerkumgebung} +\label{netzwerkumgebung} + +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 funktionieren, indem jeder Rechner, +der Serverdienste anbietet, dieses regelm"a"sig per Broadcast im Netz +mitteilt. 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{Lokale Master Browser} (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 Lokalen Master Browser +gibt. Beispielsweise kann der Explorer von Windows eine solche Wahl +ansto"sen. Wenn Windows 95 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. + +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 Windows 95 Rechner, so h"alt sie sich selbst +f"ur geeigneter, den Lokalen 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 Lokalen Master Browser. + +Drei Parameter in der \datei{smb.conf} bestimmen das Verhalten von +Samba in der Wahl zum Lokalen 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 +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 Lokalen Master Browser Fehler bereinigt wurden. +Dann ist es sinnvoll, da"s diese neue Software die Rolle des LMB +"ubernimmt. Der einfachste Weg ist, den \param{os level} einfach +hochzusetzen. Samba hat hier einen Vorgabewert von 20. + +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. Wenn man sichergehen m"ochte, + da"s Samba auf jeden Fall nach dem Start den LMB "ubernimmt, dann + mu"s man den \param{os level} hoch genug setzen, und den Parameter + \param{preferred master = yes} setzen. Damit wird Samba beim Start + des \prog{nmbd} auf jeden Fall eine Wahl ansto"sen und sie dann + unter Umst"anden gewinnen. + +\end{description} + +Mit den Einstellungen + +\begin{verbatim} +[global] +os level = 66 +preferred master = yes +\end{verbatim} + +\noindent +kann man sicher sein, da"s der Sambarechner immer den LMB innehat. 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. + +Ein Primary Domain Controller kann unter Umst"anden erheblich gest"ort +werden, wenn er in seinem Subnetz nicht der LMB ist. + +\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}}} + +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. + +Der einfachste Weg, die Namensaufl"osung "uber Subnetzgrenzen hinweg +zu realisieren, geht "uber eine statische Tabelle. Unter Windows +liegt diese in der Datei \datei{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 \datei{/etc/hosts} unter Unix. Ein +Beispieleintrag ist der folgende: + +\verb|192.168.1.5 samba| + +Die Eintr"age in der \datei{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 \datei{LMHOSTS} nachgeschaut. Ist der Zusatz +vorhanden, so wird ohne Namensaufl"osung direkt der Wert in der +\datei{LMHOSTS} verwendet. + +Die zweite M"oglichkeit, das Problem zu l"osen, ist eine zentrale +Datei \datei{LMHOSTS}. Dazu gibt es den WINS-Server. Ein solcher Server +ist ein Rechner, bei dem sich jede 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 \datei{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 ganz normal als WINS-Server konfiguriert werden, indem der +Parameter \param{wins support = yes} gesetzt wird. Ist diese 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 +\datei{/var/lock/samba/wins.dat} abgelegt. Der \prog{nmbd} pflegt +diese Datei dynamisch, je nach Reservierungen und Abmeldungen. Die +Datei \datei{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 \datei{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 erfolgt durch 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. Rechner im einen Namensraum k"onnen mit Rechnern, die +an einem anderen WINS-Server angeschlossen sind, nicht kommunizieren. +Es kann trotzdem zu Kollisionen kommen, da Windowsrechner bestimmte +Namen unabh"angig von WINS-Einstellungen ausschlie"slich per Broadcast +reservieren. Unter Windows NT kann man mehrere WINS-Server einsetzen, +die sich gegenseitig abstimmen. Diese WINS-Server treten gegen"uber +den Clients als ein einziger Server auf, unabh"angig von ihrer Anzahl. + +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. +Damit kann man einen Samba-Server in ein Subnetz stellen. 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 \datei{/etc/hosts} nachschauen und +danach dann das DNS anhand der Konfiguration in der Datei +\datei{/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{Netzwerkumgebung "uber Subnetzgrenzen} + +So, wie die Netzwerkumgebung in Abschnitt \ref{netzwerkumgebung} +betrachtet wurde, funktioniert sie nur in einem einzigen lokalen +Netz. Die Wahl zum lokalen 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 \datei{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 3 Subnetzen (1,2,3), die durch 2 Router (R1 +und R2) verbunden sind. Die Router lassen keine Broadcasts durch. Alle +Subnetze bestehen aus jeweils 4 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 Browseliste 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{N1C}, 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 +Browseliste. 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 2 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 Lokalen +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} + +\section{Einfache Freigaben} + +Der grunds"atzliche Aufbau der Datei \datei{smb.conf} wurde bereits +auf Seite (\pageref{aufbau-smb.conf}) erw"ahnt. Bis zu diesem Punkt +hat sich s"amtliche Konfiguration im Abschnitt \texttt{[global]} +abgespielt, der globale Servereinstellungen beinhaltet. Wenn der +Sambarechner nicht nur im Netz gesehen werden soll, sondern auch +sinnvolle Dinge tun soll, mu"s man Freigaben zur Verf"ugung stellen. +Dies tut man, indem man einfach einen neuen Abschnitt beginnt, dessen +Name gerade nicht \texttt{[global]} ist. Um eine Freigabe vollst"andig +zu machen, mu"s man mit dem Parameter \texttt{path} angeben, welches +Verzeichnis man freigeben m"ochte. Eine f"ur alle Zugriffe offene +Freigabe des Verzeichnisses \datei{/cdrom} erreicht man mit folgender +\datei{smb.conf}: + +\begin{verbatim} +[global] +workgroup = arbeitsgruppe +interfaces = <IP-Adresse>/<Netzmaske> +security = share +encrypt passwords = yes + +[cd] +path = /cdrom +guest ok = yes +\end{verbatim} + +\noindent +Damit entsteht auf dem Server eine Freigabe namens \texttt{CD}, die +das Verzeichnis \datei{/cdrom} im Netz f"ur alle zum Lesen zur +Verf"ugung stellt. + +\textbf{Achtung:} +Es findet hier \emph{keine} "Uberpr"ufung der Zugriffsrechte statt. Um +diese "Uberpr"ufung zu erm"oglichen, sollte zun"achst einmal der +Aufbau einer Verbindung zu einer Freigabe genauer beleuchtet werden. + +\section{SMB-Sitzungen} + +Wird am Client eine Verbindung zu einer Freigabe auf einem SMB-Server +aufgebaut, so m"ussen mehrere Schritte durchlaufen werden. + +\subsection*{NetBIOS-Namensaufl"osung} + +Zu einem Rechnernamen mu"s eine IP-Adresse herausgefunden werden. Dies +wurde in den letzten Abschnitten eingehend behandelt. + +\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}. + +\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 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, den CIFS von +seinem Urvater SMB unterscheidet. Mit Windows 2000 werden diese +NetBIOS-Namen beim Verbindungsaufbau gar komplett unterschlagen. +Daf"ur ist 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 sie \datei{/etc/smb.conf.birke}, +\datei{/etc/smb.conf.eiche} und so weiter nennen. Die Datei +\datei{/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. + +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{Zugriffsrechte} + +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 bez"uglich der Zugriffsrechte bei +einer Freigabe nichts gesagt wird, 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 +writeable = no +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{Unix-Zugriffsrechte} + +Unter Windows NT gibt es zwei M"oglichkeiten, Zugriff auf Dateien zu +gew"ahren. "Uber eine Freigabe kann ein Lese- oder ein Schreibrecht +vergeben werden. Im zweiten Schritt k"onnen dann "uber eine +Rechtevergabe im Dateisystem weitere Rechte vergeben werden. Samba +regelt die Zugriffskontrolle ebenfalls in zwei Schritten. Die +freigabebezogenen Rechte werden "uber Parameter wie \param{valid +users} und \param{write ok} geregelt. Die Zugriffsrechte innerhalb des +Dateisystems regelt Samba nicht selbst, sondern verl"a"st sich +hierf"ur auf das darunterliegende Betriebssystem Unix. + +Zwischen Unix und DOS bestehen gro"se Unterschiede. DOS und alle seine +Nachfolger sind Einzelbenutzersysteme, Unix ist von Anfang an als +Multiusersystem entworfen worden. Diese Unterschiede werden besonders +deutlich, wenn man die Attribute betrachtet, die auf Dateien vergeben +werden. DOS kennt vier Attribute: + +\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 vom Benutzer frei gesetzt und wieder zur"uckgesetzt +werden. Sie bieten also keinen echten Zugriffsschutz, sondern nur eine +gewisse Sicherung gegen Fehlbedienung. + +Unix f"uhrt mit jeder Datei einen Satz von Zugriffsrechten mit. Diese +sind aufgeteilt in 3 Gruppen von Benutzern: Der Dateibesitzer, die +besitzende Gruppe und alle anderen. Jeder Gruppe k"onnen 3 +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 besitztende 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. + +\section{Beispiel: Projektverzeichnisse} + +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 +\datei{/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}. Das Gruppenverzeichnis \datei{/data/groups} sieht +folgenderma"sen aus: + +{\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 \datei{/data/share} die Benutzer abgewiesen werden. Die +Parameter \datei{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 \datei{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 +\datei{/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. 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 ausgschlossen. + +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{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. Mit 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. + +Im SMB-Protokoll wird zur Authentifizierung ein Challenge-Response +Verfahren eingesetzt. Der Server verschickt an den Client eine +Zufallszahl, die sogenannte Herausforderung. Der Client kennt das +Benutzerpa"swort, und verschl"usselt die Herausforderung mit dem +Pa"swort als Schl"ussel. Diesen verschl"usselten Wert verschickt der +Client anstelle des Pa"sworts. Der Server kennt das Benutzerpa"swort +ebenfalls, und kann den versch"usselten Wert entschl"usseln. Entsteht +bei der Entschl"usselung wieder die Herausforderung, so hat der +Benutzer die Herausforderung offensichtlich mit dem korrekten Pa"swort +verschl"usselt. Kommt etwas anderes heraus, war das Pa"swort nicht +richtig. + +\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} +\end{figure} + +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"uselungsalgorithmus gew"ahlt werden, der gegen einen solchen +Angriff immun ist. Er kann keine Replay Attacke starten, da er bei +jedem neuen Verbindungsaubau eine neue Herausforderung bekommt, die er +verschl"ussen mu"s. + +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? + +Dieses 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, +den Wert aus der Datei \datei{/etc/shadow}. + +Eine Hashfunktion, wie sie unter Unix eingesetzt wird, hat drei +Eigenschaften. + +\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, mit denen der R"uckweg ausgeschlossen ist\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 sogenannte 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 \datei{/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"swortdatenbank +gepflegt werden, die Datei \datei{smbpasswd}. + +Auch in der Datei \datei{smbpasswd} stehen keine +Klartextpa"sw"orter. Bevor die Herausforderung mit dem Pa"swort +verschl"usselt wird, wird das Pa"swort unter Windows ebenfalls durch +eine Hashfunktion geschickt. Von dieser Hashfunktion gibt es zwei +Varianten, die beide nicht mit den unter Unix verwendeten Funktionen +"ubereinstimmen. Das hei"st, da"s man mit den dort enthaltenen Werten +so direkt nicht mehr anfangen kann als mit den Werten aus der Datei +\datei{/etc/shadow} unter Unix, denn 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 \datei{smbpasswd} ohne Einsatz von crack bei einem NT-Rechner +anzumelden. + +Alles nicht dramatisch, sagt Microsoft. Das "Aquivalent zur Datei +\datei{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 \datei{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. + +Sollte ein neugieriger Administrator einmal an den tats"achlichen +Pa"sw"orten seiner Benutzer interessiert sein, dann macht NT es ihm +deutlich einfacher als Unix dies tut. Unix verwendet sogenannte +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 +\datei{/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. + +\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 +\datei{/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 sogenannte 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 sogenannten 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. Dieser +Drucker mu"s das Format verstehen, das vom Windowsdruckertreiber +geliefert wird. Also sollte hier entweder Postscript angenommen +werden, oder die Daten sollten per sogenannter 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{Samba als Logon-Server} + +Wenn sich in einem Netz Windows 95/98 Clients befinden, kann es +w"unschenswert sein, da"s sich die Benutzer dieser Arbeitspl"atze nur +mit einem Pa"swort anmelden k"onnen, das zentral auf einem Server +vorgehalten wird. Dazu mu"s der entsprechende Server spezielle Aufrufe +von Clients entgegennehmen und korrekt beantworten. In der reinen +Windowswelt ist dazu ein Windows NT Server notwendig, der als +sogenannter Primary Domain Controller (PDC) installiert ist. Samba ist +ebenfalls in der Lage, dies zu tun. Dazu ist im Abschnitt +\param{[global]} der Parameter \param{domain logons = yes} zu setzen. +Die Implementation, die Microsoft gew"ahlt hat, um Dom"anenanmeldungen +zu erm"oglichen, erzwingt zus"atzlich, da"s der Domain Master Browser +auf dem gleichen Rechner liegt wie der Logon Server. Das hei"st, man +ben"otigt f"ur Dom"anenanmeldungen die folgenden Parameter: + +\begin{verbatim} +[global] +workgroup = samba +domain logons = yes +domain master = yes +\end{verbatim} + +Hat man diese Parameter gesetzt, kann man in den Eigenschaften des +Clients f"ur Microsoft-Netzwerke einstellen, da"s der Client sich an +der Dom"ane \texttt{samba} anmelden soll. Hat man verschl"usselte +Pa"sw"orter (Siehe Abschnitt \ref{passwoerter}) aktiviert, kann man +vom Client aus sein SMB-Pa"swort "andern, indem man das entsprechende +Kontrollfeld in der Systemsteuerung von Windows benutzt. + +\section{Windows NT Dom"anen} + +Die Dom"anenanmeldung unter Windows 95/98 ist eine relativ einfache +Sache, da es sich dabei praktisch nur um eine "Uberpr"ufung der +Benutzerpa"sw"orter handelt. So etwas wie Benutzer kennt Windows 95 +praktisch nicht, jeder Benutzer hat vollen Zugriff auf das gesamte +System. Erst mit Windows NT hat Microsoft den Schritt hin zu einem +Betriebssystem gemacht, das Benutzerkonten und Zugriffsrechte +verwalten kann. Damit sind sie sehr viel weiter gegangen, als Unix +dies getan hatte. Um das Konzept der Windows NT Dom"ane zu +verdeutlichen, soll hier zun"achst auf das Konzept des Benutzers unter +Windows und unter Unix eingegangen werden. + +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 \datei{/etc/passwd} nach. +Mit der Datei \datei{/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 oder +Yellow Pages. Die Benutzerdatenbank wird verteilt, gilt aber auf jedem +Rechner rein lokal. + +Unter NT sieht das sehr "ahnlich aus, nur da"s hier der Benutzer nicht +durch eine kleine Zahl, sondern durch einen Security Identifier SID +repr"asentiert wird. Ein solcher SID ist mehrteilig. Der erste Teil +dieses SID beinhaltet eine Kennung der Benutzerdatenbank, zu der +dieser Benutzer geh"ort. Ein solcher SID ist 96 Bit lang und Microsoft +behauptet, da"s dieser Wert zuf"allig genug gew"ahlt ist, da"s es +keine zwei Benutzerdatenbanken geben kann, die die gleiche SID haben. +Der zweite Teil besteht aus einem sogenannten Relative Identifier RID, +der den Benutzer innerhalb der Dom"ane eindeutig identifiziert. Die +Kennung f"ur die Dom"ane besteht aus 3 32-Bit Zahlen, die zusammen 96 +Bit ergeben. + +Unter Windows NT hat nun jeder Rechner eine eigene Benutzerdatenbank, +genau wie unter Unix. Da aber jede Benutzerdatenbank eindeutig +identifiziert ist, kann es keine zwei Benutzer mit gleicher Userid +geben. Der Relative Identifier mag gleich sein, der Identifier f"ur +die Benutzerdatenbank unterscheidet sich aber auf jeden Fall. + +Microsoft unterscheidet verschiedene Netzwerkmodelle. Das Peer-To-Peer +Netz ist das Modell, das auch Unix zugrunde liegt. Hier hat jeder +beteiligte Rechner eine eigene Benutzerdatenbank, eigene Pa"sw"orter +und eigene Rechtezuordnungen. Das Dom"anenmodell ist das Modell, das +sich signifikant von Unix unterscheidet. Mit dem Dom"anenmodell wird +eine Workstation in die Lage versetzt, mehr als eine Benutzerdatenbank +zu benutzen. Neben der eigenen Benutzerdatenbank, die jede Workstation +hat, kann sie eine Benutzerdatenbank von einem anderen Rechner +importieren. In einer Windows NT Dom"ane gibt es einen Rechner, der +seine eigene Benutzerdatenbank anderen zur Verf"ugung stellt, den +sogenannten Primary Domain Controller. Dieser reserviert f"ur sich +spezielle NetBIOS-Namen, um sich den Workstations als Logonserver +anzubieten. Eine Workstation befragt den Primary Domain Controller +nach allen relevanten Daten zu den Benutzern, die sich bei ihr +anmelden wollen, und die Rechte auf der Workstation wahrnehmen +k"onnen. + +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 der 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. Daher mu"s jede Workstation explizit in die Dom"ane +aufgenommen werden. + +Bei Samba ist es so, da"s es zu jedem Benutzer, der ein Pa"swort in +der \datei{/etc/smb.conf} hat, einen Benutzer im System geben mu"s. +Der zu einer Workstation geh"orende Benutzer mu"s den NetBIOS-Namen +der Workstation, erg"anzt um ein \$-Zeichen, haben. Man ben"otigt also +zwei Schritte, um eine Workstation in die Dom"ane aufzunehmen. Im +ersten Schritt wird der Unixbenutzer angelegt. Dies geschieht in +vielen Linuxsystemen mit dem Kommando \texttt{useradd -m $<$user$>$}. +Der angelegte Benutzer ben"otigt im Unixsystem weder ein Pa"swort noch +ein Heimatverzeichnis. Er ist notwendig, da die Workstation in der +Dom"ane eine eigene SID bekommt, die aus der Unix userid berechnet +wird. Dann mu"s die Workstation ein Pa"swort in der +\datei{/etc/smbpasswd} bekommen, und zwar mit dem Befehl +\texttt{smbpasswd -a -m name}. Ein Beispiel sieht folgenderma"sen aus: + +\begin{verbatim} +root@erde: useradd -m wks\$ +root@erde: smbpasswd -a -m wks +\end{verbatim} + +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. + +\section{Samba als Dom"anenmitglied} + +Mit dem Parameter \param{security} kann man den Zeitpunkt steuern, zu +dem das Benutzerpa"swort gepr"uft wird. \param{security = share} legt +fest, da"s die Pr"ufung beim Tree Connect stattfindet, das hei"st, +wenn die Freigabe angesprochen wird. Ist \param{security = user} +angegeben, wird das Pa"swort bereits einen Schritt vorher, also beim +Session Setup gepr"uft. Bei \param{security = user} wird also die +Kombination von Benutzer und Pa"swort gepr"uft bei \param{security = + share} die Kombination Freigabe und Pa"swort. + +Der Parameter \param{security} kann noch zwei weitere Werte annehmen: +\param{server} und \param{domain}. Bei beiden Einstellungen verh"alt +sich Samba gegen"uber dem Client genau wie bei \param{security = + user}, der Benutzer mu"s sich unter seinem Namen beim Server +authentifizieren. Die Unterschiede liegen in der Art und Weise, wie +das Pa"swort "uberpr"uft wird. + +\begin{itemize} +\item \param{security = user}: Die "Uberpr"ufung findet anhand einer + lokalen Datenbank statt. Werden Klartextpa"sw"orter verwendet + (\param{encrypt passwords = no}), so wird die lokale + Unix-Pa"swortdatenbank in \datei{/etc/passwd}, \datei{/etc/shadow} + oder die entsprechende NIS-Tabelle herangezogen. Bei + verschl"usselten Pa"sw"ortern mit wird die Samba-eigene + Pa"swortdatenbank in der Datei \datei{smbpasswd} zur "Uberpr"ufung + herangezogen. +\item \param{security = server}: Bei dieser Einstellung bekommt der + Sambaserver vom Client einen Benutzernamen und ein Pa"swort + pr"asentiert. Er versucht daraufhin, sich mit diesem Pa"swort bei + einem weiteren Server anzumelden. Funktioniert dies, hat der + Benutzer sein Pa"swort offensichtlich richtig eingegeben. Schl"agt + dies fehl, wird auch dem Client des Sambaservers der Fehler + mitgeteilt und der Zugriff verweigert. Der Pa"swortserver, der zur + "Uberpr"ufung herangezogen wird, mu"s mit seinem NetBIOS-Namen im + Parameter \param{password server} angegeben werden. +\item \param{security = domain}: Auch hierbei wird die "Uberpr"ufung + einem Pa"swortserver "uberlassen. Dieser mu"s jedoch ein Primary + Domain Controller sein, der den Sambaserver in die Dom"ane + aufgenommen hat. Der Hauptvorteil gegen"uber \param{security = + server} besteht in einer deutlich reduzierten Last auf dem + Pa"swortserver und einer verschl"usselten Kommunikation zwischen + Samba und Pa"swortserver. +\end{itemize} + +Um einen Windowsrechner dazu zu bringen, f"ur einen Sambaserver die +Pa"swort"uberpr"ufung zu "ubernehmen, mu"s man nur \param{security = + server} und den \param{password server} passend setzen. Dabei +"ubernimmt der Server ausschlie"slich die "Uberpr"ufung der +Pa"s\-w"orter. Bei verschl"usselten Pa"sw"ortern k"onnen Benutzer nur +dann in die \datei{smbpasswd} aufgenommen werden, wenn sie in der +Unix-Benutzerdatenbank existieren. Genau so verh"alt es sich bei +\param{security = server}. Benutzer k"onnen auf Samba nur dann +zugreifen, wenn sie als normale Unixbenutzer existieren. + +\param{security = server} ist nicht die optimale L"osung f"ur die +"Uberpr"ufung von Pa"sw"ortern durch einen weiteren Rechner. + +Um die Vorteile der Dom"anenmitgliedschaft zu nutzen, ist etwas mehr +Aufwand notwendig. Mitglied einer Dom"ane zu sein hei"st, mit dem +Primary Domain Controller "uber einen verschl"usselten Kanal +kommunizieren zu k"onnen. Diese Verschl"usselung wird verwendet, um +Benutzerinformationen verdeckt austauschen zu k"onnen. Als +Verschl"usselungsverfahren kommt ein symmetrisches oder auch secret +key Verfahren zum Einsatz. Um ein symmetrisches Verfahren anwenden zu +k"onnen, m"ussen sich beide Partner "uber ein gemeinsames Geheimnis, +den \emph{secret key} einig sein. Ein solches gemeinsames Geheimnis +mu"s regelm"a"sig ge"andert werden, um einer gro"sen Klasse von +kryptographischen Angriffen auszuweichen. Eine solche "Anderung darf +selbstverst"andlich nicht abgeh"ort werden k"onnen, da ein Zuh"orer +damit die gesamte Kommunikation abh"oren kann. F"ur die "Anderung +eines Geheimnisses gab es bereits vor der Implementation des +Dom"anenprotokolls ein fertiges Protokoll, das man direkt verwenden +konnte: Die M"oglichkeit, Benutzerpa"sw"orter "uber das Netz zu +"andern, war mir einem gesicherten Protokoll implementiert. Um dieses +Protokoll zur verschl"usselten Kommunikation zwischen einer +Workstation oder einem Mitgliedsserver und dem Dom"anencontroller +nutzen zu k"onnen, mu"s es f"ur jedes Dom"anenmitglied ein +Benutzerkonto geben. Genau dies wird auf dem Dom"anencontroller +erstellt, wenn man eine Workstation oder einen Server mit dem +Servermanager in die Dom"ane aufnimmt. Betritt man danach mit der +Workstation die Dom"ane, wird als erstes das Pa"swort des +Computerkontos ge"andert. + +Um einen Sambaserver in eine Dom"ane aufzunehmen, sind zwei Schritte +notwendig. + +\begin{itemize} +\item Auf dem Server mu"s der Sambaserver mit seinem NetBIOS-Namen in + die Dom"ane aufgenommen werden. +\item Der Sambaserver selbst mu"s dar"uber informiert werden, da"s er + sich in der Dom"ane befindet, und er mu"s sein Pa"swort "andern. + Dies geschieht mit dem Befehl + +\verb|smbpasswd -j DOM -r PDC| + +Dabei steht \texttt{DOM} f"ur die Dom"ane, die betreten wird. Mit +\texttt{PDC} wird der NetBIOS-Name des Dom"anencontrollers der Dom"ane +benannt. +\end{itemize} + +Mit diesem Kommando wird das Maschinenpa"swort auf dem PDC auf einen +neuen, zuf"alligen Wert ge"andert. Dieses neue Maschinenpa"swort f"ur +den Samba Server wird in einer Datei im gleichen Verzeichnis wie die +Datei \texttt{smbpasswd} abgespeichert und hat folgenden Namen: + +\verb|<NT DOMAENENNAME>.<Samba Servername>.mac| + +Die Endung .mac steht f"ur \emph{Machine ACcount} Pa"swortdatei. Im obigen +Beispiel w"urde die Datei also \texttt{DOM.SERV1.mac} hei"sen. + +Diese Datei wird von root erstellt und ist f"ur keinen anderen +Benutzer lesbar. Sie ist der Schl"ussel zu Ihrer Dom"anensicherheit +und sollte genau so vorsichtig behandelt werden wie die Datei +\texttt{/etc/shadow}. + +Nach diesen beiden Schritten kann man mit \param{security = domain}, +\param{password server = PDC BDC1 BDC2} und \param{encrypt passwords = + yes} die Pa"swort"uberpr"ufung an einen der Dom"anencontroller +delegieren. Dies sind die Prim"aren und Backup Dom"anencontroller, die +Samba der Reihe nach kontaktieren wird, um Benutzer zu +authentifizieren. Samba wird sie in der aufgef"uhrten Reihenfolge +ansprechen. Sie k"onnen also die Reihenfolge ver"andern, um eine +g"unstigere Lastverteilung zu erreichen. Eine weitere Option ist die +Angabe \param{password server = *}. Damit sucht Samba mit den +Standardmethoden\footnote{Windows NT findet einen Dom"anencontroller, + indem der NetBIOS-Name \nbname{DOMAIN<1C>} gesucht wird.} von +Windows NT nach einem Dom"anencontroller und befragt die Server, die +es bei dieser Anfrage herausbekommen hat. + +Warum ist \param{security = domain} besser als \param{security = + server}? + +Der Vorteil der Dom"anensicherheit ist, da"s Samba die +Authentifizierung "uber einen gesicherten RPC Kanal schickt, genau wie +ein Windows NT Server es tun w"urde. Das hei"st, da"s Samba nun genau +wie ein Windows NT Server an einer Vertrauensstellung teilnehmen kann. +Das hei"st, Sie k"onnen einen Samba Server in eine Resourcendom"ane +aufnehmen, und Sie k"onnen die Authentifizierung via Resourcen PDC vom +PDC der Benutzerdom"ane vornehmen lassen. + +Zus"atzlich mu"s in der Einstellung \texttt{security = server} der +Samba D"amon eine Verbindung zum Authentifizierungsserver w"ahrend +seiner gesamten Laufzeit offenhalten. Dies kann die Anzahl der offenen +Verbindungen auf einem Windows NT Server in die H"ohe treiben, so da"s +dieser keine Verbindungen mehr annimmt. Mit \texttt{security = domain} +verbinden sich die Samba D"amonen nur so lange mit dem PDC, wie es +f"ur die Benutzerauthentifizierung notwendig ist. Danach wird die +Verbindung wieder abgebaut, so da"s die Verbindungen wieder +anderweitig verwendbar sind. + +Und nicht zuletzt bekommt der Samba Server als Teil der Antwort auf +die Authentifizierungsanforderung Informationen "uber den Security +Identifier, die Gruppenzuordnungen und andere Informationen "uber den +Benutzer. All diese Informationen werden Samba zuk"unftig erlauben, in +einem sogenannten Appliance Modus zu laufen. In diesem Modus wird +kein manuell angelegter Unixbenutzer mehr notwendig sein. Samba wird Unix +Benutzer und Gruppen aus der Authentifizierungsantwort des PDC +erzeugen. Damit wird Samba wirklich ein Plug and Play Mitglied einer +Dom"ane. + +Dieser Appliance Modus kann heute schon ann"ahernd erreicht werden, +indem bei Samba der Parameter \param{add user script} angegeben wird. +In diesem Parameter wird ein Unixprogramm angegeben, das dynamisch +einen Unixbenutzer erzeugen mu"s, nachdem ein Pa"swortserver die +Korrektheit eines Pa"sworts best"atigt hat. Ein Beispiel kann sein: + +\verb|add user script = /usr/bin/useradd -m %U| + +Damit wird einfach ein Benutzer hinzugef"ugt, wenn er noch nicht +existiert, aber der PDC das Pa"swort best"atigt hat. + +\end{document} + diff --git a/docs/textdocs/logo.ps b/docs/textdocs/logo.ps new file mode 100644 index 0000000000..4fa39aef36 --- /dev/null +++ b/docs/textdocs/logo.ps @@ -0,0 +1,344 @@ +%!PS-Adobe-3.0 +%%Pages: (atend) +%%BoundingBox: 0 261 683 580 +%..................................... +%%Creator: Aladdin Ghostscript 601 (pswrite) +%%CreationDate: 2000/08/03 14:15:29 +%%DocumentData: Clean7Bit +%%EndComments +%%BeginProlog +% This copyright applies to everything between here and the %%EndProlog: +% Copyright (C) 2000 Aladdin Enterprises, Menlo Park, CA. All rights reserved. +%%BeginResource: procset GS_pswrite_ProcSet +/GS_pswrite_ProcSet 80 dict dup begin +/!{bind def}bind def/#{load def}!/N/counttomark # +/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}! +/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}! +/w/setlinewidth #/J/setlinecap # +/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat # +/m/moveto #/l/lineto #/c/rcurveto #/h{p closepath}!/H{P closepath}! +/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}! +/re{4 -2 roll m exch dup lx exch ly neg lx h}! +/^{3 index neg 3 index neg}! +/P{N 0 gt{N -2 roll moveto p}if}! +/p{N 2 idiv{N -2 roll rlineto}repeat}! +/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}! +/q/gsave #/Q/grestore #/rf{re fill}! +/Y{initclip P clip newpath}!/Y*{initclip P eoclip newpath}!/rY{re Y}! +/|={pop exch 4 1 roll 3 array astore cvx exch 1 index def exec}! +/|{exch string readstring |=}! +/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}! +/@/currentfile #/${+ @ |}! +/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}! +/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! +/|X{exch string readhexstring |=}!/$X{+ @ |X}! +/@X{{currentfile ( ) readhexstring pop}}! +/PS{1 index where{pop cvx exec pop pop}{pop/setpage where +{pop pageparams 3{exch pop}repeat setpage}{pop pop}ifelse}ifelse}! +end def +%%EndResource +%%EndProlog +%%Page: 1 1 +%%BeginPageSetup +/pagesave save def GS_pswrite_ProcSet begin +612 792 /letter PS +0.1 0.1 scale +480 0 translate +%%EndPageSetup +mark +75 w +4 M +255 15 0 rG +481.48 4361.14 m +-66 41.75 -145.25 62.64 -237.74 62.64 c +-24.49 0 -47.76 -3.02 -69.76 -9 c +-31.49 -8.49 -46.23 -21.97 -44.23 -40.43 c +1.99 -16.99 28.47 -38.2 79.51 -63.66 c +78.49 -38.96 125.74 -63.66 141.74 -74.15 c +51.97 -33.95 79.98 -69.9 83.99 -107.81 c +7 -64.92 -39.99 -117.36 -141.01 -157.3 c +-90.5 -35.94 -199.74 -53.9 -327.74 -53.9 c +-89.01 0 -168.99 7.23 -239.97 21.71 c +-90.53 18.45 -137.02 39.43 -139.51 62.9 c +-0.53 3.48 -0.03 6.97 1.49 10.49 c +45 140.04 p +74 -54.26 149.24 -81.39 225.76 -81.39 c +36.97 0 54.23 12.21 51.74 36.68 c +-3.52 30.41 -24.76 58.85 -63.75 85.31 c +-20.51 12.95 -56.78 36.91 -108.75 71.84 c +-43.51 29.91 -65.24 65.83 -65.24 107.75 c +0 75.32 60.73 130.69 182.26 166.11 c +84.49 24.44 182.72 36.68 294.72 36.68 c +119.48 0 224.24 -16.81 314.24 -50.42 c +17.25 -164.09 h +S +1304.6 4343.04 m +-22.5 -58.8 -50.01 -109.87 -82.5 -153.2 c +-45.5 -60.29 -92.26 -90.44 -140.25 -90.44 c +-35.01 0 -52.5 23.91 -52.5 71.75 c +0 38.85 12.25 82.94 36.74 132.27 c +37.5 75.24 91.23 112.86 161.25 112.86 c +105.76 0 -28.5 -73.24 h +1108.1 4573.78 m +-132.51 0 -249.26 -30.5 -350.24 -91.5 c +-120 -72.5 -180 -170.77 -180 -294.75 c +0 -13.51 0.73 -27.51 2.25 -42.01 c +7.97 -76.5 42.98 -134.24 105 -173.24 c +53.49 -34.01 120.99 -51 202.5 -51 c +149.01 0 267.75 57.86 356.25 173.61 c +-51.76 -164.24 426 0 195.76 626.25 p +-169.51 11.25 -404.76 16.88 -705.76 16.88 c +h +S +5755.04 4343.04 m +-22.5 -58.8 -50.01 -109.87 -82.5 -153.2 c +-45.5 -60.29 -92.26 -90.44 -140.25 -90.44 c +-35 0 -52.5 23.91 -52.5 71.75 c +0 38.85 12.25 82.94 36.74 132.27 c +37.5 75.24 91.23 112.86 161.25 112.86 c +105.76 0 -28.5 -73.24 h +5558.54 4573.78 m +-132.5 0 -249.25 -30.5 -350.24 -91.5 c +-120 -72.5 -180 -170.77 -180 -294.75 c +0 -13.51 0.73 -27.51 2.26 -42.01 c +7.96 -76.5 42.97 -134.24 105 -173.24 c +53.49 -34.01 120.99 -51 202.5 -51 c +149 0 267.74 57.86 356.25 173.61 c +-51.77 -164.24 426 0 195.77 626.25 p +-169.52 11.25 -404.77 16.88 -705.77 16.88 c +h +S +4670.96 5042.19 -297.33 668.31 -574.48 -685.34 202.89 3.96 -315.84 -1098.47 436.49 0 23.24 59.24 P +50.5 -49.51 136.75 -74.24 258.75 -74.24 c +132.01 0 247.99 31.94 348.01 95.83 c +115.49 73.89 173.26 173.21 173.26 298.01 c +0 13.95 -0.76 28.19 -2.25 42.66 c +-15.5 147.74 -141.01 221.63 -376.5 221.63 c +-63.01 0 -138.77 -10.64 -227.25 -31.88 c +123.99 490.32 227.02 9.97 h +4464.7 4260.71 m +-48.01 -126.3 -109.01 -189.43 -182.99 -189.43 c +-26.51 0 -49.01 3.69 -67.52 11.13 c +-11.02 5.45 -22 10.9 -32.99 16.35 c +16.49 45.32 p +35.98 100.05 70.49 166.67 103.51 199.87 c +28.01 28.21 68 42.33 120 42.33 c +90.76 0 -47.26 -125.57 h +S +3637.84 4406.7 m +-12.01 112.61 -97.53 168.95 -256.52 168.95 c +-199.51 0 -348.49 -20.01 -446.98 -60 c +-56.52 39.99 -147.02 60 -271.5 60 c +-204.52 0 -428.26 -5.77 -671.25 -17.25 c +-196.5 -627.75 436.5 0 23.26 62.26 p +73.48 195 138.72 313.74 195.74 356.25 c +32.98 24.99 77.48 37.5 133.5 37.5 c +-19.02 -46.52 -33.25 -85.52 -42.75 -117.01 c +-107.25 -339 442.5 0 24 62.26 p +45.46 115.99 77.22 192.74 95.24 230.24 c +30.49 62.49 60.23 104.51 89.24 126.01 c +32.99 24.99 77.49 37.5 133.5 37.5 c +-19.01 -46.52 -33.25 -85.52 -42.74 -117.01 c +-292.57 -917.2 -223.62 3.05 297.33 -668.31 543.98 656.81 -177.09 2.42 295.99 923.64 p +16 50.53 21.97 96.09 17.99 136.64 c +h +S +K +457.11 4402.39 m +-66 41.75 -145.25 62.64 -237.74 62.64 c +-24.49 0 -47.76 -3.02 -69.76 -9 c +-31.49 -8.49 -46.23 -21.97 -44.23 -40.43 c +1.99 -16.99 28.47 -38.2 79.51 -63.66 c +78.49 -38.96 125.74 -63.66 141.74 -74.15 c +51.97 -33.95 79.98 -69.9 83.99 -107.81 c +7 -64.92 -39.99 -117.36 -141.01 -157.3 c +-90.5 -35.94 -199.74 -53.9 -327.74 -53.9 c +-89.01 0 -168.99 7.23 -239.97 21.71 c +-90.53 18.45 -137.02 39.43 -139.51 62.9 c +-0.53 3.48 -0.03 6.97 1.49 10.49 c +45 140.04 p +74 -54.26 149.24 -81.39 225.76 -81.39 c +36.97 0 54.23 12.21 51.74 36.68 c +-3.52 30.41 -24.76 58.85 -63.75 85.31 c +-20.51 12.95 -56.78 36.91 -108.75 71.84 c +-43.51 29.91 -65.24 65.83 -65.24 107.75 c +0 75.32 60.73 130.69 182.26 166.11 c +84.49 24.44 182.72 36.68 294.72 36.68 c +119.48 0 224.24 -16.81 314.24 -50.42 c +17.25 -164.09 p f +45 w +0 255 r6 +457.11 4402.39 m +-66 41.75 -145.25 62.64 -237.74 62.64 c +-24.49 0 -47.76 -3.02 -69.76 -9 c +-31.49 -8.49 -46.23 -21.97 -44.23 -40.43 c +1.99 -16.99 28.47 -38.2 79.51 -63.66 c +78.49 -38.96 125.74 -63.66 141.74 -74.15 c +51.97 -33.95 79.98 -69.9 83.99 -107.81 c +7 -64.92 -39.99 -117.36 -141.01 -157.3 c +-90.5 -35.94 -199.74 -53.9 -327.74 -53.9 c +-89.01 0 -168.99 7.23 -239.97 21.71 c +-90.53 18.45 -137.02 39.43 -139.51 62.9 c +-0.53 3.48 -0.03 6.97 1.49 10.49 c +45 140.04 p +74 -54.26 149.24 -81.39 225.76 -81.39 c +36.97 0 54.23 12.21 51.74 36.68 c +-3.52 30.41 -24.76 58.85 -63.75 85.31 c +-20.51 12.95 -56.78 36.91 -108.75 71.84 c +-43.51 29.91 -65.24 65.83 -65.24 107.75 c +0 75.32 60.73 130.69 182.26 166.11 c +84.49 24.44 182.72 36.68 294.72 36.68 c +119.48 0 224.24 -16.81 314.24 -50.42 c +17.25 -164.09 h +S +13 16 255 rG +1280.22 4384.29 m +-22.5 -58.8 -50.01 -109.87 -82.5 -153.2 c +-45.5 -60.29 -92.25 -90.44 -140.24 -90.44 c +-35.01 0 -52.5 23.91 -52.5 71.75 c +0 38.85 12.24 82.94 36.74 132.27 c +37.5 75.24 91.23 112.86 161.25 112.86 c +105.76 0 -28.51 -73.24 h +1083.73 4615.03 m +-132.51 0 -249.26 -30.5 -350.25 -91.5 c +-120 -72.5 -180 -170.77 -180 -294.75 c +0 -13.51 0.73 -27.51 2.25 -42.01 c +7.97 -76.5 42.98 -134.24 105 -173.24 c +53.49 -34.01 120.99 -51 202.5 -51 c +149 0 267.74 57.86 356.25 173.61 c +-51.77 -164.24 426.01 0 195.76 626.25 p +-169.51 11.25 -404.77 16.88 -705.76 16.88 c +f +0 255 r6 +1280.22 4384.29 m +-22.5 -58.8 -50.01 -109.87 -82.5 -153.2 c +-45.5 -60.29 -92.25 -90.44 -140.24 -90.44 c +-35.01 0 -52.5 23.91 -52.5 71.75 c +0 38.85 12.24 82.94 36.74 132.27 c +37.5 75.24 91.23 112.86 161.25 112.86 c +105.76 0 -28.51 -73.24 h +1083.73 4615.03 m +-132.51 0 -249.26 -30.5 -350.25 -91.5 c +-120 -72.5 -180 -170.77 -180 -294.75 c +0 -13.51 0.73 -27.51 2.25 -42.01 c +7.97 -76.5 42.98 -134.24 105 -173.24 c +53.49 -34.01 120.99 -51 202.5 -51 c +149 0 267.74 57.86 356.25 173.61 c +-51.77 -164.24 426.01 0 195.76 626.25 p +-169.51 11.25 -404.77 16.88 -705.76 16.88 c +h +S +13 16 255 rG +5730.66 4384.29 m +-22.5 -58.8 -50.01 -109.87 -82.5 -153.2 c +-45.49 -60.29 -92.25 -90.44 -140.24 -90.44 c +-35.01 0 -52.5 23.91 -52.5 71.75 c +0 38.85 12.25 82.94 36.74 132.27 c +37.5 75.24 91.23 112.86 161.25 112.86 c +105.76 0 -28.51 -73.24 h +5534.17 4615.03 m +-132.51 0 -249.26 -30.5 -350.24 -91.5 c +-120.01 -72.5 -180.01 -170.77 -180.01 -294.75 c +0 -13.51 0.74 -27.51 2.26 -42.01 c +7.97 -76.5 42.98 -134.24 105 -173.24 c +53.5 -34.01 121 -51 202.5 -51 c +149.01 0 267.75 57.86 356.25 173.61 c +-51.77 -164.24 426.01 0 195.76 626.25 p +-169.51 11.25 -404.76 16.88 -705.76 16.88 c +f +0 255 r6 +5730.66 4384.29 m +-22.5 -58.8 -50.01 -109.87 -82.5 -153.2 c +-45.49 -60.29 -92.25 -90.44 -140.24 -90.44 c +-35.01 0 -52.5 23.91 -52.5 71.75 c +0 38.85 12.25 82.94 36.74 132.27 c +37.5 75.24 91.23 112.86 161.25 112.86 c +105.76 0 -28.51 -73.24 h +5534.17 4615.03 m +-132.51 0 -249.26 -30.5 -350.24 -91.5 c +-120.01 -72.5 -180.01 -170.77 -180.01 -294.75 c +0 -13.51 0.74 -27.51 2.26 -42.01 c +7.97 -76.5 42.98 -134.24 105 -173.24 c +53.5 -34.01 121 -51 202.5 -51 c +149.01 0 267.75 57.86 356.25 173.61 c +-51.77 -164.24 426.01 0 195.76 626.25 p +-169.51 11.25 -404.76 16.88 -705.76 16.88 c +h +S +K +4646.58 5083.44 -297.33 668.31 -574.48 -685.34 202.9 3.96 -315.85 -1098.47 436.5 0 23.23 59.24 P +50.51 -49.51 136.76 -74.24 258.75 -74.24 c +132.01 0 248 31.94 348.02 95.83 c +115.48 73.89 173.26 173.21 173.26 298.01 c +0 13.95 -0.76 28.19 -2.26 42.66 c +-15.5 147.74 -141 221.63 -376.49 221.63 c +-63.02 0 -138.78 -10.64 -227.26 -31.88 c +123.99 490.32 227.02 9.97 h +4440.33 4301.96 m +-48.02 -126.3 -109.01 -189.43 -182.99 -189.43 c +-26.51 0 -49.01 3.69 -67.53 11.13 c +-11.01 5.45 -22 10.9 -32.99 16.35 c +16.5 45.32 p +35.97 100.05 70.48 166.67 103.5 199.87 c +28.01 28.21 68 42.33 120 42.33 c +90.77 0 -47.26 -125.57 p f +0 255 r6 +4646.58 5083.44 -297.33 668.31 -574.48 -685.34 202.9 3.96 -315.85 -1098.47 436.5 0 23.23 59.24 P +50.51 -49.51 136.76 -74.24 258.75 -74.24 c +132.01 0 248 31.94 348.02 95.83 c +115.48 73.89 173.26 173.21 173.26 298.01 c +0 13.95 -0.76 28.19 -2.26 42.66 c +-15.5 147.74 -141 221.63 -376.49 221.63 c +-63.02 0 -138.78 -10.64 -227.26 -31.88 c +123.99 490.32 227.02 9.97 h +4440.33 4301.96 m +-48.02 -126.3 -109.01 -189.43 -182.99 -189.43 c +-26.51 0 -49.01 3.69 -67.53 11.13 c +-11.01 5.45 -22 10.9 -32.99 16.35 c +16.5 45.32 p +35.97 100.05 70.48 166.67 103.5 199.87 c +28.01 28.21 68 42.33 120 42.33 c +90.77 0 -47.26 -125.57 h +S +K +3613.46 4447.95 m +-12.01 112.61 -97.53 168.95 -256.52 168.95 c +-199.51 0 -348.49 -20.01 -446.98 -60 c +-56.51 39.99 -147.01 60 -271.5 60 c +-204.52 0 -428.26 -5.77 -671.25 -17.25 c +-196.49 -627.75 436.49 0 23.27 62.26 p +73.47 195 138.72 313.74 195.73 356.25 c +32.99 24.99 77.49 37.5 133.5 37.5 c +-19.01 -46.52 -33.25 -85.52 -42.74 -117.01 c +-107.26 -339 442.5 0 24 62.26 p +45.47 115.99 77.22 192.74 95.24 230.24 c +30.5 62.49 60.24 104.51 89.24 126.01 c +32.99 24.99 77.49 37.5 133.51 37.5 c +-19.02 -46.52 -33.25 -85.52 -42.75 -117.01 c +-292.57 -917.2 -223.62 3.05 297.33 -668.31 543.99 656.81 -177.1 2.42 296 923.64 p +15.99 50.53 21.97 96.09 17.98 136.64 c +f +0 255 r6 +3613.46 4447.95 m +-12.01 112.61 -97.53 168.95 -256.52 168.95 c +-199.51 0 -348.49 -20.01 -446.98 -60 c +-56.51 39.99 -147.01 60 -271.5 60 c +-204.52 0 -428.26 -5.77 -671.25 -17.25 c +-196.49 -627.75 436.49 0 23.27 62.26 p +73.47 195 138.72 313.74 195.73 356.25 c +32.99 24.99 77.49 37.5 133.5 37.5 c +-19.01 -46.52 -33.25 -85.52 -42.74 -117.01 c +-107.26 -339 442.5 0 24 62.26 p +45.47 115.99 77.22 192.74 95.24 230.24 c +30.5 62.49 60.24 104.51 89.24 126.01 c +32.99 24.99 77.49 37.5 133.51 37.5 c +-19.02 -46.52 -33.25 -85.52 -42.75 -117.01 c +-292.57 -917.2 -223.62 3.05 297.33 -668.31 543.99 656.81 -177.1 2.42 296 923.64 p +15.99 50.53 21.97 96.09 17.98 136.64 c +h +S +cleartomark end showpage pagesave restore +%%PageTrailer +%%Trailer +%%Pages: 1 +%%EOF |