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