AG-Intra.net Arbeitsgemeinschaft
Intranet

Home
Was ist ein Intranet
Grundlagen
Netzwerke
Linux
Windows
Java
Sicherheit
Datenbanken
Projekte
Links
Impressum
Mitmachen ?
Diskussionsforum
Letztes Update:
05.11.2000
Liebe Besucher, ein aktueller Hinweis in eigener Sache:
Es ist beabsichtigt, diese Seiten und die Domain im Januar/Februar 2004 auf einen anderen Server umzuziehen. Es ist leider nicht auszuschließen, daß es während des Umzugs zu technischen Problemen mit diesen Seiten kommen wird. Insbesondere im eMail-Bereich wird es vermutlich Probleme geben. Wenn Sie fragen haben oder mich sonstwie erreichen wollen empfehle ich an rebel@snafu.de zu posten.
Nachdem der Umzug abgeschlossen ist, wird es allerdings auch inhaltliche Änderungen während des ersten Halbjahrs 2004 geben. Keine Angst. Es werden keine Inhalte verlorengehen, aber die Struktur der Seiten wird komplett geändert. Diese Seite hat eben eine andere Entwicklung genommen seit 2000, als das Projekt gestartet wurde ;-) Ich werde mich bemühen, daß bei ihnen vorhandene alte Bookmarks wenigstens zu einem Verweis auf die Neustruktur führen, und die gesuchten Inhalte für sie trotzdem leicht und schnell auffindbar sein werden.
Die eigentlich zu dieser Seite gehörenden Domains ag-intra.com, ag-intra.org und ag-intra.de werden von mir geschlossen bzw. gelöscht und unregistriert.

Anleitung - Eine Windows-Freigabe unter Linux mounten 
Copyright 2000 by Frank Gehde
Achtung: Diese Anleitung gilt für SuSE Linux 6.4 mit dem Tool smbmount in der Version 2.0.7 !

Ich hab auf meinem Windows Rechner eine Partition mit Grafikdateien, die ich oft benötige (irgendwelche Vorlagen oder Logos). Wie an anderer Stelle bereits erläutert, läßt sich ein FTP-Server unter Windows relativ leicht realisieren. Wie ich aber an anderer Stelle schon einmal erwähnte, ist der Betrieb eines Servers auf einem maskierten Rechner hinter einem Linux-Masquerading-Router ziemlich blöd zu realisieren wenn man den Kernel 2.2 verwendet (mit Kernel 2.4 wird das alles anders und ist dann sogar die Optimal-Konfiguration). 
Optimalerweise, stelle ich mir vor, daß ich mich per FTP auf meinem Linux-Router anmelde, und die gewünschten Dateien runterladen kann. Dazu müßte ich also meine Daten von dem Windows Rechner auf die Linux-Kiste kopieren, und dort den FTP-Daemon entsprechend einrichten. Die Idee find ich aber doof. Ich hätte zwar noch genügend Plattenplatz auf dem Linux-Rechner, aber trotzdem wären die Dateien dann redundant (also mehrfach vorhanden). Die Dateien auf dem Windowsrechner sind meine Arbeitsdateien. Bei jeder Änderung müßte ich die Dateien wieder auf die Linux-Kiste kopieren. Nein, so geht das nicht. Diese Lösung stinkt.
Fest steht für mich, daß ich in einem für FTP freigegebenen Verzeichnis ein Verzeichnis als Mountpoint einrichten will. Zuerst fiel mir NFS ein. NFS find ich aber aus verschiedenen Gründen nicht sooo prima. Abgesehen davon, daß ich persönlich bisher keinen Windows98 fähigen Client oder Server kenne.
Aber Samba müßte gehen. Ich will jetzt keinen Samba-Server auf meiner Linux-Kiste einrichten, aber soweit ich weiß, gibt es auch Client-Tools für das SMB-Protokoll, welches alle Windows-Rechner von Hause aus beherrschen.

Fangen wir erst einmal mit der Windows Konfiguration an. Wenn Sie im Windows-Explorer einen Ordner mit der Maus markieren, und dann mit der rechten Maustaste das Kontextmenü aufrufen, müßte dort ein Eintrag "Freigabe" vorhanden sein. Ist er nicht? Dann lösen wir dieses erste mögliche Problem.

Freigaben unter Windows98 aktivieren: Sehen Sie in der Baumdarstellung des Windows-Explorers etwas weiter unten nach, und wählen Sie dort Systemsteuerung an. Rechts finden Sie in der Liste jetzt den Eintrag Netzwerk. Doppelklicken Sie darauf. Unterhalb der Ausklappbox zur primären Netzwerkanmeldung finden Sie einen Button "Datei- und Druckerfreigabe ...". Drücken Sie darauf. Sie haben in der erscheinenden Dialogbox die Möglichkeit zwei Haken zu setzten. Setzen Sie nur den Haken "Anderen benutzern soll der Zugriff auf meine Dateien ermöglicht werden können".
Verlassen Sie den Dialog, und gehen Sie in den Reitern des Netzwerkdialoges auf den Punkt "Zugriffssteuerung". Setzen Sie dort die Option "Zugriffssteuerung auf Freigabeebene". Wenn Sie die Dialoge jetzt verlassen müssen Sie ggf. die Win98 CD noch einmal einlegen und anschließend den Rechner neu starten. Tun Sie das. Wenn Sie jetzt wie oben beschrieben das Kontextmenü eines Ordners öffnen, finden Sie dort auch den Eintrag "Freigabe".

Im Kontextmenü taucht jetzt also die Option Freigabe auf. In meinem Fall will ich eine ganze Partition freigeben, also gehe ich im Windows-Explorer auf das entsprechende Laufwerk und wähle den Punkt "Freigabe" im Kontextmenü aus.
Die Freigabe wird aktiviert durch das Wählen der Option "Freigeben als:". Nun tragen wir einen beliebigen Freigabenamen ein. Diesen Namen verwenden wir nachher auch unter Linux zum Mounten dieser Partition. Wählen Sie deshalb einen prägnanten, aber kurzen Namen. Ich nehme "graphics". Beim Zugriffstyp wähle ich jetzt erst einmal "Schreibgeschützt" (Das können Sie nach Ihren Wünschen ändern wie Sie wollen. Da ich ja nur per FTP Daten ziehen will, ist dies aus Sicherheitsgründen für mich jedenfalls ersteinmal ausreichend). Als Kennwort für den Schreibschutz-Zugriff gebe ich testweise erst einmal "hansi" ein.
Damit ist die Windows seitige Konfiguration abgeschlossen (Das war ja nun pippi-einfach).

Unter Linux setzen wir jetzt einfach mal voraus, daß Sie SuSE Linux 6.4 haben, und dort das Samba-Paket installiert ist (andere Distributionen und Versionen gehen möglicherweise auch, sind aber hier nicht getestet). Wenn nicht installieren Sie das Paket erstmal nach. Außerdem setze ich voraus, daß Ihr Linuxrechner mit dem Windowsrechner vernetzt ist. Und zwar korrekt.
Um uns die Dinge zu erleichtern, passen wir erst einmal die Datei /etc/hosts an (falls Sie dies nicht irgendwann schon einmal gemacht haben, was sehr sinnvoll wäre). Dort tragen wir die IP-Adressen der Rechner im privaten Netz und deren Namen ein. Bei mir sieht das etwa so aus (Auszug):

192.168.100.20   win.haus.test     win
192.168.100.100  keeper.haus.test  keeper

Dabei heißt mein Windows Rechner "win", und die Linux-Kiste heißt "keeper" (die domain "haus.test" rundet nur einige Konfigurationen ab, ist aber sonst völlig belanglos. .testist übrigens gemäß den RFC konform, um nicht existente Domainnamen trotzdem im privaten Netz verwenden zu können). Um die Netzwerkverbindung zu testen kann ich also "ping win" schreiben anstatt "ping 192.168.100.20". Und um Samba zu nutzen kann ich den Rechner nun auch als "win" ansprechen.

Um zu testen, ob wir den Windows Rechner über das SMB-Protokoll ansprechen können, und das soeben freigegebene Laufwerk "graphics" sehen können, nutzen wir den ersten Samaba-Client "smbclient". Dazu geben wir ein

smbclient -L win -N

Darauf erhalten wir etwa folgende Ausgabe:

Sharename   Type  Comment
---------   ----  -------
GRAPHICS    Disk

Server        Comment
---------     -------
WIN           mein win rechner

Workgroup     Master
---------     ------

Prima. Linux kann den Rechner sehen. Außerdem kann er die Freigabe "graphics" sehen. Der nächste Schritt, ist der manuelle Zugriff darauf mit dem "smbclient" um zu testen, ob wir auch auf die Dateien Zugriff haben. Dazu geben wir ein

smbclient //win/graphics

Bei der anschließenden Passwortabfrage gebe ich "hansi" ein, wie ich es oben erwähnte. Nun sehen wir unter Linux ein neues Prompt

smb: \>

um nun mal das Verzeichnis des Windows-Laufwerkes aufzulisten geben wir an diesem Prompt

ls

ein. Cool. Alles zu sehen, was zu sehen sein müßte. Wechseln wir nun in ein Unterverzeichnis, zB mit

cd logos

und führen wieder ein ls aus. Das klappt ja wie geschmiert. Wie kopiere ich denn nun beispielsweise eine Datei auf den Linuxrechner ? Da verhält sich smbclient ganz ähnlich wie der ftp-Befehl. Um eine Datei auf den Linux Rechner zu laden geben wir am SMB-Promt zB folgendes ein:

get intranet_logo.jpg

Und schon wird diese Datei in das Verzeichnis kopiert, in dem wir grade standen, als wir den smbclient gestartet haben. Um den smb-Client wieder zu verlassen können wir den Befehl

exit

eingeben. So, damit haben wir von dem Linux Rechner erfolgreich auf ein Verzeichnis oder ein Laufwerk von einem Windows-Rechner zugegriffen. Ist schon toll, oder ? Linux kann wirklich fast alles ! *ggg*

Kommen wir nun zum aufregenden Teil. Wir mounten diese Freigabe jetzt so, daß das freigegebene Laufwerk ein Teil unseres Linux Dateisystems wird (mit gewissen, zunächst zu vernachlässigenden Einschränkungen).
Noch eine Voraussetzung, die mir gerade einfällt. Ihr Kernel muß das "smbfs"-Filesystem unterstützen. Bei mir ist das der Fall, wenn bei Ihnen nicht, kümmern Sie sich jetzt darum.

Also irgendwie hab ich einige Anleitungen zum smbmount gelesen, und keines der Beispiele funktionierte. Und zwar hauptsächlich wegen Syntax-Problemen. Man muß beachten, daß es mindest zwei verscheidenesmbmountImplementationen gibt. Die, die mit Samaba ausgeliefert wird, und die die mit dem smbfs-Filesystem ausgeliefert wird. Ich hab etwas herumprobiert, und unter meine SuSE 6.4 mit installiertem Samaba-Paket und kompilierter smbfs-Filesystem Unterstützung im Kernel funktionierte das folgende:

smbmount //win/graphics /home/frankie/graphics

(Laut Hinweisen, der Man-Page und SuSE ist das falsch und sollte nicht gehen. Die richtige Variante funtioniert direkt über den mount-Befehl. Das hier gezeigte geht aber in der smbmount Version 2.0.7 trotzdem). Das "graphics" Verzeichnis in meinem gewöhnlichen Homeverzeichnis hatte ich vorher mit mkdir graphics als User frankie(sagte ich schon, daß ich den ganzen anderen Kram als root erledige ?) angelegt. Nach diesem Befehl wurde das Freigabepasswort abgefragt, und danach war das entsprechende Windows-Laufwerk wunderbar in meine Linux-Verzeichnisstruktur eingebunden (mit den Einschränkungen, daß Dateirechte anders funktionieren).
Um das ganze zu verfeinern, un-mounten wir das share jetzt wieder. Dazu geben wir den ganz simplen umount-Befehl ein

umount /home/frankie/graphics

So. Wir können also mounten und unmounten. Daß wir das Passwort für die Freigabe von Hand eintragen müßen ist aber doof. Mit den Optionen kommen wir weiter:

smbmount //win/graphics /home/frankie/graphics -o password=hansi

So würde es schon automatisch gehen. Aber wir sehen mal, was wir noch an Parametern gebrauchen können. Da ich das neue Laufwerk ja in mein privates home-directory mounte, könnte ich gut auch noch (als root) angeben, daß das gemountete Verzeichnis dem Nutzer frankie und seiner gruppe gehört. Außerdem bleibe ich noch dabei, daß ich das Laufwer ReadOnly (ro) mounte. Die resultierende Parameterzeile sieht so aus (für weitere Optionen sehen sie auch unter linux mitman smbmount nach):

smbmount //win/graphics /home/frankie/graphics -o password=hansi,uid=512,gid=100,ro

Lange Zeile (und zwar genau eine Zeile, falls Ihr Browser das jetzt umbricht), aber nu ist das Windows Laufwerk für meine Zwecke unter Linux optimal gemounted. Wechseln Sie unter Linux ruhig mal in das Verzeichnis und stöbern Sie darin rum. Echtes Linux Feeling, oder was? Obwohl es ein Teil der Windows-Festplatte ist.
Achtung: Übrigens habe ich festgestellt, daß es Probleme beim Herunterfahren gibt, wenn das Remote-System noch gemounted ist. Es sollte daher vor dem Herunterfahren unmounted werden. Am besten man fügt in das Wirrwar der Bootscripte etwas entsprechendes ein. Ich habe dafür jetzt folgende Scripte für den Bootablauf geschrieben (war mehr gefummel als ich dachte, weil sich zB die smbmount Version 2.0.7 signifikant von 2.0.5 unterscheidet).

Also, zuerst habe ich ein Skript geschrieben, welches konkret das graphics-Share mounted. Das Verzeichnis, in welches gemounted wird, wird dabei erst angelegt. Vorher wird überprüft, ob das Verzeichnis schon existiert (Das heißt, falls es jetzt aufgrund unserer Versuche noch existiert, müßen wir es erstmal löschen). Sehen wir uns erstmal das Skript namens "mountgraf" an:

#!/bin/sh
# mounten des Windows-Shares "graphics"
if test -d /home/frankie/graphics
then
   echo "Das Windows-Share GRAPHICS ist bereits gemounted"
   exit 1
else
   mkdir /home/frankie/graphics
   chown frankie.users /home/frankie/graphics
      smbmount //win/graphics /home/frankie/graphics -o password=hansi,uid=512,gid=100,ro #achtung, ist eine! zeile
   if test $? -ne 0
   then
      rmdir /home/frankie/graphics
      echo "Windows-Share mounten fehlgeschlagen"
      exit 1
   else
      exit 0
   fi
fi

Der erste Test, sieht nach ob das Verzeichnis graphics existiert. Wenn ja, dann sagt das Programm, daß dem so ist, und tut nichts weiter. Existiert das Verzeichnis nicht, wird es angelegt und dem User frankiemit chown übereignet (ich hatte es mit "su" versucht, aber irgendwie funktionierte es nicht). Dann wird das bekannte smbmount-Kommando ausgeführt. Nun wird der Rückgabewert geprüft, ob das mounten erfolgreich war. War dies nicht der Fall, wird das Verzeichnis graphicsgleich wieder gelöscht, damit es zu keinen zukünftigen Inkonsistenzen kommt.

Als nächstes habe ich das folgende Skript namens "umountgraf" zum unmounten geschrieben:

#!/bin/sh
# Dieses Skript unmounted das Windows-Share graphics wieder

if test -d /home/frankie/graphics
then
   umount /home/frankie/graphics
   rmdir /home/frankie/graphics
   exit 0
else
   exit 1
fi

Das ist relativ einfach. Wenn das Directory graphics existiert, dann ist auch das Share gemounted. Dieses wird also erst unmounted, und danach wird das Verzeichnis gelöscht. Andernfalls passiert nix weiter.

Wie ich schon sagte, gab es insbesondere beim Herunterfahren Probleme. Daher wollen wir gerne beim Herunterfahren automatisch das umountgraf Skript ausführen. Die beiden eben genannten Skripte sind überigens unter /root/script/ gespeichert.

#!/bin/sh
#  Dieses Script beendet Windows-Shares und nutzt dabei
#  /root/script/umountgraf

# Rueckgabewert fuer echo (in rc.config festgelegt)
return=$rc_done
case "$1" in
 start)
  echo -n "Kein automatisches mounten von Windows-Shares"
  ;;
 stop)
  echo -n "Shutting down Window-Share-Mounting: "
  /root/script/umountgraf 
  echo -e "$return"
  ;;
 status)
  echo -n "Windows-Shares: Keine Information verfügbar"
  ;;
 *)
  echo "Usage: $0 {start|stop|status}"
  exit 1
  ;;
esac
test "$return" = "$rc_done" || exit 1
exit 0

Eines meiner üblichen Bootscripte, welches im Verzeichnis /sbin/init.d/gespeichert wird. Der Scriptname lautet "wingraf". Tatsächlich sind die Start und Statusabschnitte nicht vorhanden. Das liegt daran, daß ich ja nicht weiß, ob der Windows Rechner tatsächlich läuft, wenn ich den Linux-Rechner hochfahre. Wichtiger ist nur die Stop-Sequenz, um eben die Probleme beim Herunterfahren zu vermeiden. Um dafür zu sorgen, daß dieses Script auch ausgeführt wird, der Rechner heruntergefahren wird, muß ich im Unterverzeichnis rc2.dmit

ln -s /sbin/init.d/wingraf K08wingraf

noch einen Link anlegen. Er bekommt eine niedrige Nummer, damit er beim Herunterfahren als allererstes ausgeführt wird.
(Wer will kann für unser mountgraf-Script auch noch einen symbolischen Link in /usr/sbin anlegen, um den persönlichen Win-mount Befehl immer im pfad zu haben)

Jetzt kommt der Test, ob das ganze auch mit FTP funktioniert. Dazu muß sichergestellt sein, daß der Ftp-Server läuft. Dies steht in der Datei /etc/inetd.conf. Der FTP-Server darf nicht auskommentiert sein.
Ich starte also auf dem Windows Rechner (was so ziemlich das gleiche sein sollte, wie auf meinem Bürorechner) ein FTP Programm. Ich wähle mich als User Frankie entsprechend auf meine IP ein. Und siehe da ... das gewünschte Verzeichnis ist vorhanden. Nicht nur das, ich habe vollen Zugriff darauf und kann Dateien herunterladen.

Ohne Kernel 2.4 (DNAT), ohne NFS und ohne redundante Daten kann ich also über meinen Linux-Router und FTP von außen prima auf die Daten des Windowsrechners zugreifen. Dies ist nur eine der unzähligen Varianten, aber sie war schnell einzurichten, und sie funktioniert !


zurück zur Linux Übersicht

Copyright 2000 by Frank Gehde