|
Samba, 2. AuflageVon Jay Ts, Robert Eckstein, and David Collier-Brown2. Auflage, August 2003 O'Reilly Verlag, ISBN: 3-89721-359-1 www.oreilly.de/catalog/samba2ger/
Dieses Buch ist unter der GNU Free Documentation License (FDL) erschienen.
Bitte beachten Sie den
Text der GNU FDL.
|
|
Kapitel 12
Fehlersuche und Problembehandlung
Samba ist außergewöhnlich robust. Wenn Sie erst einmal alles nach Wunsch eingerichtet haben, werden Sie vermutlich sogar vergessen, dass es überhaupt läuft. Probleme treten normalerweise während der Installation auf oder wenn Sie versuchen, den Server neu zu konfigurieren. Glücklicherweise stehen eine Vielzahl von Ressourcen zur Verfügung, um diese Probleme zu diagnostizieren. Wir können zwar an dieser Stelle nicht in allen Einzelheiten die Lösung für jedes Problem schildern, das bei Ihnen auftreten könnte, Sie sollten aber mit Hilfe der Ratschläge in diesem Kapitel eine gute Starthilfe erhalten.
Der erste Abschnitt dieses Kapitels führt den Inhalt Ihres Werkzeugkastens auf: Er enthält die Arbeitsmittel, mit denen Sie Fehlern auf die Schliche kommen können. Der zweite Abschnitt erklärt ausführlich, wie Sie diese Werkzeuge einsetzen können, und im letzten Abschnitt machen wir Sie mit zusätzlichen Ressourcen zum Aufspüren besonders hartnäckiger Probleme bekannt.
Der Werkzeugkasten
Unix erscheint manchmal als Sammlung von Anwendungen und Werkzeugen. Es gibt Werkzeuge, um Fehler in Werkzeugen zu suchen. Und selbstverständlich gibt es immer mehrere Möglichkeiten, eine Aufgabe zu erledigen. Wenn Sie versuchen, ein Problem mit Samba zu beheben, sollte eine wohlüberlegte Vorgehensweise folgende Punkte und Werkzeuge berücksichtigen:
- Samba-Protokolle
- Samba-Testprogramme
- Unix-Werkzeuge
- den Fehlerbaum
- die Dokumentation und Listen mit häufig gestellten Fragen und deren Antworten (FAQs; Frequently Asked Questions)
- Samba-Newsgroups
- durchsuchbare Mailinglisten-Archive
In den folgenden Abschnitten wollen wir die einzelnen Punkte genauer betrachten.
Samba-Protokolle
Ihr erster Anknüpfungspunkt sollten grundsätzlich die Protokolldateien sein. Die Samba-Protokolle helfen bei der Lösung der meisten Probleme, auf die Samba-Administratoren (sowohl im Anfänger- als auch im Fortgeschrittenen-Stadium) wahrscheinlich treffen. Samba ist in Bezug auf die Protokollierung sehr flexibel. Sie können den Protokollierungsgrad exakt an Ihre Bedürfnisse anpassen. Mit Hilfe von Variablen in der Samba-Konfigurationsdatei können Sie Protokolle für bestimmte Clients, Freigaben, Benutzer oder Kombinationen daraus erstellen.
Standardmäßig legt Samba Protokolle in den Dateien /usr/local/samba/var/smbd.log und /usr/local/samba/var/nmbd.log an. Sie können beim Start der Samba-Daemons mit der Option -l auf der Kommandozeile ein Protokollverzeichnis festlegen, zum Beispiel:
# smbd -l /var/log/samba # nmbd -l /var/log/sambaAlternativ dazu haben Sie die Möglichkeit, den Ort und den Namen mit der Konfigurationsoption log file in smb.conf einzustellen. Diese Option akzeptiert alle Variablen, so dass Sie den Server leicht dazu veranlassen können, ein eigenes Protokoll für jedes Client-System anzulegen, das sich anmeldet. Dazu geben Sie Folgendes an:
[global] log file = %m.logSie können aber auch dafür sorgen, dass der Server für jeden angebotenen Dienst (also jede Freigabe) ein Protokoll aufzeichnet. Das ist vor allem dann sinnvoll, wenn Sie den Verdacht hegen, dass eine bestimmte Freigabe Ärger verursacht. Dazu setzen Sie die Variable %S ein:
[global] log file = %S.logProtokollierungsstufen
Sie können den Protokollierungsgrad, den Samba verwendet, in der Datei smb.conf festlegen. Benutzen Sie dazu eine der beiden gleichbedeutenden Optionen log level oder debug level. Die Protokollierungsstufe ist ein ganzzahliger Wert zwischen 0 und 10. Bei Stufe 0 wird keine Protokollierung durchgeführt. Höhere Werte haben ausführlichere Protokolle zur Folge. Lassen Sie uns beispielsweise annehmen, dass wir einen Windows-Client benutzen, um ein Verzeichnis auf einem Samba-Server zu durchsuchen. Um nur wenige Informationen zu erhalten, benutzen Sie log level = 1. Damit wird Samba angewiesen, nur oberflächliche Informationen zu zeigen, in diesem Fall lediglich den Verbindungsaufbau:
05/25/02 22:02:11 server (192.168.236.86) connect to service public as user pcguest (uid=503,gid=100) (pid 3377)Höhere Protokollierungsstufen ergeben ausführlichere Angaben. Normalerweise werden Sie nicht über Stufe 3 hinausgehen, die für die meisten Samba-Administratoren mehr als ausreichende Informationen produziert. Höhere Stufen sind für Entwickler gedacht und geben eine Unmenge an Informationen aus, die für Normalsterbliche kryptisch sind.
Hier sind Beispielausgaben der Stufen 2 und 3 desselben Vorgangs. Stören Sie sich nicht daran, wenn Sie die Komplexität einer SMB-Verbindung nicht verstehen. Es geht uns an dieser Stelle ausschließlich darum, die Unterschiede der beiden Protokollierungsgrade zu verdeutlichen:
/* Level 2 */ Got SIGHUP Processing section "[homes]" Processing section "[public]" Processing section "[temp]" Allowed connection from 192.168.236.86 (192.168.236.86) to IPC$ Allowed connection from 192.168.236.86 (192.168.236.86) to IPC/ /* Level 3 */ 05/25/02 22:15:09 Transaction 63 of length 67 switch message SMBtconX (pid 3377) Allowed connection from 192.168.236.86 (192.168.236.86) to IPC$ ACCEPTED: guest account and guest ok found free connection number 105 Connect path is /tmp chdir to /tmp chdir to / 05/25/02 22:15:09 server (192.168.236.86) connect to service IPC$ as user pcguest (uid=503,gid=100) (pid 3377) 05/25/02 22:15:09 tconX service=ipc$ user=pcguest cnum=105 05/25/02 22:15:09 Transaction 64 of length 99 switch message SMBtrans (pid 3377) chdir to /tmp trans <\PIPE\LANMAN> data=0 params=19 setup=0 Got API command 0 of form <WrLeh> <B13BWz> (tdscnt=0,tpscnt=19,mdrcnt=4096,mprcnt=8) Doing RNetShareEnum RNetShareEnum gave 4 entries of 4 (1 4096 126 4096) 05/25/02 22:15:11 Transaction 65 of length 99 switch message SMBtrans (pid 3377) chdir to / chdir to /tmp trans <\PIPE\LANMAN> data=0 params=19 setup=0 Got API command 0 of form <WrLeh> <B13BWz> (tdscnt=0,tpscnt=19,mdrcnt=4096,mprcnt=8) Doing RNetShareEnum RNetShareEnum gave 4 entries of 4 (1 4096 126 4096) 05/25/02 22:15:11 Transaction 66 of length 95 switch message SMBtrans2 (pid 3377) chdir to / chdir to /pcdisk/public call_trans2findfirst: dirtype = 0, maxentries = 6, close_after_first=0, close_if_end = 0 requires_resume_key = 0 level = 260, max_data_bytes = 2432 unix_clean_name [./DESKTOP.INI] unix_clean_name [desktop.ini] unix_clean_name [./] creating new dirptr 1 for path ./, expect_close = 1 05/25/02 22:15:11 Transaction 67 of length 53 switch message SMBgetatr (pid 3377) chdir to / [... gelöscht ...]Wir haben uns den Rest der Ausgabe nach dem ersten Paket gespart, weil sie mehrere Seiten in Anspruch genommen hätte. Seien Sie sich im Klaren, dass Protokollierungsstufen oberhalb von 3 schnell Ihre Festplatten mit Einzelheiten über interne Samba-Aktionen füllen. Die Stufe 3 ist äußerst nützlich, um die Vorgänge des Servers genau zu verfolgen, und in der Regel können Sie Fehler finden, wenn Sie die Protokolldateien genau durchgehen.
Eine hohe Protokollierungsstufe (ab 3) verlangsamt den Samba-Server deutlich. Denken Sie daran, dass Einträge in die Protokolldatei bewirken, dass Daten auf die Festplatte geschrieben werden (ein von Natur aus langsamer Vorgang) und Protokollierungsstufen höher als 2 eine große Datenmenge produzieren. Schalten Sie Stufe 3 nur dann ein, wenn Sie wirklich ein Problem mit dem Samba-Server beheben wollen.
Die Protokollierung aktivieren und deaktivieren
Um die Protokollierung ein- oder auszuschalten, legen Sie die gewünschte Stufe im Abschnitt [global] der Datei smb.conf fest. Dann können Sie entweder Samba neu starten oder den aktuellen Daemon dazu bringen, die Konfigurationsdatei erneut zu verarbeiten, indem Sie ihm ein Hangup-(HUP-)Signal schicken. Oder Sie senden dem smbd-Prozess ein SIGUSR1-Signal, um seine Protokollierungsstufe während des Betriebs zu erhöhen:
# kill -SIGUSR1 1234bzw. ein SIGUSR2-Signal, um sie zu verringern:
# kill -SIGUSR2 1234Aktionen einzelner Client-Systeme oder Benutzer aufzeichnen
Ein wirkungsvoller Weg, Probleme einzelner Clients oder Benutzer zu diagnostizieren, ohne andere Clients und Benutzer zu stören, besteht darin, für einzelne Systeme unterschiedliche Protokollierungsstufen im Abschnitt [global] der smb.conf-Datei zu verwenden. Dies erreichen Sie über eine Strategie, die wir Ihnen bereits vorgestellt haben:
[global] log level = 0 log file = /usr/local/samba/var/log.%m include = /usr/local/samba/lib/smb.conf.%mDiese Optionen weisen Samba an, für jeden Client jeweils eine eigene Konfigurations- und Protokolldatei zu verwenden. Nun müssen Sie nur für die betreffenden Clients eigene smb.conf-Dateien anlegen, die den Eintrag log level = 3 enthalten (die anderen Clients arbeiten mit der Protokollierungsstufe 0), und die Protokolldatei auswerten, um das Problem zu orten.
Wenn ein Problem nur bei einem bestimmten Benutzer auftritt - und diesen von System zu System begleitet -, können Sie die Protokollierung auf diesen Benutzer beschränken, indem Sie Folgendes in die smb.conf-Datei aufnehmen:
[global] log level = 0 log file = /usr/local/samba/var/log.%u include = /usr/local/samba/lib/smb.conf.%uAnschließend können Sie eine eigene smb.conf-Datei für jeden Benutzer anlegen, den Sie überwachen wollen (z.B. /usr/local/samba/lib/smb.conf.tim). Die Dateien enthalten die Konfigurationsoption log level = 3 und zeichnen nur für die angegebenen Benutzer ein ausführlicheres Protokoll auf.
Samba-Testprogramme
Das Verzeichnis /docs/textdocs der Samba-Distribution (beginnend mit der Datei DIAGNOSIS.txt) beschreibt rigorose Prüfungen für die wichtigen Teile von Samba. Der Fehlerbaum in diesem Kapitel ist eine ausführlichere Variante der grundlegenden Tests, die das Samba-Team empfiehlt, behandelt aber - wie DIAGNOSIS.txt - nur die Installation und die Neukonfiguration. Die anderen Dateien im Unterverzeichnis /docs behandeln spezielle Probleme und erklären, wie Sie Probleme beheben, auf die wir in unserem Buch nicht eingehen. Wenn der Fehlerbaum Ihnen keine ausreichenden Informationen bietet, sehen Sie sich die Datei DIAGNOSIS.txt und verwandte Dateien an.
Unix-Werkzeuge
Manchmal ist es sinnvoll, ein von Samba unabhängiges Werkzeug zu verwenden, um Vorgänge auf dem Server zu beobachten. Drei Diagnosewerkzeuge können besonders nützlich sein, um Schwierigkeiten mit Samba zu beheben: trace, tcpdump und Ethereal.
trace verwenden
Den Befehl trace gibt es mit diversen Namen, abhängig vom Betriebssystem, das Sie verwenden. Unter Linux heißt er strace, bei Solaris truss, SGI besitzt padc und par und HP-UX hat trace oder tusc. Alle diese Programme besitzen im Wesentlichen die gleiche Funktion, nämlich das Aufzeigen von Betriebssystem-Funktionsaufrufen. Damit können Sie die Ausführung eines beliebigen Programms verfolgen, beispielsweise den Samba-Server, und genau bestimmen, welcher Aufruf das Problem verursacht.
Ein Problem, das Sie mit trace finden können, sind falsche Versionen dynamisch verbundener Bibliotheken. Dieser Fehler kann auftauchen, wenn Sie Samba als ausführbare, binäre Dateien heruntergeladen haben. Normalerweise sehen Sie bei einem Problem den fehlerverursachenden Aufruf am Ende der Ausgabe von trace, bevor der Samba-Server abstürzt.
Im Folgenden finden Sie eine Beispielausgabe des Befehls strace unter dem Betriebssystem Linux. Dabei handelt es sich um einen kleinen Ausschnitt einer größeren Ausgabe während des Öffnens eines Verzeichnisses auf dem Samba-Server. Jede Zeile entspricht einem Systemaufruf, beginnend mit dem Namen des Aufrufs, gefolgt von seinen Parametern und dem Rückgabewert. Wenn dabei ein Fehler auftritt, enthält die Ausgabe den Fehlerwert (z.B. ENOENT) und seine Erklärung. Sie können die Parametertypen und die möglichen Fehler in der entsprechenden trace-Manpage für das von Ihnen verwendete Betriebssystem nachsehen.
chdir("/pcdisk/public") = 0 stat("mini/desktop.ini", 0xbffff7ec) = -1 ENOENT (No such file or directory) stat("mini", {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0 stat("mini/desktop.ini", 0xbffff7ec) = -1 ENOENT (No such file or directory) open("mini", O_RDONLY) = 5 fcntl(5, F_SETFD, FD_CLOEXEC) = 0 fstat(5, {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0 lseek(5, 0, SEEK_CUR) = 0 SYS_141(0x5, 0xbfffdbbc, 0xedc, 0xbfffdbbc, 0x80ba708) = 196 lseek(5, 0, SEEK_CUR) = 1024 SYS_141(0x5, 0xbfffdbbc, 0xedc, 0xbfffdbbc, 0x80ba708) = 0 close(5) = 0 stat("mini/desktop.ini", 0xbffff86c) = -1 ENOENT (No such file or directory) write(3, "\0\0\0#\377SMB\10\1\0\2\0\200\1\0"..., 39) = 39 SYS_142(0xff, 0xbffffc3c, 0, 0, 0xbffffc08) = 1 read(3, "\0\0\0?", 4) = 4 read(3, "\377SMBu\0\0\0\0\0\0\0\0\0\0\0\0"..., 63) = 63 time(NULL) = 896143871Dieses Beispiel zeigt mehrere erfolglose stat()-Aufrufe auf Grund fehlender Dateien, die erwartet wurden. Sie müssen kein Experte sein, um zu sehen, dass die Datei desktop.ini im angegebenen Verzeichnis nicht vorhanden ist. Sie können mit trace viele offensichtliche, wiederholt auftretende Probleme identifizieren. Häufig müssen Sie sich lediglich die letzte Nachricht vor einem Samba-Absturz ansehen.
tcpdump verwenden
Mit dem Programm tcpdump, das von Andrew Tridgell erweitert wurde, können Sie SMB-Netzwerkverkehr in Echtzeit überwachen. Das Programm beherrscht mehrere Ausgabeformate, und Sie können die Ausgabe filtern, um nur einen bestimmten Teil des Netzwerkverkehrs zu sehen. Das Programm zeigt Ihnen die gesamte Kommunikation zwischen Clients und dem Server, einschließlich der SMB- und NMB-Broadcast-Nachrichten. Die Möglichkeiten zur Fehlersuche beschränken sich auf die OSI-Netzwerkschicht, aber Sie können die Ausgabe der Software verwenden, um eine allgemeine Vorstellung davon zu bekommen, was Server und Clients wollen.
Im Folgenden finden Sie eine Beispielausgabe von tcpdump. Dabei hat ein Client den Inhalt eines Verzeichnisses angefordert, woraufhin der Server die Verzeichnisnamen homes, public, IPC$ und temp zurückgeliefert hat (wir haben am rechten Rand einige Erklärungen hinzugefügt):
$ tcpdump -v -s 255 -i eth0 port not telnet SMB PACKET: SMBtrans (REQUEST) Anforderungspaket SMB Command = 0x25 Die Anforderung war ls oder dir [000] 01 00 00 10 .... >>> NBT Packet Äußerer Rahmen eines SMB-Pakets NBT Session Packet Flags=0x0 Length=226 [lines skipped] SMB PACKET: SMBtrans (REPLY) Anfang einer Antwort auf die Anforderung SMB Command = 0x25 Der Befehl war ls oder dir Error class = 0x0 Error code = 0 Keine Fehler Flags1 = 0x80 Flags2 = 0x1 Tree ID = 105 Proc ID = 6075 UID = 100 MID = 30337 Word Count = 10 TotParamCnt=8 TotDataCnt=163 Res1=0 ParamCnt=8 ParamOff=55 Res2=0 DataCnt=163 DataOff=63 Res3=0 Lsetup=0 Param Data: (8 bytes) [000] 00 00 00 00 05 00 05 00 ........ Data Data: (135 bytes) Eigentlicher Verzeichnisinhalt: [000] 68 6F 6D 65 73 00 00 00 00 00 00 00 00 00 00 00 homes... ........ [010] 64 00 00 00 70 75 62 6C 69 63 00 00 00 00 00 00 d...publ ic...... [020] 00 00 00 00 75 00 00 00 74 65 6D 70 00 00 00 00 ....u... temp.... [030] 00 00 00 00 00 00 00 00 76 00 00 00 49 50 43 24 ........ v...IPC$ [040] 00 00 00 00 00 00 00 00 00 00 03 00 77 00 00 00 ........ ....w... [050] 64 6F 6E 68 61 6D 00 00 00 00 00 00 00 00 00 00 donham.. ........ [060] 92 00 00 00 48 6F 6D 65 20 44 69 72 65 63 74 6F ....Home Directo [070] 72 69 65 73 00 00 00 49 50 43 20 53 65 72 76 69 ries...I PC Servi [080] 63 65 20 28 53 61 6D ce (SamDie Ausgabe stammt aus derselben Sitzung wie der Befehl trace: das Listing eines Verzeichnisses. Die verwendeten Optionen waren -v (ausführliche Ausgabe), -i eth0 (die Netzwerkschnittstelle, an der tcpdump lauschen sollte - ein Ethernet-Port) und -s 255 (um die ersten 255 Bytes jedes Pakets anzeigen zu lassen anstatt wie vorgegeben die ersten 68). Mit der Option port not telnet haben wir die Anzeige von Telnet-Sitzungen deaktiviert, weil wir über das Netzwerk auf dem Server angemeldet waren. Das Programm tcpdump kennt eine Menge Optionen, mit denen Sie unerwünschten Netzwerkverkehr herausfiltern können. Mit snoop oder etherdump erhalten Sie eine ähnliche Ausgabe.
Sie können die veränderte Variante von tcpdump vom Samba-FTP-Server herunterladen; Sie finden sie unter ftp://samba.anu.edu.au/pub/samba/tcpdump-smb. Andere Varianten enthalten keine Unterstützung für das SMB-Protokoll; wenn Sie keine Ausgabe wie im obigen Beispiel sehen, müssen Sie die Version mit SMB-Unterstützung verwenden.
Ethereal verwenden
Ethereal (http://www.ethereal.com) ist ein grafisch orientiertes Programm, das die gleichen Grundfunktionen ausführt wie tcpdump. Möglicherweise bevorzugen Sie die Benutzung von Ethereal, weil es leichter zu bedienen ist. Wenn Ethereal läuft, gehen Sie folgendermaßen vor:
2. Klicken Sie in dem sich öffnenden Dialog auf ok. Dadurch öffnet sich ein Dialogfeld, in dem gezeigt wird, wie viele Pakete Ethereal gesehen hat. Führen Sie auf dem System (oder den Systemen) in Ihrem Netzwerk die Aktion aus, mit der Sie das Problem, das Sie gerade untersuchen, reproduzieren können.
4. Klicken Sie im Hauptfenster von Ethereal auf einen Eintrag im oberen Fenster, um ihn im unteren Fenster näher zu betrachten. Im unteren Fenster klicken Sie auf eines der Kästchen mit dem Pluszeichen (+), um die Darstellung zu erweitern.
Ethereal ist ziemlich gut darin, den Inhalt der Pakete, die es aufzeichnet, in ein lesbares Format zu übersetzen. Es sollte Ihnen nur wenige Schwierigkeiten bereiten festzustellen, was während der Aufzeichnungsperiode in Ihrem Netzwerk geschehen ist.
Der Fehlerbaum
Der in diesem Abschnitt präsentierte Fehlerbaum hilft Ihnen bei der Diagnose und beim Beheben von Problemen, die bei der Installation und Umkonfiguration von Samba auftreten können. Dabei handelt es sich um eine erweiterte Form des Dokuments DIAGNOSIS.txt zur Fehlersuche, das in der Samba-Distribution enthalten ist.
Bevor Sie mit der Fehlersuche beginnen, sollten Sie folgende Informationen ermitteln:
- Ihre Client-IP-Adresse (wir verwenden 192.168.236.10)
- Ihre Server-IP-Adresse (wir verwenden 192.168.236.86)
- die Netzmaske für Ihr Netzwerk (typischerweise 255.255.255.0)
- ob sich die Systeme alle im gleichen Subnetz befinden (bei unseren ist das der Fall)
Aus Gründen der Klarheit haben wir in den folgenden Beispielen den Server in server. example.com und das Client-System in client.example.com umbenannt.
Wie Sie den Fehlerbaum benutzen
Beginnen Sie die Tests hier und überspringen Sie diesen Schritt nicht. Er dauert nicht lange (etwa fünf Minuten) und kann später Zeit bei der Eingrenzung des Fehlers sparen. Wir sagen Ihnen immer, zu welchem Abschnitt Sie springen können, wenn ein Test erfolgreich verläuft.
Fehlersuche beim IP-Protokoll auf niedriger Ebene
Die erste Serie von Tests findet auf den IP-Diensten der niedrigen Ebene statt, die Samba zur Ausführung benötigt. Die Tests in diesem Abschnitt stellen sicher, dass folgende Punkte zutreffen:
- Die IP-Software funktioniert.
- Die Ethernet-Hardware funktioniert.
- Der grundlegende Namensdienst ist eingerichtet.
In den folgenden Abschnitten richten wir die TCP-Software ein, die Samba-Daemons smbd und nmbd, die hostbasierte Zugriffskontrolle, die Authentifizierung, die benutzerbasierte Zugriffskontrolle, Dateidienste und das Durchsuchen. Wir haben die Tests ausführlich beschrieben, so dass sowohl technisch orientierte Endanwender als auch erfahrene System- und Netzwerkadministratoren diese verstehen.
Testen der Netzwerk-Software mit ping
Der erste Befehl, den Sie sowohl am Samba-Server als auch am Client eingeben sollten, lautet ping 127.0.0.1. Dabei handelt es sich um die Loopback-Adresse, über die Sie herausfinden können, ob die Netzwerkunterstützung überhaupt funktioniert. Verwenden Sie auf Unix-Computern ping 127.0.0.1 mit der Statistik-Option und brechen Sie den Befehl nach einigen Zeilen ab. Auf Sun-Workstations heißt der Befehl üblicherweise /usr/etc/ping -s 127.0.0.1, bei Linux einfach ping 127.0.0.1. Geben Sie auf Windows-Clients an der MS-DOS-Eingabeaufforderung ping 127.0.0.1 ein, der Befehl beendet sich nach vier Zeilen selbst.
Hier ein Beispiel auf einem Linux-Server:
$ ping 127.0.0.1 PING localhost: 56 data bytes 64 bytes from localhost (127.0.0.1): icmp-seq=0. time=1. ms 64 bytes from localhost (127.0.0.1): icmp-seq=1. time=0. ms 64 bytes from localhost (127.0.0.1): icmp-seq=2. time=1. ms ^C ----127.0.0.1 PING Statistics---- 3 packets transmitted, 3 packets received, 0% packet loss round-trip (ms) min/avg/max = 0/0/1Wenn der Befehl ping: no answer from ... oder 100% packet loss ausgibt, ist IP nicht auf dem Computer installiert. Bei 127.0.0.1 handelt es sich um die interne Loopback-Adresse, die Sie auch ansprechen können, wenn der Computer nicht mit dem Netzwerk verbunden ist. Wenn dieser Test fehlschlägt, haben Sie ein ernstes Problem. TCP/IP ist entweder nicht installiert oder falsch konfiguriert. Lesen Sie die Dokumentation Ihres Betriebssystems, wenn es ein Unix-Server ist. Bei einem Windows-Client folgen Sie den Anweisungen in Kapitel 3, um Netzwerkunterstützung zu installieren.
Sind Sie der Netzwerkverwalter, empfehlen wir Ihnen TCP/IP-Netzwerk-Administration, Kapitel 11, von Craig Hunt sowie Windows NT TCP/IP Netzwerk-Administration von Craig Hunt und Robert Bruce Thompson. Beide Bücher sind bei O'Reilly erschienen.
Lokale Namensdienste mit ping testen
Versuchen Sie nun, mit dem Befehl ping localhost auf dem Samba-Server zu erreichen. Der Hostname localhost bezieht sich auf den lokalen Host, also auf die Loopback-Schnittstelle 127.0.0.1, und sollte zu dieser Adresse aufgelöst werden. Nach dem Eingeben von ping localhost sollte die Ausgabe etwa so aussehen:
$ ping localhost PING localhost: 56 data bytes 64 bytes from localhost (127.0.0.1): icmp-seq=0. time=0. ms 64 bytes from localhost (127.0.0.1): icmp-seq=1. time=0. ms 64 bytes from localhost (127.0.0.1): icmp-seq=2. time=0. ms ^CIst dies erfolgreich, versuchen Sie das Gleiche auf dem Client. Anderenfalls:
- Erhalten Sie die Meldung unknown host: localhost, gibt es ein Problem mit der Auflösung des Hostnamens localhost in eine gültige IP-Adresse. (Die Ursache könnte ganz einfach ein fehlender Eintrag in einer lokalen hosts-Datei sein.) Begeben Sie sich von hier zum Abschnitt »Fehlersuche bei Namensdiensten« weiter unten in diesem Kapitel.
- Erhalten Sie die Meldung ping: no answer oder 100% packet loss, das Versenden von ping an 127.0.0.1 hat jedoch funktioniert, liefern die Namensdienste eine Adresse, die allerdings nicht die richtige ist. Prüfen Sie die Datei oder Datenbank (üblicherweise /etc/hosts auf einem Unix-System), die vom Namensdienst zum Auflösen der Adressen eingesetzt wird, um sicherzustellen, dass der Eintrag korrekt ist.
Testen der Netzwerk-Hardware mit ping
Versuchen Sie nun, die IP-Adresse des Servers selbst mit ping zu erreichen. Sie sollten genau das gleiche Ergebnis erhalten wie beim ping auf die Adresse 127.0.0.1:
$ ping 192.168.236.86 PING 192.168.236.86: 56 data bytes 64 bytes from 192.168.236.86 (192.168.236.86): icmp-seq=0. time=1. ms 64 bytes from 192.168.236.86 (192.168.236.86): icmp-seq=1. time=0. ms 64 bytes from 192.168.236.86 (192.168.236.86): icmp-seq=2. time=1. ms ^C ----192.168.236.86 PING Statistics---- 3 packets transmitted, 3 packets received, 0% packet loss round-trip (ms) min/avg/max = 0/0/1Wenn dies auf dem Server funktioniert, wiederholen Sie es auf dem Client. Ansonsten:
- Falls ping netzwerk_ip auf dem Server oder dem Client fehlschlägt, ping 127.0.0.1 dagegen auf diesem System funktioniert, haben Sie ein TCP/IP-Problem mit der Ethernet-Netzwerkkarte an dem Computer. Lesen Sie die Dokumentation der Karte oder des Betriebssystems, um die korrekte Konfiguration zu ermitteln. Beachten Sie, dass auf einigen Systemen der ping-Befehl auch dann eine Erfolgsmeldung zurückgibt, wenn das System nicht mit dem Netzwerk verbunden ist, so dass dieser Test ein Hardware-Problem nicht in jedem Fall erkennt.
Testen der Verbindungen mit ping
Versuchen Sie als Nächstes, den Server mit seinem Namen anzusprechen (nicht mit seiner IP-Adresse), und zwar sowohl lokal vom Server als auch vom Client aus. Dabei handelt es sich um einen allgemeinen Test für die Netzwerk-Hardware.
$ ping server PING server.example.com: 56 data bytes 64 bytes from server.example.com (192.168.236.86): icmp-seq=0. time=1. ms 64 bytes from server.example.com (192.168.236.86): icmp-seq=1. time=0. ms 64 bytes from server.example.com (192.168.236.86): icmp-seq=2. time=1. ms ^C ----server.example.com PING Statistics---- 3 packets transmitted, 3 packets received, 0% packet loss round-trip (ms) min/avg/max = 0/0/1Im Erfolgsfall erfahren Sie fünf Dinge:
- Der Hostname (z.B. server) ist von Ihrem lokalen Name-Server gefunden worden.
- Der Hostname wurde zu seinem vollständigen Namen erweitert (z.B. server. example.com).
- Seine Adresse wurde zurückgeliefert (192.168.236.86).
- Der Client hat dem Samba-Server vier 56-Byte-UDP/IP-Pakete geschickt.
- Der Samba-Server hat auf alle vier Pakete geantwortet.
Ist dieser Test nicht erfolgreich verlaufen, sind im Netzwerk vermutlich ein oder mehrere Dinge nicht in Ordnung:
- Wenn Sie eine der Meldungen ping: no answer oder 100% packet loss erhalten, sind entweder Sie nicht an das Netzwerk angeschlossen oder das andere System ist nicht an das Netzwerk angeschlossen, oder eine der Adressen ist falsch. Prüfen Sie die Adressen, die der ping-Befehl für die einzelnen Systeme zurückliefert, und stellen Sie sicher, dass sie denjenigen entsprechen, die Sie zu Anfang eingestellt haben.
Falls nicht, gibt es wenigstens eine falsch zugeordnete Adresse zwischen den beiden Systemen. Geben Sie einmal den Befehl arp -a ein und schauen Sie nach, ob es einen Eintrag für das andere System gibt. (Der Befehl arp steht für das Address Resolution Protocol. arp -a listet alle Adressen auf, die auf dem lokalen System bekannt sind.) Hier sind einige Dinge, die Sie ausprobieren können:
- Wenn Sie eine Nachricht wie 192.168.236.86 at (incomplete) empfangen, ist die Ethernet-Adresse von 192.168.236.86 unbekannt. Das ist ein Zeichen für eine fehlende Netzwerkverbindung. Wahrscheinlich haben Sie ein Problem mit dem TCP/IP-Protokoll-Stack, und zwar mit der Ebene der Ethernet-Schnittstelle. Näheres dazu finden Sie in den Kapiteln 5 und 6 des Buches TCP/IP Netzwerk-Administration (O'Reilly).
- Wenn Sie eine Antwort wie server (192.168.236.86) at 8:0:20:12:7c:94 erhalten, wurde der Server irgendwann einmal erreicht, oder ein anderes System antwortet in seinem Namen. Das bedeutet jedoch, dass ping funktioniert haben sollte: Sie haben ein Netzwerk- oder ARP-Problem.
- Wenn die IP-Adresse des ARP nicht den erwarteten Adressen entspricht, untersuchen und korrigieren Sie die Adressen manuell.
- Kann jedes System sich selbst, aber kein anderes mit ping erreichen, stimmt etwas mit dem dazwischen liegenden Netzwerk nicht.
- Erhalten Sie die Meldungen ping: network unreachable oder ICMP Host Unreachable, bekommen Sie keine Antwort, und es ist möglicherweise mehr als ein Netzwerk beteiligt.
Im Prinzip sollten Sie nicht versuchen, Fehler bei SMB-Clients und -Server in unterschiedlichen Netzwerken zu beheben. Versuchen Sie, einen Server und einen Client zu testen, die sich im gleichen Netzwerk befinden:
1. Führen Sie zuerst die Tests für ping: no answer aus, die weiter vorn in diesem Abschnitt beschrieben worden sind. Kann das Problem damit nicht ermittelt werden, bleiben noch folgende Möglichkeiten: Eine Adresse ist falsch, Ihre Netzmaske ist falsch, ein Netzwerk ist nicht in Betrieb, oder die Pakete sind durch eine Firewall gestoppt worden.
2. Überprüfen Sie sowohl die Adresse als auch die Netzmasken an den Quell- und Zielsystemen, um festzustellen, ob etwas offensichtlich verkehrt ist. Angenommen, beide Systeme befinden sich wirklich im gleichen Netzwerk, dann sollten beide die gleiche Netzmaske besitzen, und ping sollte die richtigen Adressen zurückliefern. Wenn die Adressen falsch sind, müssen Sie diese korrigieren. Wenn sie richtig sind, wurden die Programme vielleicht durch eine falsche Netzmaske verwirrt. Siehe den Abschnitt »Netzmasken« weiter unten in diesem Kapitel.
3. Wenn die Befehle weiterhin berichten, dass das Netzwerk unerreichbar ist und keine der genannten Bedingungen eingetroffen ist, besteht vermutlich wirklich keine Verbindung zwischen den beiden Netzwerken. Auch dieses Problem muss vom Netzwerkverwalter gelöst werden.
- Die Meldung ICMP Administratively Prohibited deutet darauf hin, dass eine Firewall oder ein falsch konfigurierter Router die Kommunikation verbietet. Sprechen Sie mit dem Beauftragten für die Systemsicherheit.
- Die Meldung ICMP Host redirect, während gleichzeitig die ping-Befehle funktionieren, ist harmlos: Sie bedeutet, dass Sie eine Umleitung benutzt haben
- Die Meldung host redirect und ausbleibende ping-Antworten bedeuten, dass ein Router Sie auf eine nicht funktionierende Umleitung geschickt hat. Gehen Sie so vor, als wäre die Fehlermeldung Network unreachable aufgetreten, und prüfen Sie Ihre Adressen und Netzmasken.
- Wenn Sie die Meldung ICMP Host Unreachable from gateway Gateway_Name erhalten, ping-Pakete im anderen Netzwerk ankommen, Antwortpakete Ihr System hingegen nicht erreichen und der Router das Problem meldet, behandeln Sie dieses Problem, als wäre der Fehler Network unreachable aufgetreten. Prüfen Sie Ihre Adressen und Netzmasken.
- Die Ausgabe ping: unknown host Hostname bedeutet, dass der Name des Zielcomputers nicht bekannt ist. Das deutet auf ein Problem mit dem Namensdienst hin, der localhost nicht beeinflusst. Lesen Sie den Abschnitt »Fehlersuche bei Namensdiensten« weiter unten in diesem Kapitel.
- Wenn Sie einen Teilerfolg erzielen, also einige ping-Pakete erfolgreich sind und andere nicht, kann ein Netzwerkproblem bestehen; möglicherweise ist das Netzwerk überlastet. Setzen Sie den ping-Befehl über eine längere Zeit fort und schauen Sie, ob das Zielsystem mehr als etwa drei Prozent der Pakete nicht beantwortet. In diesem Fall sollten Sie den Netzwerkverwalter heranziehen; möglicherweise befindet sich das Problem noch in einem Anfangsstadium. Wenn nur wenige Pakete nicht beantwortet werden oder Sie wissen, dass momentan ein Programm mit starker Netzwerkbelastung läuft, kümmern Sie sich nicht weiter darum. Die Protokolle ICMP (und UDP) senden verlorene Pakete nicht erneut, falls sie im Netzwerk verloren gehen.
- Wenn Sie eine Meldung wie smtsvr.antares.net is alive erhalten, aber mit dem ping-Befehl das System client.example.com erreichen wollten, verwendet das Zielsystem die Adresse eines anderen Computers, oder der Zielcomputer besitzt mehrere Namen und Adressen. Wenn die Adresse falsch ist, ist eindeutig der Namensdienst schuldig, und Sie müssen die Adresse in der Datenbank des Namensdienstes korrigieren, damit sie auf das richtige System verweist. Wie Sie das tun, steht weiter unten in diesem Kapitel im Abschnitt »Fehlersuche bei Namensdiensten«.
Server sind häufig multihomed - d.h. mit mehr als einem Netzwerk verbunden. Sie besitzen in jedem Netzwerk einen eigenen Namen. Wenn Sie eine Antwort mit einem nicht erwarteten Namen von einem Multihomed-Server bekommen, prüfen Sie, ob die Adresse in Ihrem Netzwerk liegt (sehen Sie sich den Abschnitt »Netzmasken« weiter unten in diesem Kapitel an). In diesem Fall sollten Sie aus Gründen der Zuverlässigkeit und der Leistung diese Adresse und nicht diejenige eines anderen Netzwerks benutzen.
Server können außerdem für eine einzige Ethernet-Adresse mehrere Namen besitzen; das trifft besonders auf Webserver zu. Das ist unproblematisch, wenn auch möglicherweise überraschend. Sie sollten den offiziellen (permanent gültigen) Namen benutzen anstatt einen Alias-Namen, der sich ändern oder ungültig werden kann.
- Wenn alles klappt, aber die gemeldete IP-Adresse 127.0.0.1 ist, stimmt mit Ihrem Namensdienst etwas nicht. Dieser Fall tritt gewöhnlich auf, wenn ein Betriebssystem-Installationsprogramm einen Eintrag in der Datei /etc/hosts erzeugt, der der Zeile 127.0.0.1 localhost hostname.domainname ähnelt. Die localhost-Zeile sollte 127.0.0.1 localhost oder 127.0.0.1 localhost loghost lauten. Korrigieren Sie sie, da sie Fehler dabei verursacht, wer den Hauptsuchdienst ausführt und die Hauptsuchliste verwaltet. Dieser Fehler kann zudem in späteren Tests (nicht eindeutige) Probleme verursachen.
Wenn dies vom Server aus funktioniert hat, wiederholen Sie die Tests vom Client aus.
TCP-Fehlersuche
Nachdem Sie nun IP, UDP und einen Namensdienst mit ping getestet haben, wird es Zeit, TCP zu testen. Das Durchsuchen und ping verwenden ICMP und UDP, die Datei- und Druckdienste (Freigaben) benutzen TCP. Beide hängen von IP als darunter liegender Schicht ab, und alle vier benötigen Namensdienste. Das Testen von TCP geschieht am bequemsten mit dem FTP-Programm.
Testen von TCP mit FTP
Versuchen Sie eine FTP-Verbindung herzustellen, und zwar einmal lokal vom Server zu sich selbst und einmal vom Client zum Server:
$ ftp server Connected to server.example.com. 220 server.example.com FTP server (Version 6.2/OpenBSD/Linux-0.10) ready. Name (server:davecb): 331 Password required for davecb. Password: 230 User davecb logged in. ftp> quit 221 Goodbye.Hat dies funktioniert, gehen Sie zum nächsten Abschnitt »Fehlersuche bei den Server-Daemons« über, ansonsten:
- Haben Sie die Meldung server: unknown host (unbekannter Host) erhalten, bedeutet dies, dass der Namensdienst nicht funktioniert. Gehen Sie zum entsprechenden Schritt mit ping, »Lokale Namensdienste mit ping testen«, zurück und wiederholen Sie die dort beschriebenen Tests, um herauszufinden, warum die Namensauswertung fehlschlägt.
- Die Meldung ftp: connect: Connection refused (Verbindung abgelehnt) heißt, dass das Zielsystem keinen FTP-Daemon ausführt. Auf Unix-Systemen ist dies ziemlich ungewöhnlich. Greifen Sie in diesem Fall per telnet an Stelle von ftp auf den Server zu; die Meldungen sind sehr ähnlich, und telnet verwendet ebenfalls TCP.
- Gibt es eine lange Pause und kommt dann die Meldung ftp: connect: Connection timed out (Verbindung wegen Zeitüberschreitung abgebrochen), ist der Zielcomputer nicht erreichbar. Gehen Sie zum Abschnitt »Testen der Verbindungen mit ping« zurück.
- Die Meldung 530 Logon Incorrect besagt, dass Sie zwar erfolgreich eine Verbindung hergestellt haben, aber gerade ein anderes Problem aufgetreten ist. Wahrscheinlich haben Sie den falschen Benutzernamen oder das falsche Kennwort eingegeben. Versuchen Sie es noch einmal und achten Sie jetzt darauf, dass Sie wirklich den Benutzernamen vom Unix-Server verwenden und sich bei der Kennworteingabe nicht verschreiben.
Fehlersuche bei den Server-Daemons
Wenn die TCP-Kommunikation einwandfrei funktioniert, müssen Sie sicherstellen, dass der Server die Daemons ausführt. Dazu sind drei separate Tests notwendig, weil kein einzelner der drei Tests entscheidend beweist, dass sie richtig funktionieren.
Um sicher zu sein, dass sie laufen, müssen Sie feststellen, ob die Daemons:
Den Start der Daemons überwachen
Prüfen Sie zunächst die Protokolldateien. Wenn Sie die Daemons gestartet haben, sollte darin die Meldung smbd version Versionsnummer started erscheinen. Wenn dies nicht der Fall ist, müssen Sie die Samba-Daemons erneut starten.
Wenn die Daemons der Protokolldatei zufolge gestartet sind, suchen Sie nach der Meldung bind failed on port 139 socket_addr=0 (Address already in use). Sie besagt, dass bereits ein anderer Daemon den Port 139 (smbd ) belegt. nmbd liefert eine ähnliche Meldung, wenn er Port 137 nicht belegen kann. Entweder haben Sie die Daemons zweimal gestartet, oder der inetd-Server hat versucht, einen Daemon für Sie aufzurufen. Diesen Fall behandeln wir in Kürze.
Die Daemon-Prozesse mit ps suchen
Eine andere Möglichkeit, um sicherzustellen, dass die Daemons ausgeführt werden, besteht darin, ihre Prozesse im System zu prüfen. Benutzen Sie den Befehl ps auf dem Server mit der Option »lang« für Ihren Systemtyp (üblicherweise ps ax oder ps -ef) und schauen Sie nach, ob smbd und nmbd bereits laufen. Oft sieht dies so aus:
$ ps ax PID TTY STAT TIME COMMAND 1 ? S 0:03 init [2] 2 ? SW 0:00 (kflushd) (...viele Zeilen mit Prozessen...) 234 ? S 0:14 nmbd -D3 237 ? S 0:11 smbd -D3 (...weitere Zeilen, möglicherweise mit weiteren smbd-Zeilen...)Dieses Beispiel zeigt, dass smbd und nmbd ausgeführt werden und als allein stehende Daemons (die Option -D) mit der Protokollierungsstufe 3 gestartet wurden.
Prüfen, ob die Daemons an Ports gebunden sind
Als Nächstes müssen die Daemons am Betriebssystem registriert werden, damit sie auf die TCP/IP-Ports zugreifen dürfen. Der Befehl netstat teilt Ihnen mit, ob dies geschehen ist. Geben Sie auf dem Server netstat -a ein und suchen Sie in der Ausgabe nach Zeilen, die netbios, 137 oder 139 enthalten:
$ netstat -a Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) udp 0 0 *.137 *.* tcp 0 0 *.139 *.* LISTEN tcp 8370 8760 server.139 client.1439 ESTABLISHEDInmitten vieler ähnlich aussehender Zeilen sollte zumindest eine UDP-Zeile für *.netbios- oder *.137 sein. Sie sagt Ihnen, dass der nmbd-Server registriert ist und (das hoffen wir) Anfragen beantworten kann. Außerdem sollte die Ausgabe wenigstens eine TCP-Zeile mit *.netbios- oder *.139 enthalten, wahrscheinlich mit dem Zustand LISTEN. Das bedeutet, dass smbd aktiv ist und auf Verbindungen wartet.
Möglicherweise sehen Sie weitere TCP-Zeilen, die Verbindungen von smbd zu Clients beschreiben (für jede Verbindung eine Zeile). Ihr Zustand ist gewöhnlich ESTABLISHED. Wenn Sie smbd-Zeilen mit dem Zustand ESTABLISHED sehen, führt Ihr Server smbd definitiv aus. Wenn Sie nur eine Zeile mit dem Zustand LISTEN sehen, können wir keine sichere Aussage darüber machen. Fehlen beide Zeilen, wurde einer der Daemons nicht gestartet. Sie müssen die Protokolle prüfen und sollten Kapitel 2 lesen.
Wenn es für jeden Client eine Zeile gibt, kann diese entweder vom Samba-Daemon oder vom Haupt-IP-Daemon, inetd, kommen. Es ist durchaus möglich, dass Ihre inetd-Startdatei Zeilen für den Start der Samba-Daemons enthält, ohne dass Sie es wissen (möglicherweise hat ein Setup-Programm die Zeilen dort eingetragen, wenn Sie Samba als Teil einer Linux-Distribution installiert haben). Die von inetd gestarteten Daemons verhindern, dass unsere Daemons ausgeführt werden. Dieses Problem generiert üblicherweise Protokollmeldungen wie bind failed on port 139 socket addr=0 (Address already in use).
Prüfen Sie Ihre Datei /etc/inetd.conf ; solange Sie die Daemons absichtlich und bewusst von hier aus starten, dürfen dort keine netbios-ns-Einträge (UDP-Port 137) oder netbios-ssn-Einträge (TCP-Port 139) vorhanden sein. Wenn Ihr System einen SMB-Daemon über inetd zur Verfügung stellt, finden Sie in der inetd.conf-Datei Zeilen wie die folgenden:
netbios-ssn stream tcp nowait root /usr/local/samba/bin/smbd smbd netbios-ns dgram udp wait root /usr/local/samba/bin/nmbd nmbdVerwendet Ihr System xinetd an Stelle von inetd, erfahren Sie in Kapitel 2 mehr über seine Konfiguration.
smbd mit telnet prüfen
Witzigerweise besteht die einfachste Methode zum Testen der tatsächlichen Betriebsbereitschaft des smbd-Servers darin, ihm eine sinnlose Nachricht zu schicken und abzuwarten, ob er sie abweist. Versuchen Sie einmal so etwas:
$ echo "hello" | telnet localhost 139 Trying Trying 192.168.236.86 ... Connected to localhost. Escape character is '^]'. Connection closed by foreign host.Dieser Befehl sendet eine falsche, aber harmlose Nachricht an smbd. Erhalten Sie die Meldung Connected, gefolgt von der Meldung Connection closed, verlief der Test erfolgreich. Ein smbd-Daemon wartet an dem Port und weist unpassende Verbindungsmeldungen ab. Bekommen Sie dagegen die Meldung telnet:connect:Connection refused, ist der Daemon wahrscheinlich nicht vorhanden.
Leider gibt es für nmbd keinen so einfachen Test. Wenn sowohl der telnet- als auch der netstat-Test erfolgreich sind, ist die Wahrscheinlichkeit hoch, dass netstat auch eine richtige Aussage über den Prozess nmbd macht.
Die Daemons mit testparm testen
Sobald Sie wissen, dass es einen Daemon gibt, sollten Sie in der Hoffnung auf die folgende Ausgabe den Befehl testparm ausführen:
$ testparm Load smb config files from /opt/samba/lib/smb.conf Processing section "[homes]" Processing section "[printers]" ... Processing section "[tmp]" Loaded services file OK. ...Das Programm testparm berichtet normalerweise die Verarbeitung in einer Reihe von Abschnitten und gibt im Erfolgsfall die Meldung Loaded services file OK aus. Wenn es ein Problem gibt, sehen Sie eine oder mehrere der folgenden Ausgaben, die zusätzlich in dieser Form in der Protokolldatei auftauchen:
Eine nur von testparm ausgegebene Nachricht, die erzeugt wird, wenn Sie die Option valid user oder invalid user in der Datei smb.conf gesetzt haben. Stellen Sie sicher, dass Sie in der Liste der gültigen Benutzer aufgeführt sind und dass root, bin usw. in der Liste der ungültigen Benutzer stehen. Wenn Sie dies nicht tun, können Sie sich nicht mit dem Samba-Server verbinden, oder andere Personen können sich verbinden, ohne es zu dürfen.
Diese Meldung ist nur von Bedeutung, wenn Sie Windows for Workgroups- oder ältere Clients besitzen. Diese können sich nicht mit Freigaben verbinden, deren Namen mehr als acht Zeichen lang sind. Die Clients geben eine verwirrende Meldung aus, die auf Speicherprobleme hindeutet.
Einer Verzeichnisfreigabe ist nicht bekannt, welches Verzeichnis sie dem Benutzer anbieten soll, oder einer Druckerfreigabe fehlt die Angabe des Spool-Verzeichnisses. Wenn Sie keinen Pfad angeben, verwendet der Dienst /tmp, was Sie wahrscheinlich nicht wollen.
Eine Konfigurationsdatei, auf die mit der Option include verwiesen wird, existiert nicht. Falls Sie diese Datei bedingungslos eingeschlossen haben, handelt es sich um einen Fehler, und zwar wahrscheinlich um einen ernsten: Die Freigabe weist nicht die von Ihnen beabsichtigte Konfiguration auf. Haben Sie die Datei auf der Grundlage einer der %-Variablen eingeschlossen, etwa %a (für die Client-Architektur), müssen Sie selbst entscheiden, ob eine fehlende Konfigurationsdatei beispielsweise für Windows for Workgroups ein Problem darstellt. Oft ist das nicht der Fall.
Gibt an, dass ein globaler Parameter in einer bestimmten Freigabe verwendet wurde. Samba ignoriert den Parameter.
Wiederholen Sie den testparm-Test anschließend mit (genau) drei Parametern: dem Namen Ihrer smb.conf-Datei sowie dem Namen Ihres Clients und seiner IP-Adresse:
# testparm /usr/local/samba/lib/smb.conf client 192.168.236.10Mit diesem Test werden der Hostname und die Adresse mit den Optionen hosts allow und hosts deny verglichen. Es könnten die Meldungen Allow connection from hostname to service und/oder Deny connection from hostname to service für das Client-System erzeugt werden. Diese Meldungen zeigen an, dass Sie die Optionen hosts allow und/oder hosts deny in Ihrer smb.conf haben, die den Zugriff vom Client-System erlauben oder verbieten.
Fehlersuche bei SMB-Verbindungen
Sie wissen jetzt, dass die Server in Betrieb sind, und müssen nun sicherstellen, dass sie richtig ausgeführt werden. Wir beginnen damit, dass wir eine einfache smb.conf-Datei in das Verzeichnis /usr/local/samba/lib legen.
Eine minimale smb.conf-Datei
In den folgenden Tests nehmen wir an, dass Sie eine [temp]-Freigabe haben, die sich für die Tests eignet, und dass noch ein weiterer Zugang vorliegt. Im Folgenden sehen Sie eine smb.conf-Datei, die genau diese Anforderungen erfüllt:
[global] workgroup = EXAMPLE security = user browsable = yes local master = yes [homes] guest ok = no browsable = no [temp] path = /tmp public = yesDie Option public = yes in der [temp]-Freigabe dient lediglich Testzwecken. Sie wollen wahrscheinlich nicht, dass jemand, der keinen Zugang auf Ihrem Samba-Server hat, Dinge darauf ablegen kann. Deshalb sollten Sie diese Option auskommentieren, wenn Sie mit den Tests fertig sind.
Lokale Tests mit smbclient
Der erste Test soll sicherstellen, dass der Server seine eigenen Dienste (Freigaben) auflisten kann. Führen Sie den Befehl smbclient -L localhost -U% aus, um eine Verbindung zum Server von sich selbst aus herzustellen und den Gastbenutzer anzugeben. Sie sollten Folgendes sehen:
$ smbclient -L localhost -U% Server time is Wed May 27 17:57:40 2002 Timezone is UTC-4.0 Server=[localhost] User=[davecb] Workgroup=[EXAMPLE] Domain=[EXAMPLE] Sharename Type Comment --------- ----- ---------- temp Disk IPC$ IPC IPC Service (Samba 1.9.18) homes Disk Home directories This machine does not have a browse listWenn Sie diese Ausgabe erhalten haben, können Sie mit dem nächsten Abschnitt, »Testen der Verbindungen mit smbclient«, fortfahren. Bei einem Fehler überprüfen Sie diese Punkte:
- Die Fehlermeldung Get_hostbyname: unknown host localhost bedeutet, dass Sie den Namen falsch geschrieben haben oder dass es tatsächlich ein Problem gibt (das Sie im Abschnitt »Lokale Namensdienste mit ping testen« hätten aufspüren müssen). Fahren Sie in diesem Fall mit dem Abschnitt »Fehlersuche bei Namensdiensten« weiter unten in diesem Kapitel fort.
- Der Fehler Connect error: Connection refused bedeutet, dass der Server gefunden wurde, er aber keinen nmbd-Daemon ausführt. Gehen Sie zum Abschnitt »Fehlersuche bei den Server-Daemons« zurück und testen Sie die Daemons erneut.
- Wenn Sie die Meldung Your server software is being unfriendly sehen, hat der Server mit »Datenmüll« geantwortet. Der Server ist möglicherweise abgestürzt oder wurde nicht korrekt gestartet. In der Regel finden Sie die Ursachen in den Protokolldateien. Suchen Sie darin:
- Ein ernsthaftes Problem mit der Datei smb.conf, die den Start von smbd verhindert. Prüfen Sie Ihre Änderungen immer mit testparm, wie im Abschnitt »Die Daemons mit testparm testen« demonstriert.
- Das Vorhandensein eines Servers am Port (139 für smbd, 137 für nmbd ), das verhindert, dass der Daemon startet.
- Wenn Sie inetd (oder xinetd ) statt allein stehender Daemons verwenden, prüfen Sie die Einträge in den Dateien /etc/inetd.conf (bzw. in den Konfigurationsdateien von xinetd) und /etc/services anhand der Manpages auf Fehler.
- Wenn Sie einen Password:-Prompt präsentiert bekommen, ist Ihr Gastzugang nicht richtig eingerichtet. Die Option -U% weist smbclient an, eine »Null-Anmeldung« durchzuführen, die das Vorhandensein des Gastzugangs erfordert; es muss keine Privilegien besitzen.
- Auch die Meldung SMBtconX failed. ERRSRV-ERRaccess deutet darauf hin, dass der Server Sie nicht akzeptiert hat. Normalerweise ist diese Meldung ein Hinweis darauf, dass Sie eine hosts allow-Option verwenden, die den Server nicht einschließt, oder dass umgekehrt der Server in der Option hosts deny auftaucht. Prüfen Sie dies erneut mit dem Befehl testparm smb.conf ihr_hostname ihre_ip_adresse (siehe den Abschnitt »Die Daemons mit testparm testen«) und korrigieren Sie alle unbeabsichtigten Sperren.
Testen der Verbindungen mit smbclient
Führen Sie den Befehl smbclient \\server\temp aus, um eine Verbindung zur [temp]-Freigabe des Servers aufzubauen und festzustellen, ob Sie eine Verzeichnisfreigabe erreichen. Sie sollten folgende Antwort erhalten:
$ smbclient '\\server\temp' Server time is Tue May 5 09:49:32 2002 Timezone is UTC-4.0 Password:Diese Fehler könnten auftreten:
- Wenn Sie eine der Meldungen Get_Hostbyname: Unknown host name, Connect error: Connection refused oder Your server software is being unfriendly sehen, lesen Sie zur Diagnose den vorangegangenen Abschnitt »Lokale Tests mit smbclient«.
- Die Meldung servertemp: Not enough `\' characters in service bedeutet, dass Sie die Adresse nicht in Anführungszeichen eingeschlossen haben, so dass Unix die Backslashes entfernt hat. Sie können auch diese Befehle schreiben:
smbclient \\\\server\\tempsmbclient //server/tempGeben Sie nun Ihr Unix-Kennwort am Password:-Prompt ein. Wenn Sie dann den Prompt smb: \> sehen, hat der Verbindungsaufbau funktioniert. Geben Sie quit ein und fahren Sie mit dem Abschnitt »Testen der Verbindungen mit net use« fort. Wenn Sie als Fehlermeldung SMBtconX failed. ERRSRV-ERRinvnetname bekommen, handelt es sich wahrscheinlich um eines der folgenden Probleme:
- Ein falscher Freigabename: Vielleicht haben Sie sich vertippt, der Name ist zu lang, enthält gemischte Groß-/Kleinschreibung, oder die Freigabe ist nicht verfügbar. Prüfen Sie Ihre Erwartung mit dem Befehl testparm (siehe den Abschnitt »Die Daemons mit testparm testen«).
- Ein Parameter security = share in Ihrer Samba-Konfigurationsdatei. In diesem Fall müssen Sie dem smbclient-Befehl zusätzlich -U ihr_zugang übergeben.
- Ein fehlerhafter Benutzername.
- Ein fehlerhaftes Kennwort.
- Eine Option invalid users oder valid users in Ihrer smb.conf-Datei, die Ihrem Zugang keine Verbindung erlaubt. Prüfen Sie dies mit dem Befehl testparm smb.conf ihr_hostname ihre_ip_adresse (siehe den Abschnitt »Die Daemons mit testparm testen«).
- Eine Option valid hosts, die den Server nicht aufführt, oder eine Option invalid hosts, die genau dies tut. Testen Sie auch hier mit testparm.
- Ein Problem mit der Authentifizierung, wie etwa die Benutzung von Shadow-Kennwörtern oder eines PAM (Password Authentication Module) auf dem Server, ohne dass Samba es unterstützt. Dieser Fall ist selten, tritt aber hin und wieder ein, wenn ein Samba-Binary für SunOS 4 (ohne Shadow-Kennwörter) ohne Neukompilierung auf einem Solaris-System (mit Shadow-Kennwörtern) eingesetzt wird.
- Die Option encrypted passwords = yes steht in der Konfigurationsdatei, in der Datei smbpasswd gibt es jedoch kein Kennwort für Ihren Zugang.
- Sie haben einen leeren Kennworteintrag entweder in der Unix-Datei /etc/passwd oder in smbpasswd.
- Sie melden sich an [temp] an, haben aber im Abschnitt [temp] der Datei smb.conf keine guest ok = yes-Option.
- Sie verbinden sich mit der Freigabe [temp], bevor Sie sich mit Ihrem Home-Verzeichnis verbinden, und Ihr Gastzugang ist nicht korrekt eingerichtet. Wenn Sie sich mit Ihrem Home-Verzeichnis verbinden können und dann eine Verbindung zu [temp] herstellen, besteht das Problem darin. Mehr über die Erstellung einer grundlegenden Samba-Konfigurationsdatei erfahren Sie in Kapitel 2.
Ein fehlerhafter Gastzugang verhindert auch das Drucken oder Durchsuchen, solange Sie sich noch nicht an Ihrem Home-Verzeichnis angemeldet haben.
Es gibt einen weiteren möglichen Grund für diesen Fehlschlag, der nichts mit Kennwörtern zu tun hat: Der Parameter path in Ihrer Datei smb.conf zeigt möglicherweise auf ein nicht existierendes Verzeichnis. testparm erkennt diesen Fehler nicht, und die meisten SMB-Clients können ihn nicht von falschen Benutzerzugängen unterscheiden. Sie müssen es selbst überprüfen.
Wenn Sie sich erfolgreich an der Freigabe [temp] angemeldet haben, wiederholen Sie den Test und melden sich dieses Mal an Ihrem Home-Verzeichnis an (z.B. weisen Sie das Netzlaufwerk server\davecb zu). Wenn Sie irgendetwas ändern müssen, damit dies funktioniert, probieren Sie es anschließend noch einmal mit [temp].
Testen der Verbindungen mit net use
Führen Sie den Befehl net use * \\server\temp auf dem Windows-Client aus, um festzustellen, ob dieser eine Verbindung zum Server herstellen kann. Sie müssten nach einem Kennwort gefragt werden und anschließend die Meldung Der Befehl wurde ausgeführt erhalten.
Wenn das funktioniert hat, fahren Sie mit den Schritten im nächsten Abschnitt, »Testen der Verbindungen mit dem Windows-Explorer«, fort. Ansonsten:
- Wenn Sie die Meldung Das angegebene freigegebene Verzeichnis kann nicht gefunden werden oder Der Netzwerkname kann nicht gefunden werden erhalten, haben Sie den Namen des Verzeichnisses falsch geschrieben, oder die Freigabe befindet sich nicht in der Datei smb.conf. Diese Meldung kann auch bedeuten, dass Sie für den Namen gemischte Groß-/Kleinschreibung oder Leerzeichen verwendet haben oder dass der Name länger als acht Zeichen ist.
- Wenn Sie den Fehler Der im Netzwerkpfad angegebene Computer-Name kann nicht gefunden werden oder Kann den angegebenen Computer nicht finden sehen, haben Sie den Namen des Servers falsch geschrieben, oder der Wert der Option hosts deny enthält Ihren Host.
- Wenn Sie den Namen des Servers und der Freigabe richtig geschrieben haben, müssen Sie zum Abschnitt »Testen der Verbindungen mit smbclient« zurückkehren, um festzustellen, weshalb es nicht funktioniert.
- Wenn smbclient funktioniert, gibt es ein Namensdienst-Problem mit dem Client-Namensdienst, und Sie müssen sich zum Abschnitt »Testen des Servers mit nmblookup« begeben und versuchen, sowohl den Client als auch den Server mit nmblookup nachzusehen.
- Wenn Sie die Meldung Das Kennwort für \\server\Benutzername ist falsch erhalten, ist Ihre lokal zwischengespeicherte Kopie des Kennworts mit demjenigen auf dem Server nicht identisch. Der Client sollte Sie nach dem richtigen Kennwort fragen.
Windows 95/98/Me-Clients speichern das Kennwort lokal in einer Datei, es handelt sich dabei aber nur um eine zwischengespeicherte Kopie des Kennworts, das zur Authentifizierung an Samba und an NT/2000/XP-Server geschickt wird. Danach werden Sie hier auch gefragt. An einem Windows-System können Sie sich weiterhin ohne Kennwort anmelden (allerdings nicht an NT/2000/XP).
Falls Sie Ihr Kennwort eingeben und die Verbindung dennoch nicht erfolgreich herstellen können, gibt es mehrere Möglichkeiten: Sie haben eine valid users- oder invalid users-Liste, durch die Ihnen der Zugriff verweigert wird, NetBEUI macht Probleme, oder Sie haben das Problem mit den verschlüsselten Kennwörtern, das wir im nächsten Abschnitt beschreiben.
- Wenn Ihr Client Windows NT 4.0, NT 3.5 mit Patch 3, Windows 95 mit Patch 3, Windows 98, diese Systeme jeweils mit Internet Explorer 4.0, oder eine nachfolgende Version von Windows ausführt, verwendet das System standardmäßig die Microsoft-Verschlüsselung für Kennwörter. Sollten Sie eines der großen Microsoft-Produkte auf einer der älteren Windows-Versionen installiert haben, haben Sie vermutlich im Allgemeinen ein Update durchgeführt und verschlüsselte Kennwörter aktiviert. Benutzt der Client standardmäßig verschlüsselte Kennwörter, müssen Sie encrypt passwords = yes in Ihrer Samba-Konfigurationsdatei angeben, falls Sie eine Samba-Version vor Samba 3.0 einsetzen.
Da der Internet Explorer bei URLs wie file://irgendeinHost/irgendeineDatei eine SMB-Verbindung herstellt, senden Clients bis einschließlich Windows 95 Patch Level 2 freimütig Ihr Kennwort im Klartext an SMB-Server irgendwo im Internet. Das wurde schließlich als ziemlich schlechte Idee erkannt. Microsoft ging daraufhin dazu über, im SMB-Protokoll nur noch verschlüsselte Kennwörter einzusetzen. Alle nachfolgenden Ausgaben der Microsoft-Produkte enthalten diese Korrektur.
- Der Client sendet des Kennwort möglicherweise ausschließlich in Groß- oder in Kleinbuchstaben, obwohl Sie unter Unix ein Kennwort in gemischter Schreibweise haben. Wenn es reicht, das Kennwort so zu ändern, dass es nur noch eine Schreibweise benutzt, dann war dies das Problem. Bedauerlicherweise unterstützen alle außer den ältesten Clients Großbuchstabenkennwörter, so dass Samba das Kennwort einmal mit Groß- und einmal mit Kleinbuchstaben probiert. Wenn Sie die gemischte Schreibweise verwenden wollen, finden Sie mit der Option password level in Kapitel 9 eine Lösung für dieses Problem.
- Möglicherweise tritt bei Ihnen das Problem mit valid users auf, wie mit smbclient getestet (siehe den Abschnitt »Testen der Verbindungen mit smbclient«).
- Vielleicht haben Sie das NetBEUI-Protokoll an den Microsoft-Client gebunden. Dadurch werden häufig lange Verzögerungen und eigenartige Fehler erzeugt, außerdem kann es Probleme beim Akzeptieren von Kennwörtern geben. Entfernen Sie das NetBEUI-Protokoll, es sei denn, Sie benötigen es unbedingt.
Der Begriff »binden« bedeutet an dieser Stelle eine logische Verbindung zwischen zwei Software-Bestandteilen. Wenn der Microsoft-SMB-Client korrekt konfiguriert wurde, ist er im Register Bindungen des Eigenschaften-Fensters von TCP/IP (im Bereich Netzwerk der Systemsteuerung von Windows 95/98/Me) an TCP/IP »gebunden«. TCP/IP wiederum ist an eine Ethernet-Karte gebunden. Das bedeutet nicht das Gleiche wie das Binden eines SMB-Daemons an einen TCP/IP-Port.
Testen der Verbindungen mit dem Windows-Explorer
Starten Sie den Windows-Explorer (nicht den Internet Explorer), wählen Sie Netzlaufwerk verbinden aus dem Extras-Menü und geben Sie eine UNC für eine Ihrer Freigaben auf dem Samba-Server an, um festzustellen, ob der Explorer eine Verbindung dorthin aufbauen kann. Gelingt dies, können Sie zum nächsten Abschnitt, »Fehlersuche beim Durchsuchen«, übergehen.
Der Windows-Explorer ist kein gutes Werkzeug zur Diagnose: Er sagt Ihnen, dass etwas nicht stimmt, gibt aber nicht bekannt, worum es sich handelt. Wenn Sie einen Fehler erhalten, müssen Sie dessen Ursache mit dem Windows-Befehl net use ermitteln, der eine aussagekräftigere Fehlermeldung ausgibt:
- Die Meldung Das Kennwort für diese Verbindung in Ihrer Kennwortdatei ist nicht länger gültig weist auf einen der folgenden Fehler hin:
- Sie haben bei der Anmeldung auf dem Client keinen Benutzernamen und kein Kennwort angegeben. Einige Versionen des Explorers senden weiterhin einen leeren Benutzernamen und ein leeres Kennwort, selbst wenn Sie ein Kennwort angegeben haben.
- Ihr Client benutzt standardmäßig verschlüsselte Kennwörter, Samba ist jedoch mit dem Parameter encrypt passwords = no in der Konfigurationsdatei konfiguriert worden.
- Sie haben ein Kennwort in gemischter Schreibweise, das der Client jedoch nur in einer Schreibweise übermittelt.
- Wenn Sie die Meldung Der Netzwerkname ist entweder nicht korrekt oder Sie besitzen nicht den vollen Zugriff auf das Netzwerk oder Kann den angegebenen Computer nicht finden erhalten, kann einer der folgenden Punkte zutreffen:
- Wenn Sie die Fehlermeldung Sie müssen ein Kennwort angeben, um eine Verbindung herzustellen erhalten, stimmen entweder Ihre Kennwörter auf dem Server und dem Client nicht überein, oder Sie haben zum ersten Mal eine Anmeldung von diesem Client-System versucht und der Client hat es noch nicht lokal zwischengespeichert.
- Die Meldung Der Netzwerkname kann nicht gefunden werden bedeutet, dass Sie eine nicht existierende Freigabe ansprechen oder dass Sie den Namen der Freigabe falsch geschrieben haben. Auch ein Freigabename mit mehr als acht Zeichen, mit Leerzeichen oder in gemischter Schreibweise kann diesen Fehler verursachen.
Wenn Sie die Freigabe zuverlässig benutzen können, versuchen Sie, auf Ihr Home-Verzeichnis zuzugreifen. Falls Sie etwas ändern müssen, damit Sie das Home-Verzeichnis »sehen« können, probieren Sie es erneut mit der ersten Freigabe und umgekehrt, wie wir im Abschnitt »Testen von Verbindungen mit net use« gezeigt haben. Gibt es Probleme mit dem Windows-Explorer, suchen Sie den Fehler mit den Methoden, die dieser Abschnitt beschreibt.
Fehlersuche beim Durchsuchen
Lassen Sie uns nun zum Durchsuchen kommen. Wir haben uns dieses Thema bis hierhin aufgespart, weil es optional ist und teilweise von einem Protokoll abhängt, das die Auslieferung von Paketen nicht garantiert. Das Durchsuchen ist schwer zu untersuchen, wenn Sie nicht sicher sind, dass alle anderen Dienste ausgeführt werden.
Die Funktion Durchsuchen ist optional, sie ist einfach nur ein Weg, um Server im Netzwerk und ihre Freigaben zu finden. Unix kennt keine solche Funktion und existiert glücklich ohne eine solche. Das Durchsuchen geht außerdem davon aus, dass sich all Ihre Systeme in einem lokalen Netzwerk (LAN) befinden, in dem Broadcasts erlaubt sind.
Zunächst identifiziert der Suchmechanismus einen Computer mit dem nicht zuverlässigen UDP-Protokoll, um dann über eine gewöhnliche (zuverlässige) TCP-Verbindung die bereitgestellten Freigaben aufzulisten.
Testen des Durchsuchens mit smbclient
Wir beginnen mit dem Test einer zuverlässigen Verbindung. Versuchen Sie vom Server aus, die lokalen Freigaben mit dem Befehl smbclient und der Option -L sowie dem Namen Ihres Servers aufzulisten. Die Ausgabe sollte etwa folgendermaßen aussehen:
$ smbclient -L server Added interface ip=192.168.236.86 bcast=192.168.236.255 nmask=255.255.255.0 Server time is Tue Apr 28 09:57:28 2002 Timezone is UTC-4.0 Password: Domain=[EXAMPLE] OS=[Unix] Server=[Samba 2.2.5] Sharename Type Comment --------- ---- ------- cdrom Disk CD-ROM cl Printer Color Printer 1 davecb Disk Home Directories Server Comment --------- ------- SERVER Samba 2.2.5 Workgroup Master --------- ------- EXAMPLE SERVER
- Wenn Sie die Liste der Freigaben nicht sehen, erlaubt Ihnen der Server nicht, seine Freigaben zu durchsuchen. Dies sollte nicht der Fall sein, wenn Sie irgendeine der Freigaben mit dem Windows-Explorer oder dem Befehl net use verwendet haben. Wenn Sie den Test mit smbclient -L localhost -U% noch nicht durchgeführt haben (siehe »Lokale Tests mit smbclient«), tun Sie es jetzt. Ein falscher Gastzugang kann dazu führen, dass die Freigaben nicht angezeigt werden. Prüfen Sie auch die Datei smb.conf, um sicherzustellen, dass sie nicht die Option browsable = no enthält. Wir empfehlen, für den Test die Minimalversion der Datei smb.conf zu verwenden (siehe »Eine minimale smb.conf-Datei«). Sie müssen die Option browsable aktivieren (das ist die Standardeinstellung), um zumindest die Freigabe zu sehen.
- Wenn Sie keine Suchliste erhalten, liefert der Server keine Angaben über die Systeme im Netzwerk. Wenigstens ein System im Netzwerk muss Suchlisten unterstützen. Vergewissern Sie sich, dass in der Datei smb.conf die Option local master = yes steht, falls Samba den lokalen Hauptsuchdienst ausführen soll.
- Wenn Sie eine Suchliste bekommen, aber nicht die Freigabe /tmp, haben Sie wahrscheinlich ein Problem in der Datei smb.conf. Kehren Sie zum Abschnitt »Die Daemons mit testparm testen« zurück.
- Wenn Sie keine Arbeitsgruppenliste mit dem Namen Ihrer Arbeitsgruppe erhalten, ist die Arbeitsgruppe in der Datei smb.conf möglicherweise falsch angegeben.
- Wenn Sie nicht einmal eine Arbeitsgruppenliste sehen, vergewissern Sie sich, dass die Zeile workgroup = EXAMPLE in der Datei smb.conf steht.
- Wenn Sie nichts erhalten, versuchen Sie es erneut mit den Optionen -I ip_adresse -n netbios_name -W arbeitsgruppe -d3; geben Sie den NetBIOS- und den Arbeitsgruppennamen in Großbuchstaben an. (Die Option -d3 legt die Protokollierungsstufe mit 3 fest.) Prüfen Sie dann die Samba-Protokolle auf Auffälligkeiten.
Wenn Sie immer noch nichts sehen, dürften Sie eigentlich gar nicht bis hierhin gekommen sein. Gehen Sie zu einem der Abschnitte »Testen von TCP mit FTP« oder »Testen der Verbindungen mit ping« zurück. Sehen Sie sich auch folgende Punkte an:
- Wenn Sie die Meldung SMBtconX failed. ERRSRV-ERRaccess sehen, ist Ihnen der Zugriff auf den Server nicht erlaubt. Normalerweise deutet dies darauf hin, dass eine hosts allow-Option verwendet wird, die den Server nicht einschließt, oder eine hosts deny-Option, die dies tut.
- Die Meldung Bad password hat vermutlich eine der folgenden Ursachen:
Prüfen Sie, wie Ihr Gastzugang lautet (siehe den Abschnitt »Lokale Tests mit smbclient«), ändern Sie alle hosts allow-, hosts deny-, valid users- oder invalid users-Zeilen oder kommentieren Sie sie aus und überprüfen Sie Ihre smb.conf-Datei mit testparm smb.conf ihr_hostname ihre_ip_adresse (siehe »Die Daemons mit testparm testen«).
- Falls Sie Connection refused sehen, wird der smbd-Server nicht ausgeführt oder ist abgestürzt. Stellen Sie sicher, dass er läuft, und prüfen Sie mit netstat, ob er am Netzwerk lauscht. Siehe den Abschnitt »Fehlersuche bei den Server-Daemons«.
- Die Meldung Get_Hostbyname: Unknown host name kann mehrere Ursachen haben: ein Tippfehler, unterschiedliche Unix- und NetBIOS-Hostnamen oder ein Problem des Namensdiensts. Beginnen Sie mit der Fehlersuche beim Namensdienst mit »Testen der Verbindungen mit net use«. Wenn Sie damit den Fehler beheben können, sind unterschiedliche Namen wahrscheinlich, so dass Sie zum Abschnitt »Fehlersuche bei NetBIOS-Namen« gehen sollten.
- Wenn Sie die Fehlermeldung Session request failed erhalten, hat der Server die Verbindung verweigert. Dies ist üblicherweise ein Hinweis auf einen internen Fehler, wie unzureichender Hauptspeicher zum Teilen (engl. fork) eines Prozesses.
- Die Meldung Your server software is being unfriendly bedeutet, dass der Server bereits das erste Paket zum Aufbau der Verbindung mit unsinnigen Daten beantwortet hat. Der Server ist möglicherweise abgestürzt oder wurde nicht korrekt gestartet. Gehen Sie zum Abschnitt »Lokale Tests mit smbclient« zurück, um das Problem zu analysieren.
- Wenn Sie vermuten, dass der Server nicht ausgeführt wird, gehen Sie zurück zum Abschnitt »Die Daemon-Prozesse mit ps suchen«, um herauszufinden, warum der Server-Daemon nicht antwortet.
Testen des Servers mit nmblookup
Diese Tests prüfen das Ankündigungssystem, das für Windows-Namensdienste und das Durchsuchen verwendet wird. Ankündigungen geben die Anwesenheit eines Systems und dessen Fähigkeit, Dienste bereitzustellen, bekannt. Dieser Teil des Durchsuchens verwendet ein nicht zuverlässiges Protokoll (UDP) und funktioniert nur in Broadcast-Netzwerken wie Ethernet-Netzwerken. Das Programm nmblookup fragt per Broadcast nach dem Hostnamen, den Sie angeben, und liefert seine IP-Adresse und den Namen des Systems, ähnlich wie nslookup für das Domain Name System (DNS). Hier verwenden wir die Optionen -d (Protokollierungsstufe) und -B (Broadcast-Adresse), um die Anfragen an bestimmte Systeme zu richten.
Zunächst wollen Sie feststellen, ob Sie den lokalen Server erreichen können. Führen Sie nmblookup mit der Option -B und dem Namen Ihres Servers aus (damit die Software die Anfrage an den Samba-Server sendet). Geben Sie außerdem den Parameter _ _SAMBA_ _ als symbolischen Namen an, der nachgefragt werden soll. Sie sollten Folgendes erhalten:
$ nmblookup -B server _ _SAMBA_ _ Added interface ip=192.168.236.86 bcast=192.168.236.255 nmask=255.255.255.0 Sending queries to 192.168.236.86 192.168.236.86 _ _SAMBA_ _Hiermit haben Sie die IP-Adresse des Servers erhalten, gefolgt von _ _SAMBA_ _ , was bedeutet, dass der Server erfolgreich einen Dienst mit diesem Namen angekündigt hat. Sie wissen nun, dass der NetBIOS-Namensdienst zumindest teilweise funktioniert.
- Die Meldung Name_query failed to find name _ _SAMBA_ _ bedeutet, dass Sie der Option -B möglicherweise den Server-Namen übergeben haben oder dass nmbd nicht läuft. Die Option -B übernimmt eigentlich eine Broadcast-Adresse: Wir verwenden einen Computernamen, um eine Unicast-Adresse zu erhalten und den Server zu fragen, ob er den Namen _ _SAMBA_ _ trägt. Versuchen Sie es noch einmal mit nmblookup -B ip_adresse. Wenn auch dies fehlschlägt, beansprucht nmbd den Namen nicht. Gehen Sie kurz zurück zum Abschnitt »Testen der Daemons mit testparm«, um festzustellen, ob nmbd läuft. Ist dies der Fall, beansprucht er vermutlich keine Namen, was wiederum bedeutet, dass Samba den Suchdienst nicht anbietet - ein Konfigurationsproblem. Wenn dies alles zutrifft, stellen Sie sicher, dass smb.conf nicht die Option browsing = no enthält.
Testen des Clients mit nmblookup
Prüfen Sie nun die IP-Adresse des Clients vom Server aus, indem Sie nmblookup mit der Option -B für den Namen des Clients und dem Parameter '*' für »alle« ausführen, wie hier gezeigt wird:
$ nmblookup -B client '*' Sending queries to 192.168.236.10 192.168.236.10 * Got a positive name query response from 192.168.236.10 (192.168.236.10)Sie könnten folgenden Fehler erhalten:
- Die Meldung Name-query failed to find name * deutet auf einen Schreibfehler Ihrerseits oder auf nicht installierte Client-Software hin; möglicherweise ist auf dem Client die WINS-Software nicht an das TCP/IP-Protokoll gebunden. Gehen Sie zurück zu Kapitel 3 und stellen Sie sicher, dass Sie einen Client installiert haben, der am Netzwerk lauscht.
Wiederholen Sie den Befehl mit den folgenden Optionen, falls Fehler aufgetreten sind:
- Wenn nmblookup -B Client_IP_Adresse erfolgreich ist, aber nmblookup -B Client_Name nicht, gibt es ein Problem mit dem Namensdienst. Lesen Sie weiter bei »Fehlersuche bei Namensdiensten«.
- Wenn nmblookup -B 127.0.0.1 '*' erfolgreich ist, nmblookup -B Client_IP_Adresse hingegen nicht, gibt es wahrscheinlich ein Hardware-Problem, und auch der ping-Befehl sollte fehlgeschlagen sein. Fragen Sie Ihren Netzwerkverwalter.
Testen des Netzwerks mit nmblookup
Führen Sie erneut den Befehl nmblookup mit der Option -d2 (Protokollierungsstufe 2) und dem Parameter '*' aus. Diesmal testen Sie, ob Programme (wie nmbd ) Broadcast-Pakete schicken können. Dabei handelt es sich im Wesentlichen um einen Test der Verbindung über Broadcast an die Standard-Broadcast-Adresse.
In Ihrem Netzwerk sollten mehrere NBT-Hosts (NetBIOS over TCP/IP) antworten; sie erkennen die Antworten an den Meldungen got a positive name query response. Samba empfängt möglicherweise nicht alle Antworten in der kurzen Zeit, in der es wartet, daher sehen Sie wahrscheinlich nicht alle SMB-Clients in Ihrem Netzwerk. Die meisten sollten aber erscheinen.
$ nmblookup -d 2 '*' Added interface ip=192.168.236.86 bcast=192.168.236.255 nmask=255.255.255.0 Sending queries to 192.168.236.255 Got a positive name query response from 192.168.236.191 (192.168.236.191) Got a positive name query response from 192.168.236.228 (192.168.236.228) Got a positive name query response from 192.168.236.75 (192.168.236.75) Got a positive name query response from 192.168.236.79 (192.168.236.79) Got a positive name query response from 192.168.236.206 (192.168.236.206) Got a positive name query response from 192.168.236.207 (192.168.236.207) Got a positive name query response from 192.168.236.217 (192.168.236.217) Got a positive name query response from 192.168.236.72 (192.168.236.72) 192.168.236.86 *
- Wenn Sie damit nicht wenigstens eine zuvor angefragte Client-Adresse erhalten, ist die Standard-Broadcast-Adresse wahrscheinlich falsch. Geben Sie nmblookup -B 255.255.255.255 -d 2 '*' ein, womit Sie eine Broadcast-Adresse verwenden, die komplett aus Einsen besteht. Wenn Sie nun Antworten sehen, ist die von Ihnen verwendete Broadcast-Adresse verkehrt. Hinweise zur Fehlersuche finden Sie im Abschnitt »Broadcast-Adressen« weiter unten in diesem Kapitel.
- Wenn auch die Adresse 255.255.255.255 keine Ergebnisse liefert, finden Sie heraus, ob Ihr PC und der Server sich in unterschiedlichen Subnetzen befinden. Lesen Sie dazu den Abschnitt »Testen der Verbindungen mit ping«. Verwenden Sie für diesen Test einen Server und einen Client im selben Subnetz. Wenn dies nicht möglich ist, können Sie die Broadcast-Adresse des entfernten Systems mit -B angeben. Wie Sie solche Adressen ermitteln, wird im Abschnitt »Broadcast-Adressen« besprochen. Die Option -B funktioniert, falls Ihr Router gerichtete Broadcasts unterstützt; ist dies nicht der Fall, sind Sie möglicherweise auf Tests mit einem Client innerhalb Ihres Subnetzes angewiesen.
Außerdem können Sie natürlich die Samba-Protokolldateien auf Verdächtiges prüfen.
Das Durchsuchen von Clients mit dem Befehl net view testen
Geben Sie auf einem Windows-Client an der MS-DOS-Eingabeaufforderung den Befehl net view \\server ein, um festzustellen, ob Sie eine Verbindung zum Server herstellen und nach den angebotenen Freigaben fragen können. Sie sollten eine Liste der verfügbaren Freigaben auf dem Server erhalten.
Wenn dies funktioniert, fahren Sie mit dem Abschnitt »Dokumentation und FAQs« fort. Ansonsten:
- Der Fehler Der Netzwerkpfad wurde nicht gefunden deutet auf ein Problem der Client-Software hin, wenn Sie den gleichen Namen wie im Abschnitt »Testen des Clients mit nmblookup« verwendet haben. Überprüfen Sie dies, indem Sie nmblookup auf dem Client ausführen; wenn dies im Gegensatz zu net view funktioniert, stimmt etwas mit dem Client nicht.
- Wenn auch nmblookup fehlschlägt, liegt offensichtlich ein Problem mit dem NetBIOS-Namensdienst vor. Gehen Sie den Abschnitt »Fehlersuche bei NetBIOS-Namen« durch.
- Die Meldungen Sie haben keine ausreichenden Zugriffsrechte, um diesen Vorgang auszuführen oder Der Server ist nicht für die Freigabe von Ressourcen konfiguriert bedeuten, dass Ihr Gastzugang falsch konfiguriert ist (siehe »Lokale Tests mit smbclient«) oder Sie eine hosts allow- oder hosts deny-Zeile haben, die Verbindungen von Ihrem System aus unterbinden. Sie sollten derartige Probleme mit den smbclient-Tests zu Beginn des Abschnitts »Testen des Durchsuchens mit smbclient« gefunden haben.
- Wenn Sie die Fehlermeldung Der angegebene Computer empfängt keine Anforderungen erhalten, haben Sie den Namen des Servers falsch geschrieben, das System ist nicht über Broadcasts erreichbar (das haben wir im Abschnitt »Testen des Netzwerks mit nmblookup« geprüft), oder es führt nmbd nicht aus.
- Die Meldung Falsches Kennwort bedeutet, dass Sie das Problem mit den Microsoft-verschlüsselten Kennwörtern haben, das weiter vorn in diesem Kapitel sowie in Kapitel 9 besprochen wurde. Dort finden Sie auch Lösungsansätze.
Durchsuchen des Servers vom Client aus
Versuchen Sie, den Server von der Windows-Netzwerkumgebung aus zu durchsuchen. Ihr Samba-Server sollte in der Suchliste Ihrer lokalen Arbeitsgruppe auftauchen. Sie müssten in der Lage sein, auf den Namen des Servers doppelt zu klicken, um eine Liste der Freigaben zu erhalten.
- Der Fehler Falsches Kennwort deutet wieder auf das Verschlüsselungsproblem hin.
- Der Hinweis Das Netzwerk kann nicht durchsucht werden kann folgende Ursachen haben:
- Sie haben zu früh nachgesehen, die Broadcasts und Aktualisierungen waren noch nicht beendet. Warten Sie 30 Sekunden und versuchen Sie es erneut.
- Es gibt keinen Hauptsuchdienst. Fügen Sie die Konfigurationsoption local master = yes in Ihre smb.conf-Datei ein.
- Auch die Nachricht \\server ist nicht verfügbar kann erscheinen. Es gibt folgende mögliche Ursachen:
Wenn Sie bis hierhin gekommen sind und es immer noch Probleme gibt, sind Sie entweder auf ein Problem gestoßen, das auch uns unbekannt ist, oder es handelt sich um ein Problem aus einem Bereich, den wir bereits behandelt haben und der eine weitere Untersuchung verlangt. Oft hängen die Schwierigkeiten mit Samba mit der Namensauflösung zusammen, deshalb gehen wir in den nächsten Abschnitten näher darauf ein. Wenn Sie wissen, dass Ihr Problem nicht in der Namensauflösung liegt, gehen Sie zum Abschnitt »Weitere Ressourcen« am Ende dieses Kapitels über.
Fehlersuche bei Namensdiensten
Dieser Abschnitt befasst sich mit der einfachen Fehlersuche bei allen Namensdiensten, auf die Sie treffen, allerdings beschränkt auf die Aspekte, die für Samba relevant sind.
Es gibt verschiedene gute Referenzen, die auf bestimmte Namensdienste eingehen: Paul Albitz' und Cricket Lius' Buch DNS und Bind (O'Reilly) behandelt das DNS, Hal Sterns NFS und NIS (O'Reilly) geht auf NIS (»Yellow Pages«) ein, während der Windows Internet Name Service (WINS), hosts/LMHOSTS-Dateien und NIS+ am besten in den Handbüchern der jeweiligen Hersteller betrachtet werden.
In diesem Abschnitt werden folgende Probleme untersucht:
- Namensdienste identifizieren.
- Ein Hostname kann nicht nachgesehen werden.
- Die lange (FQDN) Form eines Hostnamens funktioniert, die kurze jedoch nicht.
- Die kurze Form des Namens funktioniert, die lange Form jedoch nicht.
- Vor dem Eintreffen des erwarteten Ergebnisses tritt eine lange Verzögerung auf.
Den verwendeten Namensdienst identifizieren
Prüfen Sie zunächst, ob sowohl Server als auch Client DNS, WINS, NIS oder die hosts-Datei verwenden, um IP-Adressen herauszufinden, wenn Sie einen Namen vorgeben. Jede Art von System geht anders vor:
- Windows 95/98/Me versuchen zuerst WINS und die LMHOSTS-Datei, dann Broadcast und schließlich DNS und HOSTS-Dateien.
- Windows NT/2000/XP versuchen WINS, dann Broadcast, anschließend die LMHOSTS-Datei und zum Schluss HOSTS und DNS.
- Windows-Programme, die dem WINSOCK-Standard folgen, benutzen die HOSTS-Datei, DNS, WINS und dann Broadcast. Gehen Sie nicht davon aus, dass der Namensdienst des SMB-Client-Programms funktioniert, nur weil der Namensdienst eines anderen Programms dies tut!
- Samba-Daemons verwenden lmhosts, WINS, die Namensauswertung des Unix-Systems und dann Broadcast.
- Unix-Systeme können so konfiguriert werden, dass sie eine beliebige Kombination aus DNS, HOSTS-Dateien, NIS oder NIS+ und winbind verwenden, und dies im Allgemeinen in beliebiger Reihenfolge.
Wir empfehlen Ihnen, die Client-Systeme für die Verwendung von WINS und DNS zu konfigurieren, die Samba-Daemons für WINS und DNS und den Unix-Server für DNS, die hosts-Dateien und vielleicht NIS+. Sehen Sie sich Ihre Aufzeichnungen und die gegenwärtige Konfiguration an, um festzustellen, welche Namensdienste Ihre Computer verwenden.
Auf den Clients werden die Namensdienste im Fenster Eigenschaften von TCP/IP der Netzwerk-Systemsteuerung eingestellt, wie in Kapitel 3 besprochen. Prüfen Sie, welche Dienste Sie hier aktiviert haben. Schauen Sie auf dem Server nach, ob die Datei /etc/resolv.conf existiert. Wenn dies der Fall ist, verwendet er DNS. Unabhängig davon kann er auf andere Namensdienste zugreifen. Schauen Sie nach, ob der Server NIS oder eine Kombination anderer Namensdienste benutzt.
Suchen Sie unter Solaris und anderen System V Unix-Betriebssystemen nach einer /etc/nsswitch.conf-Datei. Wenn Sie sie gefunden haben, suchen Sie dort nach einer Zeile, die mit host: beginnt, gefolgt von einem oder mehreren der Einträge files, bind, nis oder nis+. Dies sind die zu verwendenden Namensdienste in der Reihenfolge ihrer Benutzung; zusätzliche Optionen stehen in eckigen Klammern. Das Schlüsselwort files deutet auf HOSTS-Dateien hin, während bind (der Berkeley Internet Name Daemon) sich auf das DNS bezieht.
Wenn Client und Server unterschiedliche Dienste verwenden, müssen Sie die Systeme in Einklang bringen. Clients können ausschließlich DNS, WINS, die Dateien HOSTS und LMHOSTS, aber nicht NIS oder NIS+ verwenden. Servers können die Dateien HOSTS und LMHOSTS, DNS, NIS oder NIS+ sowie winbind einsetzen, aber nicht WINS - selbst wenn Ihr Samba-Server WINS-Dienste bereitstellt. Wenn Sie nicht von allen Systemen auf dieselben Dienste zugreifen können, müssen Sie sorgsam überprüfen, dass Server und Clients dieselben Daten erhalten.
Außerdem können Sie die Option -R (Resolve Order; Auswertungsreihenfolge) für smbclient benutzen. Wollen Sie beispielsweise Probleme mit WINS beheben, müssen Sie angeben:
$ smbclient -L server -R winsDie möglichen Einstellungen sind hosts (womit gemeint ist, was das Unix-System verwendet, nicht nur /etc/hosts), lmhosts, wins und bcast (Broadcast).
In den folgenden Abschnitten verwenden wir den Begriff langer Name als Synonym für einen voll qualifizierten Domainnamen (Fully-Qualified Domain Name, FQDN) wie server.example.com . Der Begriff kurzer Name steht für den Host-Teil des FQDN, beispielsweise server.
Hostnamen können nicht ausgewertet werden
Führen Sie nslookup name aus. Schlägt dies fehl, suchen Sie nach einem resolv.conf-Fehler, einem ausgefallenen DNS-Server oder einem Problem mit langen/kurzen Namen (siehe nächster Abschnitt). Versuchen Sie es damit:
- Ihre /etc/resolv.conf-Datei sollte eine oder mehrere nameserver-Zeilen enthalten, jeweils mit einer IP-Adresse. Dies sind die Adressen Ihrer DNS-Server.
- Sprechen Sie alle Server-Adressen, die Sie finden können, mit ping an. Schlägt dies für eine Adresse fehl, ist dieses System möglicherweise das Problem. Schlägt es für alle Adressen fehl, untersuchen Sie das Netzwerk.
- Versuchen Sie erneut die Auswertung mit dem vollständigen Domainnamen (zum Beispiel server.example.com), wenn Sie zuerst nur den kurzen Namen benutzt hatten, oder verwenden Sie umgekehrt den kurzen Namen, wenn Sie zuerst den langen Namen hatten. Erhalten Sie unterschiedliche Ergebnisse, gehen Sie zum nächsten Abschnitt über.
Broadcast/ WINS verwenden nur kurze Namen, wie zum Beispiel server, und keine langen Namen, wie server.example.com. Geben Sie nmblookup -S server ein. Die Ausgabe meldet alle Objekte, die durch Broadcast für diesen Namen registriert wurden. In unserem Fall sieht die Ausgabe so aus:
$ nmblookup -S server Looking up status of 192.168.236.86 received 10 names SERVER <00> - M <ACTIVE> SERVER <03> - M <ACTIVE> SERVER <1f> - M <ACTIVE> SERVER <20> - M <ACTIVE> .._ _MSBROWSE_ _. <01> - <GROUP> M <ACTIVE> MYGROUP <00> - <GROUP> M <ACTIVE> MYGROUP <1b> - M <ACTIVE> MYGROUP <1c> - <GROUP> M <ACTIVE> MYGROUP <1d> - M <ACTIVE> MYGROUP <1e> - <GROUP> M <ACTIVE>Der gesuchte Eintrag ist SERVER <00>, der server als NetBIOS-Name des Computers kennzeichnet. Sie sollten außerdem den Namen Ihrer Arbeitsgruppe wenigstens einmal sehen. Wenn diese Zeilen fehlen, können Broadcast/WINS nicht zur Namensauswertung verwendet werden, Sie müssen diesen Punkt näher untersuchen.
Die Zahlen in spitzen Klammern der soeben beschriebenen Ausgabe identifizieren NetBIOS-Namen als Namen von Arbeitsgruppen, Workstations und Benutzern des Nachrichtendiensts, Hauptsuchdiensten, Domänen-Hauptsuchdiensten, Domänen-Controllern und diverser anderer Elemente. Wir interessieren uns hauptsächlich für <00> als Computer- und Arbeitsgruppenname sowie für <20> als Server-Name. Die vollständige Liste der Typen finden Sie unter http://support.microsoft.com/support/kb/ articles/q163/4/09.asp.
Geben Sie ypmatch name hosts ein. Wenn dies nicht klappt, ist NIS nicht aktiv. Finden Sie den Namen des NIS-Servers heraus, indem Sie ypwhich ausführen; versuchen Sie den Server mittels ping zu erreichen.
Wenn Sie NIS+ einsetzen, geben Sie nismatch name hosts ein. Erhalten Sie kein Ergebnis, ist NIS+ nicht aktiv. Finden Sie den Namen des NIS+-Servers heraus, indem Sie niswhich ausführen; versuchen Sie den Server mittels ping zu erreichen.
Sehen Sie sich die Datei HOSTS auf dem Client (C:\Windows\ Hosts unter Windows 95/98/Me und C:\WINNT \system32\drivers\etc\hosts unter Windows NT/2000/XP) an. Jede Zeile sollte eine IP-Adresse und einen oder mehrere Namen enthalten (als Erstes den primären Namen, danach optionale Alias-Namen). Hier ein Beispiel:
127.0.0.1 localhost 192.168.236.1 dns.svc.example.com 192.168.236.10 client.example.com client 192.168.236.11 backup.example.com loghost 192.168.236.86 server.example.com server 192.168.236.254 router.svc.example.comUnter Unix sollte localhost immer 127.0.0.1 sein, obwohl dies auch nur ein Alias für einen Hostnamen auf dem PC sein könnte. Prüfen Sie auf dem Client, dass es keine #XXX-Anweisungen an den Zeilenenden gibt; dies sind LAN Manager/NetBIOS-Anweisungen, die nur in LMHOSTS-Dateien auftauchen dürfen.
Diese Datei ist eine lokale Quelle für LAN Manager-(NetBIOS-)Namen. Ihr Format ist ähnlich den hosts-Dateien, allerdings unterstützt sie keine langen Domainnamen (z.B. server.example.com) und kann eine Reihe optionaler #XXX-Anweisungen nach den NetBIOS-Namen aufweisen. Üblicherweise gibt es eine lmhosts.sam (für Beispiel) in C:\Windows unter Windows 95/98/Me und in C:\WINNT\system32\drivers\etc unter Windows NT/2000/XP, allerdings wird diese Datei erst benutzt, wenn sie im gleichen Verzeichnis in Lmhosts umbenannt wird.
Lange und kurze Hostnamen
Wenn die lange (FQDN) Form eines Hostnamens funktioniert, die kurze jedoch nicht (beispielsweise client.example.com funktioniert, client nicht), betrachten Sie Folgendes:
Dieser Fehler weist normalerweise auf das Fehlen einer Standard-Domain hin, in der die kurzen Namen nachgesehen werden. Suchen Sie in der Datei /etc/resolv.conf auf dem Samba-Server nach der Zeile default mit Ihrem Domainnamen. Alternativ kann dort auch die Zeile search mit mehreren Domainnamen stehen. Eine dieser Zeilen muss existieren, damit Sie kurze Namen verwenden können. Welche dies ist, hängt vom Anbieter und der Version Ihres DNS-Resolvers ab. Fügen Sie versuchsweise die Zeile domain ihre_domain in der Datei resolv.conf ein und fragen Sie Ihren Netzwerk- oder DNS-Administrator, welcher Eintrag sich in der Datei befinden sollte.
Geben Sie ypmatch hostname hosts ein. Wenn Sie keine Übereinstimmung sehen, unterstützen Ihre Tabellen keine kurzen Namen. Sprechen Sie mit Ihrem Netzwerkverwalter; es kann ein Versehen sein, dass Sie keine kurze Namen verwenden können - oder es ist Teil der Richtlinien Ihres Unternehmens. Einige Netzwerke verwenden niemals kurze Namen, da sie nicht eindeutig sind.
Wenn sich der kurze Name nicht in der Datei /etc/hosts befindet, können Sie ihn als Alias-Namen hinzufügen. Vermeiden Sie nach Möglichkeit kurze Namen als primäre Namen (der erste Name in einer Zeile). Geben Sie kurze Namen als Alias-Namen an, wenn Ihr System dies unterstützt.
Wenn andererseits die kurze Form des Namens funktioniert, die lange jedoch nicht, untersuchen Sie Folgendes:
Das ist eigenartig; sprechen Sie mit Ihrem Netzwerk- oder DNS-Administrator, da es sich vermutlich um einen Fehler bei der Einrichtung des DNS handelt.
Dies ist normal; Broadcast/WINS kann die lange Form nicht verwenden. Probieren Sie alternativ DNS. (Microsoft hat mitgeteilt, dass man irgendwann ganz auf DNS umsteigt, obwohl DNS Namenstypen wie <00> nicht unterstützt.)
Wenn Sie mit ypmatch nur die kurze Form eines Namens auswerten können, sollten Sie der Tabelle die lange Form zumindest als Alias hinzufügen.
Tragen Sie den langen Namen ein, vorzugsweise als primären Namen oder wenigstens als Alias-Namen. Sie können auch DNS verwenden, wenn dies für Sie in Betracht kommt.
Dies ist normal. LAN Manager kann die lange Form nicht benutzen; steigen Sie eventuell auf DNS oder hosts um.
Ungewöhnliche Verzögerungen
Wenn es eine lange Verzögerung gibt, bevor das erwartete Ergebnis eintrifft:
Geben Sie den gleichen Namen mit dem Befehl nslookup auf dem langsamen Computer (Client oder Server) ein. Wenn nslookup ebenfalls langsam ist, handelt es sich um ein DNS-Problem. Wenn es nur auf dem Client langsam ist, haben Sie möglicherweise zu viele Transportprotokolle installiert und an die Ethernet-Karte gebunden. Entfernen Sie das langsame Protokoll NetBEUI und optional Novell - sofern Sie diese Protokolle nicht benötigen. Dies ist besonders bei Windows 95 wichtig, da dieses Betriebssystem sehr empfindlich reagiert, wenn Sie nicht benötigte Protokolle installieren.
Testen Sie den Client mit nmblookup; ist dies schneller, haben Sie möglicherweise das gerade erwähnte Protokollproblem.
Die hosts-Dateien sind immer schnell - wenn sie eine vernünftige Größe haben. Sie haben vermutlich das beim Punkt DNS erwähnte Protokollproblem.
Dies ist kein Problem der Namensauswertung; LMHOSTS-Dateien sind so schnell wie die Dateien hosts und HOSTS.
Probleme mit Localhost
Wenn ein Localhost nicht 127.0.0.1 ist, versuchen Sie Folgendes:
Es gibt möglicherweise keinen Eintrag für localhost. A 127.0.0.1. Sorgen Sie dafür, dass einer angelegt wird, ebenso der Reverse-Record, 1.0.0.127.IN-ADDR.ARPA PTR 127.0.0.1.
Fehlersuche bei Netzwerkadressen
Zahlreiche verbreitete Probleme sind auf inkorrektes Routing von Internet-Adressen oder auf falsche Adresszuweisungen zurückzuführen. Dieser Abschnitt hilft Ihnen herauszufinden, wie Ihre Adressen lauten.
Netzmasken
Die Netzmasken sagen jedem Host, welche Adressen er direkt erreichen kann (diese Adressen befinden sich im selben lokalen Netzwerk oder Subnetz) und für welche Adressen er einen Router ansprechen muss. Wenn die Netzmasken falsch sind, machen Ihre Computer einen von zwei möglichen Fehlern. Sie versuchen, Pakete mit lokalem Ziel über einen Router auszuliefern, was normalerweise Zeitverschwendung ist - abhängig von diversen Faktoren kann dieses Verfahren einigermaßen schnell arbeiten, ziemlich langsam oder gar nicht. Der andere Fehler besteht in dem Versuch, Pakete für einen Host in einem anderen Netzwerk lokal auszuliefern, was nicht funktionieren kann; die Pakete werden ihr Ziel nie erreichen.
Die Netzmaske ist wie eine IP-Adresse aufgebaut. Sie besteht aus eingeschalteten Bits für den Netzwerkteil der Adresse und aus ausgeschalteten Bits für den Host-Teil. Sie wird als Bit-Maske verwendet, um Teile der Adresse im TCP/IP-Code zu maskieren, also zu verbergen. Eine Maske von 255.255.0.0 bedeutet, dass die ersten 2 Bytes (16 Bits) den Netzwerkanteil und die restlichen 2 Bytes (16 Bits) den Host-Anteil repräsentieren. Sie werden häufig auf die Maske 255.255.255.0 treffen, bei der der Netzwerkanteil aus 3 Bytes (24 Bits) und der Host-Anteil aus einem Byte (8 Bits) besteht.
Lassen Sie uns für unser Beispiel annehmen, dass Ihre IP-Adresse 192.168.0.10 lautet, während der Samba-Server die Adresse 192.168.236.86 besitzt. Bei einer Netzmaske von 255.255.255.0 besteht der Netzwerkanteil der IP-Adresse aus den ersten drei Bytes (24 Bits) und der Host-Anteil aus dem verbleibenden Byte (8 Bits). In diesem Fall befinden sich die beiden Systeme in unterschiedlichen Netzwerken:
Bei einer Netzwerkmaske von 255.255.0.0 besteht der Netzwerkanteil der IP-Adressen aus den ersten beiden Bytes. Da diese bei den beiden von uns verwendeten IP-Adressen übereinstimmen, befinden sich die Computer im selben Netzwerk:
Achten Sie darauf, dass die verwendeten Netzmasken bei den einzelnen Systemen der Struktur Ihres Netzwerks entsprechen. In einem Subnetz müssen die Netzmasken auf allen Systemen identisch sein.
Broadcast-Adressen
Die Broadcast-Adresse ist eine gewöhnliche Adresse, bei der der Host-Anteil ausschließlich aus eingeschalteten Bits besteht. Sie bedeutet »alle Hosts in Ihrem Netzwerk«. Sie können sie leicht ausrechnen, wenn Sie die Netzmaske und die IP-Adresse kennen: Nehmen Sie die Adresse und aktivieren Sie alle Bits, wenn die entsprechenden Bits in der Netzmaske auf null stehen (der Host-Anteil). Die folgende Tabelle veranschaulicht dies:
In diesem Beispiel ist 192.168.236.255 die Broadcast-Adresse des Netzwerks 192.168.236. Es gibt außerdem eine alte, »universelle« Broadcast-Adresse, nämlich 255.255.255.255. Router dürfen diese Adresse nicht weiterleiten, aber die meisten Hosts in Ihrem Netzwerk werden auf Broadcast-Nachrichten mit dieser Zieladresse antworten.
Netzwerkadressbereiche
Mehrere Adressbereiche des Internets wurden für Testzwecke und für nicht mit dem Internet verbundene Netzwerke reserviert. Wir verwenden einen davon in unserem Buch. Wenn Sie noch keinen eigenen IP-Adressraum besitzen, können Sie den gleichen wie wir verwenden. Die Adressbereiche enthalten ein großes Netzwerk, 10.*.*.*, als Klasse-A-Netzwerk, einen Bereich mit Klasse-B-Netzwerkadressen, 172.16.*.* bis 172.31.*.*, und 254 Klasse-C-Netzwerke, 192.168.1.* bis 192.168.254.*. Die Domain example.com ist ebenfalls für nicht verbundene Netzwerke, Beispiele und Bücher reserviert.
Wenn Ihr Netzwerk mit dem Internet verbunden ist, benötigen Sie eine entsprechende IP-Adresse und einen Domainnamen. Wenden Sie sich dazu am besten an Ihren Internet-Provider.
Ihre Netzwerkadresse ermitteln
Falls Sie Ihre IP-Adresse nicht kennen, können Sie sie mit dem Befehl ifconfig unter Unix bzw. ipconfig unter Windows ermitteln. (Schauen Sie in den Manpages nach, ob Ihre spezielle Unix-Variante besondere Optionen erfordert. Beispielsweise will Solaris ifconfig -a sehen.) Die Ausgabe sieht in etwa so aus:
$ ifconfig -a le0: flags=63<UP,BROADCAST,NOTRAILERS,RUNNING > inet 192.168.236.11 netmask ffffff00 broadcast 192.168.236.255 lo0: flags=49<<>UP,LOOPBACK,RUNNING<>> inet 127.0.0.1 netmask ff000000Eine der Schnittstellen ist die Loopback-Schnittstelle (in unseren Beispielen lo0), und die andere ist die normale IP-Schnittstelle. Die Flags sollten signalisieren, dass die Schnittstelle in Betrieb ist, Ethernet-Schnittstellen müssten außerdem bekannt geben, dass sie Broadcasts unterstützen (was PPP-Schnittstellen nicht tun). Sie können auch an anderen Stellen nach IP-Adressen suchen: in /etc/hosts-Dateien, Windows-HOSTS-Dateien, Windows-LMHOSTS-Dateien, NIS, NIS+ und DNS.
Fehlersuche bei NetBIOS-Namen
Die SMB-Protokolle haben von Anfang an das NetBIOS-Namenssystem genutzt. Es ist auch unter der Bezeichnung LAN Manager-Namenssystem bekannt. Dabei handelt es sich um ein einfaches Verfahren, bei dem jeder Knoten einen Namen mit 20 Zeichen Länge besitzt, der per Broadcast im Netzwerk herumgeschickt wird, so dass jeder andere Knoten davon weiß. Bei TCP/IP tendieren wir dazu, Namen wie client.example.com über DNS oder WINS zu verwenden, die in der Datei /etc/hosts gespeichert sind.
Die übliche Zuordnung von Domainnamen wie server.example.com zu NetBIOS-Namen benutzt einfach server als NetBIOS-Namen und konvertiert ihn in Großbuchstaben. Leider funktioniert dieses Verfahren nicht immer, besonders wenn Ihr Computer einen Host-Namen mit mehr als 20 Zeichen besitzt. Nicht bei jedem Rechner sind NetBIOS- und DNS-Namen identisch. So ist es nicht ungewöhnlich, für einen Computer den NetBIOS-Namen corpvm1 zu verwenden, wenn er den Hostnamen vm1.corp.com besitzt.
Computer, bei denen sich NetBIOS- und Hostnamen unterscheiden, können bei der Fehlersuche für Verwirrung sorgen. Wir empfehlen Ihnen daher, diese Konstellation zu vermeiden, wo immer Sie können. Sie können NetBIOS-Namen mit smbclient herausfinden:
- Wenn Sie die Freigaben auf Ihrem Samba-Server mit smbclient -L kurzer_name anzeigen lassen können, handelt es sich bei dem kurzen Namen um den NetBIOS-Namen.
- Erhalten Sie die Meldung Get_Hostbyname: Unknown host name, liegt vermutlich ein Konfigurationsfehler vor. Prüfen Sie in der smb.conf-Datei, ob der NetBIOS-Name ausdrücklich eingestellt ist.
- Versuchen Sie erneut, die Freigaben aufzulisten, geben Sie dieses Mal -I und die IP-Adresse des Samba-Servers an (z.B. smbclient -L server -I 192.168.236.86). Dadurch umgehen Sie die Namensauswertung, so dass Pakete direkt zur angegebenen IP-Adresse gesendet werden. Wenn dies funktioniert, gibt es ein Konfigurationsproblem.
- Versuchen Sie es mit -I und dem vollständigen Domainnamen des Servers (also zum Beispiel smbclient -L server -I server.example.com). Dieser Befehl testet die Auswertung des Domainnamens mit dem in Samba konfigurierten Verfahren (zum Beispiel DNS). Wenn dieser Versuch fehlschlägt, haben Sie ein Problem mit dem Namensdienst. Lesen Sie den Abschnitt »Fehlersuche bei Namensdiensten«, wenn Sie mit der Fehlersuche bei den NetBIOS-Namen fertig sind.
- Versuchen Sie es mit der Option -n (NetBIOS-Name) und dem Namen, der Ihrer Annahme nach funktionieren müsste (also zum Beispiel smbclient -n server -L server-12), aber ohne Angabe der IP-Adresse durch die Option -I. Wenn dies funktioniert, ist der mit -n der tatsächliche NetBIOS-Name des Servers. Die Meldung Get-Hostbyname: Unknown host SERVER bedeutet, dass es sich nicht um den richtigen Namen handelt.
- Wenn bisher nichts funktioniert hat, wiederholen Sie die Tests und geben zusätzlich -U benutzername und -W arbeitsgruppe an (beides in Großbuchstaben). Damit stellen Sie sicher, dass Ihnen der Name des Benutzers oder der Arbeitsgruppe kein Schnippchen schlägt.
- Wenn auch jetzt noch nichts funktioniert und Sie ein Namensdienstproblem hatten, beheben Sie die Probleme mit dem Namensdienst (siehe »Fehlersuche bei Namensdiensten«) und kehren dann zum NetBIOS-Namensdienst zurück.
Weitere Ressourcen
Irgendwann im Laufe Ihrer Arbeit mit Samba werden Sie zu dem Punkt kommen, an dem Sie weitere Informationen über die Software haben wollen, und zwar sowohl in gedruckter als auch in elektronischer Form, um Neuigkeiten zu lesen, um etwas über Aktualisierungen zu erfahren oder um Hilfe zu bekommen.
Dokumentation und FAQs
Es ist völlig in Ordnung, die Dokumentation zu lesen. Wirklich. Niemand kann Sie dabei sehen, und wir erzählen auch niemandem davon. Samba wird mit zahlreichen Dateien zur Dokumentation geliefert, und sie sind es wert, zumindest überflogen zu werden. Sie finden sie im Distributionsverzeichnis Ihres Computers unter /docs oder im Internet auf der Samba-Website: http://www.samba.org. Dort befindet sich die neueste Version der FAQ (Frequently Asked Questions; häufig gestellte Fragen), Fehlerinformationen und Hinweise zu den Distributionen, außerdem Links auf alle Samba-Manpages und HOWTO-Anleitungen.
Samba-Newsgroups
Usenet-Newsgroups waren schon immer ein guter Ort, um Ratschläge zu bekommen, über welches Thema auch immer. In den letzten Jahren hat sich dieser große Informationspool zu einer Ressource von unschätzbarem Wert gewandelt, zu einem Wissensspeicher. Archiv- und Such-Sites wie Google (http://www.google.de/advanced_group_ search) haben die Artikel der Newsgroups gespeichert und stellen nach einigen Mausklicks wertvolle Lösungen für Probleme bereit.
Die wichtigste Newsgroup für Samba ist comp.protocols.smb. Sie sollte Ihre erste Adresse werden, wenn Sie ein Problem haben. Meist können Ihnen fünf Minuten der Suche hier stundenlange Frustration ersparen, die Ihre Fehlersuche auf eigene Faust begleiten kann.
Wenn Sie eine Newsgroup durchsuchen, machen Sie so genaue Angaben wie möglich, aber fomulieren Sie knapp. Das Suchen nach einer bestimmten Fehlermeldung ist das Beste, wenn Sie die Antwort nicht sofort finden. Widerstehen Sie der Versuchung, nach Hilfe zu fragen, solange Sie nicht eine gewisse Zeit lang selbst gesucht haben. Vielleicht finden Sie die Antwort auf Ihre Frage in einer FAQ oder in einer der vielen Dokumentationsdateien, die mit Samba geliefert werden. Oder Sie kommen auf die Lösung, indem Sie eines der Diagnosewerkzeuge von Samba benutzen. Wenn dies nicht funktioniert, stellen Sie Ihre Frage in comp.protocols.smb und beschreiben dabei genau, was Sie versucht haben und wie Ihr Ergebnis aussieht. Schreiben Sie die Fehlermeldungen in die Frage. Es kann einige Tage dauern, bevor Sie Hilfe bekommen, seien Sie also bitte geduldig und versuchen Sie bis zur Antwort weiter, das Problem selbst zu lösen.
Suchen Sie selbst weiter nach einer Lösung, nachdem Sie die Frage gestellt haben. Die meisten von uns haben die Erfahrung gemacht, dass sie eine Frage mit hunderten von Zeilen mit Einzelheiten über mehrere Kontinente geschickt haben, nur um nach einer Stunde das Problem selbst zu lösen. Die Faustregel lautet etwa so: Je mehr Menschen Ihre Frage lesen, umso einfacher ist die Lösung. Das bedeutet, wenn jeder in der Unix-Gemeinschaft Ihren Artikel einmal gelesen hat, ist die Lösung so einfach wie: »Stecken Sie den Stecker in die Steckdose!«
Samba-Mailinglisten
Die folgenden Mailinglisten bieten Unterstützung für Samba. Auf der Samba-Homepage unter http://www.samba.org/ erfahren Sie, wie Sie sich an diesen Mailinglisten an- und abmelden:
Diese Liste ist für Neuigkeiten Samba betreffend zuständig, wie etwa die Ankündigung neuer Versionen.
Wenn Sie sich an dieser Liste anmelden, erhalten Sie jedes Mal eine Nachricht, wenn einer der Samba-Entwickler den Samba-Quellcode im CVS-Repository aktualisiert. Sie könnten diese Möglichkeit nutzen, wenn Sie auf einen bestimmten Bugfix oder die Umsetzung einer bestimmten Funktion warten. Um zu vermeiden, dass Ihre Mailbox von Nachrichten überschwemmt wird, empfehlen wir Ihnen, die Digest-Funktion zu nutzen, die Nachrichten in einer geringeren Anzahl von E-Mails zusammenfasst.
Dies ist eine Liste für Entwickler, die über vorkompilierte Samba-Distributionen diskutieren wollen.
Durchsuchbare Versionen der Samba-Mailinglisten-Archive finden Sie unter http://marc. theaimsgroup.com.
Wenn Sie eine Nachricht an die Samba-Mailinglisten schicken, sollten Sie immer daran denken, dass Sie diese Nachricht an ein großes Publikum richten. Die Hinweise aus dem vorherigen Abschnitt bezüglich der Usenet-Postings gelten auch hier. Eine gut formulierte Frage oder ein entsprechender Kommentar wird höchstwahrscheinlich beantwortet - eine unausgereifte Nachricht dagegen wird wohl mit Nichtbeachtung bestraft werden!
Weitere Informationsquellen