29.7Client-Zugriff

Dieser Abschnitt beschäftigt sich mit der Frage, wie ein Client-PC auf die von Samba zur Verfügung gestellten Verzeichnisse zugreift. Eine wichtige Voraussetzung besteht darin, dass die TCP-Ports 135, 139 und 445 sowie die UDP-Ports 137 und 138 nicht durch eine Firewall blockiert werden.

Linux-Clients

Bevor Sie unter Linux auf Windows- bzw. Samba-Netzwerkverzeichnisse zugreifen können, müssen Sie die Samba-Client-Tools installieren. Bei Ubuntu sind die erforderlichen Programme in samba-common, smbclient und libsambaclient verpackt, bei Fedora in samba-common, samba-client und samba-libs.

Am einfachsten verwenden Sie zum Zugriff auf ein Netzwerkverzeichnis den Dateimanager von Gnome oder KDE. In beiden Programmen gibt es einen Netzwerk-Browser, der im ersten Schritt alle verfügbaren Windows-Netzwerke anzeigt. Ein paar Mausklicks und gegebenenfalls die Eingabe der Login-Daten (Benutzername und Passwort) führen in das gewünschte Verzeichnis.

Bisweilen ist der Dateimanager nicht in der Lage, die Netzwerkverzeichnisse selbstständig zu finden. In diesem Fall müssen Sie deren Ort explizit in der Adresszeile des Dateimanagers angeben. Dabei gilt die Schreibweise smb://servername/verzeichnisname.

KDE- und Gnome-Verweigerer, die dennoch grafische Unterstützung beim Zugriff auf Windows-Verzeichnisse suchen, sollten sich das Programm pyNeighborhood ansehen.

CIFS

Eine weitere Vorgehensweise besteht darin, Netzwerkverzeichnisse mit dem Common Internet File System (CIFS) direkt in den lokalen Verzeichnisbaum einzubinden. Das ist freilich nur sinnvoll, wenn anzunehmen ist, dass das Verzeichnis über längere Zeit verfügbar bleibt, also auf einem stabilen Server läuft.

CIFS ist der Nachfolger von SMBFS (SMB File System). CIFS-kompatible Samba-Server geben Unix/Linux-kompatible Informationen über die Zugriffsrechte von Dateien weiter, was bei SMBFS nicht möglich ist.

CIFS setzt voraus, dass die Samba-Client-Werkzeuge und die CIFS-Unterstützung für mount und insbesondere das Kommando mount.cifs zur Verfügung stehen. Bei Debian und Ubuntu muss dazu das Paket cifs-utils installiert werden. Bei Fedora und openSUSE ist das Paket standardmäßig installiert.

Um ein externes Verzeichnis einzubinden, geben Sie eines der beiden folgenden Kommandos an, je nachdem, ob die Windows-Freigabe auf der Basis von Benutzernamen erfolgt oder nicht:

root# mount -t cifs //jupiter/myshare /media/winshare root# mount -t cifs -o username=name //jupiter/myshare /media/winshare

Damit wird das auf dem Rechner jupiter unter dem Namen myshare freigegebene Verzeichnis in das Linux-Dateisystem eingebunden. Die Daten stehen jetzt unter dem Linux-Verzeichnis /media/winshare dem Benutzer root zur Verfügung. Dieses Verzeichnis muss vor dem Ausführen von mount natürlich schon existieren. Bei der Ausführung des Kommandos werden Sie nach dem Passwort gefragt. Sie können das Passwort aber auch direkt angeben, was aber unsicher ist:

root# mount -t cifs -o username=name,password=xxxxxxxx \ //jupiter/myshare /media/winshare

In der Praxis sind leider noch wesentlich mehr Optionen erforderlich. Ein typisches mount-Kommando sieht etwa so aus:

root# mount -t cifs -o username=name,uid=1000,gid=1000,iocharset=utf8,nounix \ //jupiter/myshare /media/winshare

Option

Bedeutung

credentials=datei

liest den Login-Namen und das Passwort aus einer Datei.

dir_mod=n

setzt die Zugriffsbits für Verzeichnisse.

domain=name

bestimmt die Arbeitsgruppe oder Domäne.

file_mod=n

setzt die Zugriffsbits für Dateien.

gid=n

gibt an, welche Gruppe Zugriff auf die Dateien erhält.

iocharset=utf8

verwendet den UTF8-Zeichensatz für Dateinamen.

nounix

deaktiviert die Unix-Extensions des CIFS-Protokolls.

password=xxx

gibt das Passwort an (unsicher!).

uid=n

gibt an, wer Zugriff auf die Dateien erhält.

username=name

gibt den Benutzernamen an.

sec=ntlm

stellt den Authentifizierungs-Modus ein.

Tabelle 29.4CIFS-mount-Optionen

Eine Zusammenfassung der wichtigsten mount-Optionen finden Sie in Tabelle 29.4. Zum besseren Verständnis sind hier aber noch ein paar Erläuterungen erforderlich: Damit Sie das Netzwerkverzeichnis nicht nur als root, sondern auch als gewöhnlicher Benutzer lesen und schreiben können, geben Sie beim mount-Kommando mit uid=n und gid=n Ihre persönlichen Benutzer- und Gruppen-Identifikationsnummern an, die Sie mit dem Kommando id schnell ermitteln können.

Ergänzend dazu geben dir_mode und file_mode an, mit welchen Zugriffsrechten die Netzwerkverzeichnisse und Dateien sichtbar sein sollen. Die Zugriffsrechte werden in einer Oktalschreibweise angegeben, die in Abschnitt 13.6, »Zugriffsrechte, Benutzer und Gruppenzugehörigkeit«, näher erläutert ist. Zweckmäßige Einstellungen sind zumeist 0700 und 0600. Damit kann der mit uid genannte Benutzer alle Verzeichnisse bearbeiten und alle Dateien lesen und verändern. Andere Benutzer des Computers haben hingegen keinen Zugriff.

Ein wenig absurd mutet die Option nounix an: Der CIFS-Standard wurde nämlich um die sogenannten Unix Extensions erweitert, um eine bessere Kompatibilität mit Unix/Linux-Systemen zu erzielen. Bei manchen NAS-Geräten sind diese Extensions auch aktiv. In diesem Fall übernimmt mount die Benutzer- und Gruppeninformationen sowie die Zugriffsrechte vom NAS-Gerät und ignoriert die Optionen uid, gid, dir_mode und file_mode.

Zweckmäßig ist das aber nur, wenn diese Daten zwischen dem NAS-Gerät und den Clients abgestimmt sind. Weil das aber selten der Fall ist, muss der Unix-Kompatibilitätsmodus deaktiviert werden, damit uid, gid, dir_mode und file_mode wirksam bleiben. Mitunter können Sie mit nounix auch Inkompatibilitäten aus dem Weg gehen, die sich in der vagen Fehlermeldung operation not supported äußern.

iocharset=utf8 vermeidet schließlich die falsche Darstellung von Dateinamen mit internationalen Zeichen.

Um das Netzwerkverzeichnis immer automatisch in den Verzeichnisbaum einzubinden, fügen Sie /etc/fstab einen entsprechenden Eintrag hinzu, beispielsweise so:

# in /etc/fstab //jupiter/myshare /media/winshare cifs username=u,password=p,... 0 0

Bei den meisten Distributionen werden alle in /etc/fstab genannten CIFS-Verzeichnisse während des Init-Prozesses eingebunden. Eine Ausnahme stellt SUSE dar: Hier ist für diesen Vorgang das Init-V-Script cifs zuständig (auch bei SUSE-Versionen, die schon Systemd verwenden!), das explizit aktiviert werden muss:

root# insserv cifs

Aus Sicherheitsgründen ist die direkte Angabe des Passworts in /etc/fstab nicht empfehlenswert. Ein wenig besser ist es, diese Information in eine eigene Datei auszulagern, die nur root lesen kann. Richten Sie also die Datei /etc/.winshare-pw ein, die den Login-Namen, das Passwort und optional die Arbeitsgruppe (Domäne) für das Netzwerkverzeichnis enthält. Der Aufbau der Datei sieht so aus:

username=name password=xxxx domain=workgroup

Das folgende Kommando schränkt den Zugriff auf die Datei ein. Jetzt kann nur noch root die Datei lesen und verändern:

root# chmod 600 /etc/.winshare-pw

Anschließend fügen Sie dem fstab-Eintrag die Option credentials hinzu. Beim Einbinden des Verzeichnisses werden die Authentifizierungsdateien aus .winshare-pw gelesen:

# Ergänzung in /etc/fstab //jupiter/myshare /media/winshare cifs credentials=/etc/.winshare-pw 0 0

smbclient und smbtree

Freunde textorientierter Kommandos können Netzwerkverzeichnisse auch mit smbclient durchforschen. Das Kommando bietet zwar wenig Komfort, ist aber oft praktisch, um Samba-Problemen auf die Spur zu kommen.

smbclient -L localhost zeigt alle freigegebenen Ressourcen des lokalen Rechners an, listet alle sichtbaren Arbeitsgruppen des lokalen Netzwerks auf und gibt an, welcher Rechner in der jeweiligen Gruppe als Master fungiert. Die Passwortabfrage beantworten Sie bei passwortfreien Ressourcen einfach mit (¢). Falls auf dem lokalen Rechner kein Samba-Server läuft, geben Sie statt localhost den Rechnernamen an.

Wenn smbclient eine Login-Fehlermeldung liefert (access denied), stimmen die Benutzer- oder Workgroup-Namen Ihres Linux-Rechners zumeist nicht mit denen des Windows-Rechners oder Samba-Servers überein. Die einfachste Lösung besteht darin, diese Informationen als zusätzliche Parameter an smbclient zu übergeben:

user$ smbclient -U benutzername -W workgroupname -L jupiter

Sie können smbclient auch interaktiv zur Übertragung von Dateien einsetzen. Dazu stellen Sie zuerst eine Verbindung zum Windows-Rechner oder Samba-Server für das freigegebene Verzeichnis her. Das Verzeichnis müssen Sie in der Windows-typischen Schreibweise \\servername\verzeichnisname angeben. Damit die \-Zeichen nicht von der Shell verarbeitet werden, müssen sie verdoppelt werden.

Anschließend können Sie wie beim Kommando ftp Verzeichnisse mit ls ansehen, mit cd wechseln, mit get Dateien auf den lokalen Rechner übertragen (download) und mit put Dateien auf dem externen Rechner speichern (upload). Einen Überblick über die wichtigsten Kommandos bekommen Sie mit help. Eine ausführliche Beschreibung der Kommandos gibt man smbclient.

user$ smbclient -U name -W wgname \\\\jupiter\\myshare Password: xxxxxx smb: > ls . D 0 Thu Sep 7 17:38:02 2010 .. D 0 Thu Sep 7 17:38:02 2010 data D 0 Wed Apr 5 18:17:11 2010 file.xy AR 226 Sat Dec 14 00:00:00 2010

Debugging mit »smbclient«

Zur Fehlersuche können Sie smbtree mit der Option -d10 ausführen. Sie erhalten dann alle möglichen Debugging-Ausgaben. Mitunter scheitert der Samba-Zugriff daran, dass es im Netzwerk keinen Computer bzw. kein Gerät gibt, das als Master-Browser agiert. Abhilfe kann dann entweder ein echter Windows-Rechner schaffen oder natürlich ein Linux-Rechner, auf dem Samba läuft.

Das Kommando smbtree liefert eine baumförmige Liste aller im Netzwerk zu findenden Windows- und Samba-Server inklusive aller Objekte, die von diesen Servern freigegeben wurden. Normalerweise verwendet smbtree den aktuellen Benutzernamen und fragt nach einem dazugehörenden Passwort. Mit --user=name%passwort können Sie diese Daten beim Aufruf des Kommandos einstellen. Um Ressourcen zu finden, die ohne Passwort zugänglich sind, verwenden Sie die Option -N.

root# smbtree Enter kofler's password: ******** WORKGROUP \\WIN-PG6V7UCLQQI \\U1510VBOX u1510vbox server (Samba, Ubuntu) \\U1510VBOX\Bilder \\U1510VBOX\IPC$ IPC Service (u1510vbox server (Samba, Ubuntu)) \\U1510VBOX\print$ Printer Drivers \\U1510VBOX\verzeichnis1 \\U1510VBOX\salesdata \\U1510DESKTOP u1510desktop server (Samba, Ubuntu) \\U1510DESKTOP\print$ Printer Drivers \\U1510DESKTOP\IPC$ IPC Service (u1510desktop server (Samba)) \\LINUX-VY7X Samba 4.2.4-1.2-3468-SUSE-SLE_12-x86_64 \\LINUX-VY7X\IPC$ IPC Service (Samba 4.2.4-...) \\LINUX-VY7X\print$ Printer Drivers \\LINUX-VY7X\groups All groups \\LINUX-VY7X\users All users \\LINUX-VY7X\profiles Network Profiles Service \\IMAC imac \\F23 Samba Server Version 4.3.0rc4 \\F23\IPC$ IPC Service (Samba Server Version 4.3.0rc4) \\F23\verzeichnis1 \\DEBIAN8 Samba 4.1.17-Debian \\DEBIAN8\IPC$ IPC Service (Samba 4.1.17-Debian) \\DEBIAN8\print$ Printer Drivers

Windows-Clients

Aktuelle Windows-Versionen erkennen leider weder den Samba-Server noch ältere Windows-Server im lokalen Netzwerk. Schuld ist ein neues Protokoll zum Austausch der Netzwerkdaten, nämlich Link Layer Topology Discovery (kurz LLTD). Dieses Protokoll wäre an sich eine feine Sache, weil es wesentlich schneller als bisherige Verfahren funktioniert. Leider wird es momentan weder von Samba noch von älteren Windows-Versionen unterstützt. Weitere Informationen zu LLTD finden Sie hier:

http://support.microsoft.com/kb/922120
http://msdn.microsoft.com/en-us/windows/hardware/gg463099.aspx

Glücklicherweise ist auch ohne automatische Erkennung ein Zugriff auf nicht-LLTD-konforme Netzwerkgeräte möglich: Geben Sie in der Adresszeile des Windows Explorers einfach den Rechnernamen in der Form \\hostname\sharename manuell ein (siehe Abbildung 29.2).

Unter Windows auf Samba-Verzeichnisse zugreifen

Abbildung 29.2Unter Windows auf Samba-Verzeichnisse zugreifen

OS X

OS X ist grundsätzlich SMB-kompatibel und tut sich mit Samba-Freigaben leichter als Windows. Jeder Samba-Server wird nach kurzer Zeit automatisch in der Seitenleiste des Finders angezeigt. OS X versucht einen Verbindungsaufbau als Gast. Gelingt dieser nicht, geben Sie im Login-Dialog den entsprechenden Samba-Benutzernamen und das Passwort an.