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:
- Setzt man "browseable"
auf "No" dann taucht die Freigabe für einen Gast-Zugriff
in der Netzwerkumgebung gar nicht auf.
- 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.
- Public ist sozusagen
der Schlüssel für den Gast-Zugriff. Erst durch diese
Einstellung wird das Verzeichnis "öffentlich".
- 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.
|