Kapitel 33. Die Samba-Checkliste

Andrew Tridgell

Samba Team

Jelmer R. Vernooij

Samba Team

Dan Shearer

Samba Team

Thomas Reiss

Deutsche Übersetzung
German Samba-3-Docs-Translation Team

Wed Jan 15

Inhaltsverzeichnis

Einleitung
Vorbemerkung
Die Tests

Einleitung

Dieses Dokument beschreibt eine Reihe von Tests zur Überprüfung Ihres Samba-Servers. Wenn bei den Tests Probleme festgestellt werden, bietet es ferner Informationen über die möglichen Fehlerursachen. Wurden alle Tests fehlerfrei durchgeführt, sollte alles einwandfrei funktionieren.

Sie sollten alle Tests in der genannten Reihenfolge durchführen. Wir haben sorgfältig versucht, die Reihenfolge so auszuwählen, dass nachfolgende Tests auf erfolgreich durchgeführte frühere Tests aufbauen. Auch nachdem Sie einen Fehler behoben haben, sollten Sie immer alle Tests komplett durchführen.

Wenn Sie eine E-Mail mit dem Inhalt „Es funktioniert nicht“ an eine der Samba-Mailinglisten schicken, ohne diese Tests durchgeführt zu haben, so wundern Sie sich bitte nicht, wenn Ihre E-Mail ingoriert wird.

Vorbemerkung

In allen Tests wird davon ausgegangen, dass Sie einen Samba-Server BIGSERVER und einen PC ACLIENT haben, die sich in der Arbeitsgruppe TESTGROUP befinden.

Das Vorgehen ist für andere Typen von Clients ähnlich.

Des Weiteren wird angenommen, dass Sie den Namen einer verfügbaren Freigabe in Ihrer smb.conf kennen. Ich werde hier die Freigabe mit dem Namen tmp verwenden. Sie können solch eine Freigabe durch folgende Zeilen erstellen (siehe ???).

Beispiel 33.1. smb.conf mit [tmp]-Freigabe

[tmp]
comment = temporary files
path = /tmp
read only = yes

Anmerkung

Diese Tests setzen Samba in der Version 3.0.0 oder später voraus. Einige der genannten Befehle sind in früheren Samba-Versionen nicht enthalten.

Bitte schenken Sie den gemeldeten Fehlermeldungen Ihre Aufmerksamkeit. Sollten Sie eine Fehlermeldung erhalten, dass Ihr Server „unfriendly“ wäre, überprüfen Sie bitte, ob Ihre IP-Namensauflösung korrekt eingestellt ist. Stellen Sie sicher, dass in der Datei /etc/resolv.conf ein korrekter Nameserver eingetragen wurde.

Sollten Sie keinen DNS-Server einsetzen, überprüfen Sie, ob Ihre smb.conf die Zeile dns proxy = no enthält. Der beste Weg, das zu überprüfen, ist der Befehl testparm smb.conf.

Es ist hilfreich, während der Tests die Log-Dateien in einem separaten Konsolenfenster (mit „Ctrl-Alt-F1“ bis „Ctrl-Alt-F6“ oder mehrere Fenster in X) mit Hilfe von tail -F log_file_name zu überwachen. Die wichtigen Log-Dateien finden Sie (in der Default-Installation) unter /usr/local/samba/var. Sie können hier des Weiteren die Verbindunglogs von Computern finden - oder evtl. auch in /var/log/samba, je nachdem, wie Sie es in smb.conf angegeben haben.

Sollten Sie während der Tests Änderungen an der smb.conf durchführen, vergessen Sie bitte nicht, smbd und nmbd neu zu starten.

Die Tests

Prozedur 33.1. Diagnose Ihres Samba-Servers

  1. Rufen Sie im Verzeichnis Ihrer smb.conf den Befehl testparm smb.conf auf. Werden Fehler angezeigt, ist Ihre smb.conf nicht in Ordnung.

    Anmerkung

    Ihre smb.conf sollte in /etc/samba oder in /usr/local/samba/lib zu finden sein.

  2. Führen Sie auf Ihrem PC den Befehl ping BIGSERVER und auf Ihrem Unix-Server den Befehl ping ACLIENT aus. Erhalten Sie keine gültige Antwort, so ist TCP/IP nicht korrekt eingerichtet.

    Sie müssen an Ihrem PC eine „DOS-Eingabeaufforderung“ öffnen, um den Befehl ping auszuführen.

    Erhalten Sie eine Meldung in der Art von „host not found“, dann ist Ihre DNS-Konfiguration oder die Datei /etc/hosts nicht in Ordnung. Es ist möglich, Samba ohne DNS-Einträge für den Server oder die Clients zu betreiben, aber es wird für die weiteren Tests davon ausgegangen, dass diese Einträge korrekt sind.

    Eine weitere Möglichkeit, warum ein ping nicht funktioniert, ist eine vorhandene Firewall. Sie müssen die Regeln der Firewall dahingehend anpassen, dass Sie die Workstation evtl. von einem anderen Subnetz aus zugreifen lassen können. Unter Linux können Sie dies mit den Firewall-Programmen ipchains oder iptables durchführen.

    Anmerkung

    Moderne Linux-Distributionen installieren per Default ipchains/iptables. Das ist ein gängiges Problem und wird häufig übersehen.

    Möchten Sie die Firewall-Regeln des Testsystems überprüfen, rufen Sie einfach iptables -L -v oder bei ipchains-basierenden Firewalls ipchains -L -v auf.

    Das Folgende ist eine Beispielausgabe eines System mit einer externen Ethernet-Schnittstelle (eth1), an der Samba nicht aktiv ist, und einer internen (privates Netzwerk) Ethernet-Schnittstelle (eth0), an der Samba aktiv ist.

    frodo:~ # iptables -L -v
    Chain INPUT (policy DROP 98496 packets, 12M bytes)
     pkts bytes target     prot opt in     out     source     destination
     187K  109M ACCEPT     all  --  lo     any     anywhere   anywhere
     892K  125M ACCEPT     all  --  eth0   any     anywhere   anywhere
    1399K 1380M ACCEPT     all  --  eth1   any     anywhere   anywhere  \
    					state RELATED,ESTABLISHED
    
    Chain FORWARD (policy DROP 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source     destination
     978K 1177M ACCEPT     all  --  eth1   eth0    anywhere   anywhere \
    					state RELATED,ESTABLISHED
     658K   40M ACCEPT     all  --  eth0   eth1    anywhere   anywhere
        0     0 LOG        all  --  any    any     anywhere   anywhere \
    					LOG level warning
    
    Chain OUTPUT (policy ACCEPT 2875K packets, 1508M bytes)
     pkts bytes target     prot opt in     out     source     destination
    
    Chain reject_func (0 references)
     pkts bytes target     prot opt in     out     source     destinat
    

  3. Führen Sie auf Ihrer Unix-Maschine den Befehl smbclient -L BIGSERVER aus. Sie sollten eine Liste der verfügbaren Freigaben erhalten.

    Sollten Sie die Meldung „Bad password“ erhalten, so dürfte es sich um einen falschen Eintrag bei hosts allow, hosts deny oder valid users in Ihrer smb.conf handeln, oder der guest account ist nicht gültig. Überprüfen Sie mit testparm Ihren guest account, und entfernen Sie testweise alle hosts allow-, hosts deny-, valid users- oder invalid users-Einträge.

    Erhalten Sie eine Meldung „connection refused“, dann läuft der smbd-Prozess nicht. Haben Sie diesen in inetd.conf eingetragen, so stimmt evtl. dieser Eintrag nicht. Haben Sie diesen als Daemon installiert, überprüfen Sie mit netstat -a, ob dieser gestartet ist und ob der netbios-ssn-Port den Status LISTEN hat.

    Anmerkung

    Einige UNIX/Linux-Systeme verwenden xinetd anstelle von inetd. Lesen Sie in Ihrer System-Dokumentation die Infos über die entsprechende Implementation Ihres Netzwerk-Super-Daemons nach.

    Erhalten Sie die Meldung „session request failed“, dann lehnt der Server eine Verbindung ab. Lautet die Information „Your server software is being unfriendly“, dann könnten Sie wahrscheinlich einen falschen Startparameter für smbd angegeben haben oder es besteht ein ähnliches grundsätzliches Problem beim Starten von smbd. Testen Sie mit testparm Ihre Config-Datei (smb.conf) auf Syntax-Fehler und darauf, dass die diversen Log- und Lock-Verzeichnisse von Samba vorhanden sind.

    Es gibt eine Menge von Gründen dafür, dass smbd eine Verbindung ablehnt oder verweigert. Die häufigsten Gründe dürften an folgenden Einträgen in der smb.conf liegen (siehe ???).

    Beispiel 33.2. Konfiguration für erlaubte Verbindungen eines bestimmten Subnetzes

    [globals]
    ...
    hosts deny = ALL
    hosts allow = xxx.xxx.xxx.xxx/yy
    interfaces = eth0
    bind interfaces only = Yes
    ...

    Im obigen Beispiel werden keinerlei Verbindungsanforderungen erlaubt, da diese durch die Adresse des Loopback-Devices 127.0.0.1 ersetzt werden. Um das Problem zu lösen, ändern Sie die folgenden Zeilen in ???

    Beispiel 33.3. Konfiguration für erlaubte Verbindungen eines bestimmten Subnetzes und von localhost

    [globals]
    ...
    hosts deny = ALL
    hosts allow = xxx.xxx.xxx.xxx/yy 127.
    interfaces = eth0 lo
    ...

    Eine weitere oft vorkommende Ursache dieser zwei Fehlermeldungen ist ein bereits laufender an Port 139, etwa ein durch inetd gestarteter Samba-Daemon smbd oder etwas Vergleichbares wie Digital's Pathworks. Überprüfen Sie daher vor dem Start von smbd als Daemon Ihre inetd.conf, um eine Menge Frustration zu vermeiden.

    Eine weitere mögliche Ursache für ein Scheitern dieses Tests besteht darin, dass die Subnetz-Maske und/oder die Broadcast-Adresse nicht korrekt ist. Bitte überprüfen Sie daher die korrekte Broadcast/Subnetz- Maske Ihres Netzwerkinterfaces und stellen Sie sicher, dass Samba diese Einstellungen in der log.nmbd-Datei bestätigt.

  4. Führen Sie den Befehl nmblookup -B BIGSERVER __SAMBA__ aus. Sie sollten die IP-Adresse Ihres Samba-Servers gemeldet bekommen.

    Wenn nicht, ist nmbd nicht korrekt installiert. Überprüfen Sie Ihre inetd.conf, wenn er durch inetd gestartet wird, oder dass er als Daemon läuft und am UDP-Port 137 lauscht.

    Ein häufiges Problem sind inetd-Implementationen, die nicht mehrere Parameter auf der Kommandozeile verarbeiten können. Ist das bei Ihnen der Fall, erstellen Sie ein einzeiliges Skript mit den richtigen Parametern, und starten Sie dieses durch inetd.

  5. Starten Sie den Befehl nmblookup -B ACLIENT '*'.

    Sie sollten die IP-Adresse Ihres PCs erhalten. Wenn nicht, ist auf Ihrem PC die Software nicht richtig installiert, konfiguriert oder nicht gestartet oder Sie haben den Namen des PCs falsch eingegeben.

    Sollte ACLIENT keine DNS-Namensauflösung verwenden, dann benutzen Sie die IP-Adresse des Clients für den oben genannten Test.

  6. Starten Sie den Befehl nmblookup -d 2 '*'.

    Dieses Mal versuchen wir dasselbe wie im vorigen Test, verwenden aber einen Broadcast über die Default-Broadcast-Adresse. Es sollten mehrere NetBios/TCP/IP-Rechner im Netzwerk antworten, obwohl Samba nicht alle Anworten in der kurzen Zeit erwischen kann. Sie sollten folgende Meldungen von diversen Hosts sehen: „got a positive name query response“.

    Sollten hier nicht die gleichen Ergebnisse wie im vorangegangenen Test erscheinen, dann erkennt nmblookup die korrekte Broadcast-Adresse nicht automatisch. In diesem Fall sollten Sie in smb.conf bei der interfaces-Option versuchen, die IP-Adresse, Broadcast-Adresse und Netzwerkmaske von Hand einzustellen.

    Befinden sich Ihr PC und Server in verschiedenen Subnetzen, benötigen Sie die -B-Option, um die Broadcast-Adresse des PC-Netzwerks zu benutzen.

    Dieser Test kann möglicherweise fehlschlagen, wenn Ihre Subnetz-Maske und Broadcast-Adresse nicht korrekt sind. (Siehe die Anmerkungen zu TEST 3).

  7. Führen Sie folgenden Befehl aus: smbclient //BIGSERVER/TMP. Sie sollten nach einem Passwort gefragt werden. Verwenden Sie das Passwort Ihres aktuellen Accounts auf der Unix-Maschine. Möchten Sie den Test mit einem anderen Account durchführen, fügen Sie die Option -U accountname am Ende des Befehls hinzu, zum Beispiel smbclient //bigserver/tmp -Ujohndoe.

    Anmerkung

    Es ist folgendermaßen möglich, das Passwort zusammen mit dem Benutzernamen zu verwenden: smbclient //bigserver/tmp -Ujohndoe%secret.

    Wenn Sie das Passwort eingegeben haben, erhalten Sie die smb>-Eingabeauforderung. Wenn nicht, beachten Sie die Fehlermeldung. Steht dort „invalid network name“, dann wurde die Freigabe tmp nicht korrekt in der smb.conf eingetragen.

    Steht dort „bad password“, dann könnte dies folgende Ursachen haben:

    1. Sie verwenden Shadow-Passwörter (oder ein anderes Passwort-System), haben aber keinen Support dafür in smbd einkompiliert.

    2. Ihr valid users-Eintrag ist nicht korrekt.

    3. Sie verwenden Groß-/Kleinschreibung im Passwort und haben die Option password level- nicht dementsprechend angepasst.

    4. Der path-Eintrag in smb.conf ist falsch. Überprüfen Sie dies mit testparm.

    5. Sie haben die Passwortverschlüsselung aktiviert, aber keine Unix-Benutzer zu Samba-Benutzern zugeordnet (gemappt). Starten Sie smbpasswd -a username.

    Nachdem Sie verbunden sind, sollte es Ihnen möglich sein, die Befehle dir, get, put und so weiter aufzurufen. Näheres erfahren Sie durch help command. Sie sollten besonders die Anzeige des freien Festplattenplatzes mit dir überprüfen.

  8. Führen Sie auf Ihrem PC in einer DOS-Eingabeaufforderung (DOS-Fenster) den Befehl net view \\BIGSERVER aus. Sie sollten eine Liste der verfügbaren Freigaben Ihres Servers erhalten.

    Erhalten Sie eine Meldung in der Art „network name not found“, dann funktioniert Ihre netbios-Namensauflösung nicht. Das ist überlicherweise ein Problem mit nmbd. Um das zu beheben, verwenden Sie eine der folgenden Möglichkeiten:

    1. Korrigieren Sie die Installation von nmbd.

    2. Fügen Sie die IP-Adresse von BIGSERVER zu den Einträgen des Felds wins server in der erweiterten TCP/IP- Konfiguration Ihres PCs hinzu.

    3. Aktivieren Sie die Windows-Namensauflösung über DNS in der erweiterten Konfiguration des TCP/IP-Setups Ihres PCs.

    4. Fügen Sie den Eintrag BIGSERVER zu Ihrer lmhosts-Datei auf dem PC hinzu.

    Erhalten Sie die Meldung „invalid network name“ oder „bad password error“, dann führen Sie dieselben Maßnahmen wie für die vorangegangenen smbclient -L-Tests durch. Achten Sie besonders darauf, ob die Einträge in hosts allow richtig sind (siehe die Manpages).

    Vergessen Sie bitte nicht, dass die Verbindungsanforderung von Ihrem PC zum Samba-Server immer mit dem aktuellen Benutzernamen Ihres angemeldeten Windows-Benutzers durchgeführt wird. Sie müssen sicherstellen, dass genau dieser Benutzeraccount mit demselben Kennwort auch auf Ihrem Samba-Server existiert.

    Erhalten Sie eine Meldung in der Art „specified computer is not receiving requests“ , dann bedeutet dies vermutlich, dass der Computer nicht über TCP angesprochen werden kann. Wenn Ihr Computer TCP-Wrapper einsetzt, fügen Sie für den Client (oder das Subnetz usw.) einen Eintrag in die Datei hosts.allow hinzu.

  9. Starten Sie den Befehl: net use x: \\BIGSERVER\TMP. Sie sollten nach einem Passwort gefragt werden und nach dessen Eingabe die Meldung command completed successfully erhalten. Sollte das nicht der Fall sein, ist Ihr PC nicht korrekt installiert oder die Datei smb.conf ist nicht in Ordnung. Stellen Sie sicher, dass die Einträge in hosts allow korrekt sind und die restlichen Einträge in smb.conf stimmen.

    Es ist auch möglich, dass der Server nicht erkennen kann, unter welchem Namen Sie sich verbinden. Um das Problem zu erkennen, fügen Sie die Zeile user = username im [tmp]-Abschnitt der smb.conf hinzu, wobei username der Benutzername zum eingegebenen Passwort sein muss. Wenn dass klappt, benötigen Sie die Option username mapping.

    Es ist auch möglich, dass Ihr Client nur verschlüsselte Passwörter versendet, aber der Eintrag encrypt passwords = no in der smb.conf steht. Ändern Sie diesen auf „yes“, um das Problem zu beheben.

  10. Führen Sie den Befehl nmblookup -M testgroup aus, wobei testgroup der Name der Arbeitsgruppe Ihres Samba-Servers und Ihrer Windows-PCs ist. Sie sollten die IP-Adresse des Masterbrowsers für diese Arbeitsgruppe erhalten.

    Wenn nicht, dann ist der Auswahlprozess des Masterbrowsers fehlgeschlagen. Warten Sie evtl. noch ein paar Minuten, und versuchen Sie es dann nochmal, um zu sehen, ob es nur etwas langsam ist. Klappt es dann immer noch nicht, werfen Sie einen Blick auf die Browsing-Optionen in der smb.conf. Stellen Sie sicher, dass Sie preferred master = yes eingetragen haben, damit beim Starten eine Wahl des Masterbrowsers durchgeführt wird.

  11. Durchsuchen Sie Ihre Netzwerkumgebung mit Ihrem Windows Explorer/Dateimanager. Ihr Samba-Server sollte in der Netzwerkumgebung unter Ihrer lokalen Arbeitsgruppe (oder der Arbeitsgruppe, die Sie in der smb.conf eingetragen haben) erscheinen. Es müsste Ihnen möglich sein, durch einen Doppelklick auf den Namen des Servers die Liste der Freigaben zu erhalten. Erhalten Sie eine Fehlermeldung „invalid password“, dann verwenden Sie möglicherweise Windows NT, denn NT öffnet keinen Server, der keine verschlüsselten Passwörter unterstützt und sich im User-Level-Security-Modus befindet. In diesem Fall tragen Sie security = server und password server = Windows_NT_Machine in Ihre smb.conf ein, oder stellen Sie sicher, dass encrypt passwords auf „yes“ steht.