Samba - die Verbindung zu Windows


1. Vorwort

Um in gemischten Netzwerken mit Windows und Linux PC´s Daten auszutauschen, wird unter Linux Samba benötigt. Samba stellt das Server Message Block-Protokoll (SMB) zur Verfügung, welches den Zugriff auf Windows-PC´s ermöglicht, stellt also quasi das Bindeglied von Linux zu Windows dar. Dazu benötigt man zwei Pakete. Einmal das Paket samba, welches den sogenannten Samba-Server enthält, welcher für den Zugriff von Windows-PC´s auf Linux notwendig ist und einmal das Paket samba-client, welches für den Zugriff von Linux auf Windows gebraucht wird. Samba bringt auch eine eigene Dokumentation mit. Dazu muß das Paket
samba-doc installiert werden. Möchte man die Konfigurations-Dateien für den Samba-Server nicht von Hand schreiben, hilft das Paket samba-swat. Swat ist ein HTML-Konfigurations-Tool für Samba und wird daher in einem Browser ausgeführt. Allerdings kann einen die Vielfalt der Einstellungen schon erschlagen, daher empfehle ich die Konfigurationsdatei für den Samba-Server von Hand selber zu schreiben. Allein mit den möglichen Einstellungen für Samba könnte man einen dicken Wälzer schreiben, jedoch für simple Zugriffe in einem privaten Netzwerk, braucht man lediglich einen minimalen Bruchteil der Einstellungen, daher verwirrt einen die Vielfalt unter Swat nur. Alles was man in der Konfigurations-Datei nicht angibt, bekommt einen Default-Wert von Samba.


2. Zugriff von Linux auf Windows - samba-client

Nach der Installation von samba-client kann man bereits von Linux auf Windows zugreifen, da samba-client keinerlei weitere Konfiguration erfordert. Dazu bedient man sich des Konquerors und gibt in der Adresszeile entweder smb:/ oder smb://I.P.-Adresse oder smb://Computername ein. Damit im letzteren Fall Samba den Computer mit Namen im Netzwerk finden kann, muß die Datei /etc/hosts mit den enstprechenden Namen und I.P.-Adressen vorhanden sein, damit Samba den Namen der I.P.-Adresse zuordnen kann.

 
3. Zugriff von Windows auf Linux - samba-server

Die zentrale Konfigurationsdatei für Samba liegt unter /etc/samba/smb.conf. Sie enthält einen Abschnitt namens [global] für globale Einstellungen und dann weitere Abschnitte für Freigaben und den Drucker. Da ich eine Drucker-Freigabe bisher nicht unter Samba zum laufen gebracht habe (siehe Kapitel Drucker unter Linux mit CUPS), werde ich hier keinerlei Drucker Einträge besprechen. Der Samba-Server selbst ist in 3 Schritten einsetzbar.


4. Samba-Dämon (smbd) starten

Der Samba-Server besteht aus dem Samba-Dämon (smbd), der im Hintergrund läuft und auf Zugriffe von Windows-PC´s wartet. Nach der Installation der Pakete, muß der Server gestartet werden, wenn das nicht automatisch geschehen ist. Ob der Server läuft kann man mit
# ps -A | grep smb
überprüfen. Und falls er nicht läuft, mittels des entsprechenden Start-Skripts abstarten, z.B.
# /etc/init.d/samba start
oder
# /etc/init.d/smb start
je nach Distribution. Für die Zukunft sollte man den Start natürlich in die Runlevel Konfiguration übernehmen, falls das beim Installieren der Pakete auch nicht gemacht wurde. (Ein Hinweis: Unter Debian läuft Samba sofort nach der Installation der Pakete und wird auch automatisch gestartet!)


5. Samba-Server konfigurieren (smb.conf)

Ich zeige hier nur minimale Einträge, also nur das Allernötigste für die smb.conf. Wer sich da auslassen will und dem Samba-Server bis ins kleinste Detail konfigurieren will, dem empfehle ich einen dicken Wälzer aus dem Buchladen über Samba, mit dem er sich wochenlang beschäftigen kann. Meine minimale smb.conf sieht so aus (mit den Erklärungen der einzelnen Punkte darunter):

[global]
Die globalen Einstellunge für Samba.

workgroup = WORKGROUP
Angabe des Arbeitsgruppen-Namens, welcher nur 11 Zeichen lang sein darf.
netbios name = computername
Angabe des Rechnernamens wie er im Netzwerk auftaucht.
server string = computername
Der samba server string, welcher per Default die Bezeichnung "samba server <versions-Nr>" hat, darf lediglich 15 Zeichen lang sein. Bei mehr als 15 Zeichen kann es zu Verbindungs-Problemen kommen. Windows zeigt bei Computernamen im Netzwerk als erstes den server string an und dann erst den netbios namen, also sieht ein Samba-Computername unter Windows so aus:
"samba server <versions-Nr> (netbios name)"
interfaces = eth0
Ohne Angabe verwendet Samba die allererste verfügbare Netzwerk-Karte. Bei mehreren Netzwerkkarten muß daher explizit die korrekte Karte am Windows-Netz angegeben werden. Als Angabe geht entweder der Name (eth0, eth1..) oder die I.P.-Adresse (z.B. 192.168.1.1/255.255.255.0, es geht auch 192.168.1.1/24).
keep alive = 60
Aktualisiert die Netzwerkumgebung alle 60 Sekunden. Ein niedriger Wert ist sinnvoll, wenn sich in einem Netzwerk ständig die Umgebung ändert. Allerdings belastet ein niedriger Wert auch das Netzwerk.
security = user
Bei der Angabe user verhält sich Samba wie ein Win2000-Rechner und fordert eine Benutzerauthentifizierung. Bei der Angabe share verhält sich Samba wie Win9x (keine Benutzer).
os level = 2
Der os-Level bestimmt wer die Liste der Rechner führen darf im Netzwerk, wer also "Master-Browser" ist. Windows Rechner haben folgende os-Werte: Win9x=1, WinNT-Server=32, NT-Workstation=16. Die Maschine mit dem höchsten os-Level wird der Master.
domain master = No
Mit der Einstellung Yes würde Samba auf jeden Fall der Master-Browser, egal was für ein os-level. Die Browsing Liste wird unter /usr/local/samba/var/locks/browse.dat gespeichert.
socket options = TCP_NODELAY
Der Datentransfer von Host zu Client wird über sogenannte Sockets abgewickelt. Diese Sockets akzeptieren eine Anzahl von Optionen, mit denen der Datentransfer unter Umständen signifikant beschleunigt werden kann (das Gegenteil kann allerdings auch eintreten). Da Samba nicht dynamisch herausfinden kann, welche der angegebenen Socket-Optionen welchen Effekt haben, muss man durch Versuch und Irrtum herausfinden, wie die Optionen auf den Datentransfer einwirken. Standardmäßig steht diese Einstellung auf TCP_NODELAY.
encrypt passwords = Yes
Win2000 und XP verwenden eine Verschlüsselung für die Paßwörter im Netzwerk, daher sollte man die Verschlüsselung für Samba in einer solchen Umgebung einschalten.
unix charset = ISO-8859-1
Sollte es Probleme geben, daß der Zeichensatz nicht korrekt angezeigt wird, also die Umlaute ä,ö,ü und das scharfe ß fehlen, hilft dieser Eintrag. Neuere Samba-Versionen haben allerdings gezeigt, daß diese Angabe nicht mehr benötigt wird und sogar das Gegenteil bewirken kann. Ob der Zeichensatz also mit diesem Eintrag oder ohne ihn korrekt angezeigt wird, muß man einfach ausprobieren.

[homes]
Die Freigabe des Heimat-Verzeichnisses.

comment = Home Directories
Der Kommentar, der angezeigt wird.
read only = No
Benutzer dürfen Dateien verändern und nicht nur lesen.
browseable = No
Einstellung No: Das Home Verzeichnis ist nur für den Besitzer des Benutzer-Verzeichnisses sichtbar. Bei Yes für alle, was aber noch nicht bedeutet, daß jeder darauf zugreifen darf!

Beispiel für weitere Freigaben
[Name-der-Freigabe]
In die eckigen Klammern wird der Freigabe-Name geschrieben, der in der Netzwerkumgebung von Windows angezeigt wird.

path = /Pfad/zur/Freigabe
Das Verzeichnis, daß freigegeben werden soll.
read only = No
Benutzer dürfen Dateien verändern und nicht nur lesen.

Das war´s auch schon. Mehr muß in die Datei smb.conf gar nicht rein, um einen Zugriff von Windows auf Linux zu ermöglichen.

Ein Hinweis: Nach Änderungen in der smb.conf muß man den Samba-Server neu starten, damit die Änderungen wirksam werden. Je nach Distribution entweder mit
# /etc/init.d/samba restart
oder
# /etc/init.d/smb restart

Noch ein Hinweis zu den Freigaben: Damit ein Windows-Rechner überhaupt auf ein mit Samba freigegebenes Verzeichnis auf einem Linux-Rechner zugreifen kann, müssen die Rechte des entsprechenden Verzeichnisses richtig gesetzt werden. Am Besten gibt man die vollen Rechte mittels
# chmod 777 Ordner
Sollten einige Dateien auf einem Linux-Rechner bei einem Windows-Zugriff nicht löschbar oder veränderbar sein, ist unter Windows der Schreibschutz zu überprüfen. Sollten es sämtliche Dateien eines Verzeichnisses sein die Probleme bereiten, ist der Schreibschutz des Ordners zu überprüfen.

Noch ein Hinweis zur Home-Freigabe: Gibt man keinen Pfad an, wird automatisch das Heimat-Verzeichnis des angemeldeten Users unter dessen Benutzername als Freigabe angezeigt, z.B. heißt beim User "udo" die Freigabe dann "udo" und bei klick auf selbige, befindet man sich sofort in dem Heimat-Verzeichnis des Users. Gibt man einen Pfad an wie "path = /home" erscheint unter der Freigabe mit dem Usernamen das unter path angegebene Verzeichnis, also öffnet sich beim Doppelklick auf die Freigabe mit dem Usernamen ein Verzeichnis in dem sich ein Ordner der auch den Usernamen trägt befindet. Man muß sich also durch zwei Verzeichnisse klicken, bis man im Heimat-Verzeichnis ist.
Setzt man "browseable" auf "Yes" wird noch zusätzlich die Freigabe "homes" angezeigt und somit ist das Heimatverzeichnis zweimal da. Einmal unter dem Usernamen und einmal unter "homes", daher ist es besser, man läßt die Pfadangabe unter der homes-Freigabe weg.

Und noch ein Wort zum Freigabe-Modus share
(PC wie bei Win9x offen machen wie ein Scheunentor)

Im Freigabe-Mode Share verhält sich Samba wie ein Win9x Computer. Allerdings muß zwingend unter [global] ein Gast-Account definiert werden, welcher natürlich einem User im System entspricht, da Samba immer nur User verwendet/definieren kann, die bereits im System registriert sind. Entweder legt man einen User namens "Gast" an, oder verwendet die vorhandenen. Der von Linux vorgeschlagene Benutzer für den Gast-Zugriff ist "nobody". Möchte man ein bestimmtes Heimatverzeichnis für den Gastzugriff freigeben, muß als "guest account" unter [global] der entsprechende User-Name verwendet werden, z.B. gibt es einen Benutzer udo im System und definiert man "guest account = udo", dann ist das Heimatverzeichnis dieses Users für jedermann offen. Allerdings muß auch die Freigabe [homes] dementsprechend angepaßt werden:

  1. Setzt man "browseable" auf "No" dann taucht die Freigabe für einen Gast-Zugriff in der Netzwerkumgebung gar nicht auf.

  2. Für den Zugriff muß "public" (öffentlich) auf "Yes" gesetzt werden, da sonst Samba einen Login-Prompt zeigt und einen Benutzernamen und ein Paßwort fordert. Gibt man dort allerdings einen Benutzer des Systems an, welcher in der Samba-Paßwort-Datei verzeichnet ist, hat man trotzdem Zugriff, auch wenn Public auf "No" gesetzt ist.

  3. Public ist sozusagen der Schlüssel für den Gast-Zugriff. Erst durch diese Einstellung wird das Verzeichnis "öffentlich".

  4. Gibt man im Freigabe-Mode share unter [homes] keinen Pfad an, verwendet Linux den Standard-Pfad, was im Normalfall das root-Verzeichnis "/" ist und somit hat der "Gast" vollen Zugriff auf sämtliche Ordner. Daher ist es besser im Gegensatz zum Freigabe-Mode user einen Pfad wie /home anzugeben.


6. Samba-User einrichten

Nachdem die Pakete installiert sind und die smb.conf angepaßt wurde, muß im Falle der Einstellung security=user in der smb.conf noch ein Samba-Benutzer definiert werden. Dieser muß zwingend schon als Benutzer am Linux-PC registriert sein, bzw. muß für einen Samba-Benutzer ein entsprechender Linux-Benutzer vorher erstellt werden. Nur bereits erfaßte Benutzer können Samba-Benutzer werden. Einen Samba-Benutzer legt man mit folgendem Befehl an:

# smbpasswd -a <Benutzername>

Nach der Angabe des Benutzernamens wird 2x nach dem Paßwort gefragt. Nach eingeben und nochmaligem bestätigem des Paßwortes wird der Samba-Benutzer in der Datei /etc/samba/smbpasswd angelegt. Erst mit diesem Samba-Benutzer wird es überhaupt möglich, sich von einem Windows-PC auf Linux einzuloggen. Möchte man eine Übersicht über die angelegten Samba-Benutzer hilft
# pdbedit -L       --- listet alle Samba-User auf
# pdbedit -Lv       --- gibt ausführlichere Informationen über Samba-User
# pdbedit -x -u username       --- löscht einen Samba-User


7. Einhängen einer Windows-Freigabe in den Verzeichnisbaum

Natürlich ist es mit Samba auch möglich dauerhafte Verbindungen mit Freigaben anzulegen, genau wie unter Windows die Funktion "Netzlaufwerk verbinden". Der einzige Unterschied zu Windows ist, daß kein Laufwerksbuchstabe angelegt wird, sondern die Freigabe in den Verzeichnisbaum eingehängt wird, also gemountet wird. Sinnigerweise heißen daher die erforderlichen Befehle dafür smbmount, smbumount oder alternativ mount -t smbfs. Zusätzlich gibt es noch den Befehl smbclient, welcher ideal ist, um Freigaben anzeigen zu lassen, aber auch noch andere Möglichkeiten bietet....

Vorbedingungen: Alle erforderlichen Samba-Pakete müssen installiert sein und Samba muß laufen. Benötigt werden die Pakete samba, samba-client und vor allem das Paket smbfs! Ein leeres Verzeichnis muß ausgesucht oder angelegt werden. Als Beispiel-Verzeichnis nehme ich hier /mnt/Windows.
Mit dem Befehl
# smbmount \\\\Computername\freigegebenesVerzeichnis /mnt/Windows -o username=Anmeldename
wird die entfernte Windows-Freigabe in den Verzeichnisbaum unter /mnt/Windows eingehängt. Nach dem Aufruf folgt noch die Paßworteingabe. Manchmal kann die Pfadangabe zum entfernten Server abweichen, dann sieht sie wie folgt aus:
# smbmount //Computername/freigegebenesVerzeichnis /mnt/Windows -o username=Anmeldename
dabei steht -o für Optionen und das kann sein der Username und/oder das Paßwort. Gibt man das Paßwort direkt mit an, sieht der Befehl so aus:
# smbmount //Computer/Verzeichnis /mnt/Windows -o username=Name,password=*****

Mit
# smbumount /mnt/Windows
wird die Freigabe wieder ausgehängt.

Es geht aber auch mit dem Befehl mount selbst:
# mount -t smbfs -o username=Benutzername, lfs //Computer/Freigabe /mnt/Windows
Die Option lfs hebt die 2GB-Beschränkung auf, der Samba stellenweise noch unterliegt. Ohne diese Option können Kopieraktionen nach 2 GB abbrechen!


8. Mit smbclient Freigaben anzeigen lassen

Weiß man nicht, wie die Freigaben auf dem entfernten Windows-PC heißen, oder hat vorrübergehend nicht mehr die genaue Schreibweise im Kopf, kann man sich mittels smbclient die Freigaben anzeigen lassen:
# smbclient -L servername -N
Mit der Option -L liefert das Programm smbclient eine Übersicht aller Freigaben auf dem angewählten Server. Der Parameter -N bedeutet ohne Passworteingabe und wird nicht von jedem Server unterstützt - je nachdem wie der Serveradmin das Windows System eingerichtet hat. In derartigen Fällen kann -N weggelassen werden und dafür ist dann eine Passworteingabe erforderlich.


9. Mit smbclient auf Freigaben verbinden

# smbclient //servername/freigabe -U username
Durch diesen Aufruf von smbclient kann eine direkte Verbindung auf die Freigabe hergestellt werden. Mit der Option -U username wird der Benutzername für die Anmeldung angegeben. Das System verlangt anschließend eine Passworteingabe und wenn diese akkzeptiert wird, befindet man sich in der Maske
# smb: \>
In dieser smb Shell sind die meisten unter Linux gewohnten Befehle möglich, also z.B. ls, dir, cd, mkdir etc. Ein Dateitransfer kann mittels put und get durchgeführt werden. Dabei wird als Zielverzeichnis im eigenem System das Verzeichnis gewählt, von welchem aus smbclient gestartet wurde. Die Samba-Shell ähnelt daher ihrer Funktionsweise FTP. help liefert übrigens eine Befehlsübersicht. Mit exit beendet man die Shell wieder. Beispiele für den Transfer:
# smb: \> put hilfe.txt
kopiert die Datei hilfe.txt aus dem aktuellen Verzeichnis in das Verzeichnis der Freigabe.
# smb: \> put /home/udo/hilfe.txt
Wenn die Datei nicht im aktuellen Verzeichnis liegt.
# smb: \> get hilfe.txt
kopiert die Datei von der Freigabe ins aktuelle Verzeichnis.
# smb: \> get bilder\archiv\hilfe.txt
kopiert eine Datei aus einem Unterverzeichnis der Freigabe ins aktuelle Verzeichnis. Man beachte die geänderte Schreibweise (Backslash \) für Windows-Verzeichnisse.


10. Nachrichten zu Windows-Rechnern verschicken

Es gibt unter Windows einen sogenannten Windows-Nachrichtendienst, mit dem man in der Lage ist, einfache Textbotschaften im Netzwerk zu verschicken. Diese poppen dann beim jeweiligen Rechner als eigenständiges, kleines Dialog-Fenster auf. Mittels smbclient ist man auch dazu in der Lage.
# smbclient -M hostname
mit der Option -M kann man eine Nachricht mit Hilfe des Protokolls "WinPopup" an einen Windows-Computer verschicken. Nach Eingabe des Befehls ist man mit dem Computer verbunden und kann die Nachricht tippen. Am Ende der Nachricht drückt man STRG-D und verschickt damit selbige. So fern WinPopup auf dem entfernten Rechner läuft, ertönt ein Signal und die Nachricht erscheint.