|
Samba, 2. AuflageVon Jay Ts, Robert Eckstein, and David Collier-Brown2. Auflage, August 2003 O'Reilly Verlag, ISBN: 3-89721-359-1 www.oreilly.de/catalog/samba2ger/
Dieses Buch ist unter der GNU Free Documentation License (FDL) erschienen.
Bitte beachten Sie den
Text der GNU FDL.
|
|
Kapitel 5
Unix-Clients
In Kapitel 3 haben wir Ihnen gezeigt, wie Sie Windows-Systeme für den Zugriff auf freigegebene Ressourcen sowohl auf Windows- als auch auf Samba-Servern konfigurieren. Dies hat Ihnen vermutlich eine völlig neue Rechnerwelt eröffnet - eine, in der Sie jedes Mal ein Windows-System starten müssen, wenn Sie eine Datei zwischen Unix und Windows kopieren wollen! In diesem Kapitel werden wir Ihnen die »andere Seite« präsentieren - wie Sie von Ihrem bevorzugten Unix-System aus auf SMB-Freigaben zugreifen.
Es gibt drei Möglichkeiten, von Unix aus auf SMB-Ressourcen zuzugreifen, je nachdem, was für eine Version von Unix Sie verwenden. Ein Programm namens smbclient, das in der Samba-Distribution enthalten ist, kann benutzt werden, um eine Verbindung zu einer Freigabe im Netzwerk herzustellen. Das funktioniert ungefähr auf die gleiche Weise wie ftp beim Übertragen von Dateien von oder zu einer FTP-Site.
Falls Sie auf Ihrem System Linux betreiben, können Sie das smbfs-Dateisystem einsetzen, um SMB-Freigaben wie eine Plattenpartition oder ein NFS-Dateisystem direkt auf Ihr Linux-Dateisystem aufzusetzen (zu mounten). Alle Programme, die auf dem Linux-System laufen, können dann auf die SMB-Freigaben zugreifen und sie manipulieren: Kommando-Shells, grafische Desktop-Programme und Anwendungssoftware.
Auf einigen BSD-basierten Systemen, einschließlich Mac OS X, können zwei Dienstprogramme namens smbutil und mount_smbfs verwendet werden, um SMB-Server abzufragen und Freigaben zu mounten.
Bei anderen Unix-Varianten kann smbsh gebräuchliche Shell-Befehle wie cd, ls, mv, wc und grep aktivieren, um auf Dateien und Verzeichnisse auf SMB-Freigaben zuzugreifen und diese zu bearbeiten. Dies erweitert im Prinzip den Wirkungsbereich der Unix-Shell und der Dienstprogramme über das Unix-Dateisystem hinaus in das SMB-Netzwerk.
Alle Unix-Clients können auf Freigaben zugreifen, die von Windows-Systemen oder Samba-Servern angeboten werden. Wir haben Ihnen bereits gezeigt, wie Sie eine Freigabe auf einem Samba-Server einrichten, und könnten dies als Beispiel für die weiteren Ausführungen nutzen. Es ist aber viel lustiger, die Unix-Clients mit Freigaben zu nutzen, die von Windows-Systemen angeboten werden. Bevor wir also die Unix-Clients genauer betrachten, werden wir Ihnen schnell zeigen, wie Sie Dateifreigaben auf Windows 95/98/Me- sowie auf Windows NT/2000/XP-Systemen einrichten.
Dateien unter Windows 95/98/Me freigeben
Wenn Sie Dateien unter Windows 95/98/Me freigeben, können Sie Benutzer auf zwei verschiedene Arten authentifizieren. Standard ist Sicherheit auf Freigabeebene. Diese Methode ist einfach zu einzusetzen. Sie ist jedoch nicht allzu sicher. Außerdem verlangt sie von den Benutzern, Kennwörter einzugeben, wenn diese sich an einer Freigabe anmelden. Ein besseres Sicherheitsmodell bietet Sicherheit auf Benutzerebene. Diese kann verwendet werden, wenn Sie die Benutzerauthentifizierung in Ihrem Netzwerk durch einen Samba- oder einen Windows NT/2000-Server erledigen lassen.
Um die Art der Zugriffskontrolle für Ihr System zu konfigurieren, öffnen Sie die Systemsteuerung, doppelklicken auf das Netzwerk-Symbol und klicken dann auf die Registerkarte Zugriffssteuerung. Sie sollten nun den Dialog aus Abbildung 5-1 sehen.
Klicken Sie je nach gewünschter Sicherheitsstufe auf den Radio-Button Zugriffssteuerung auf Freigabeebene oder Zugriffssteuerung auf Benutzerebene. Wenn Sie Zugriffssteuerung auf Benutzerebene auswählen, müssen Sie außerdem den Namen Ihrer Arbeitsgruppe oder Windows NT-Domäne angeben. Starten Sie anschließend den Rechner neu.
Um einen Ordner freizugeben, klicken Sie mit der rechten Maustaste auf sein Symbol und wählen Freigabe... Dies öffnet die Registerkarte Freigabe des Eigenschaften-Dialogs dieses Ordners. Klicken Sie auf den Radio-Button Freigeben als: und setzen Sie einen Namen für die Freigabe (vorgegeben ist der Name des Ordners) sowie eine Beschreibung ein, die den Benutzern angezeigt werden soll. Falls Sie nicht wollen, dass die Freigabe in der Netzwerkumgebung der anderen Windows-Clients zu sehen ist, wählen Sie einen Namen, der mit einem Dollar-Zeichen endet ($).
Abbildung 5-2 zeigt, wie die Freigabe-Registerkarte des Eigenschaften-Dialogs des Ordners aussieht, wenn Sie Sicherheit auf Freigabeebene verwenden. Die Sicherheitseinstellungen sind sehr einfach. Sie können einen Radio-Button für schreibgeschützten oder vollständigen (Lesen/Schreiben) Zugriff wählen oder die Zugriffsrechte des Benutzers (entweder schreibgeschützt oder Lesen/Schreiben) in Abhängigkeit vom verwendeten Kennwort einstellen. Entsprechend Ihrer Auswahl werden Sie aufgefordert, ein oder mehrere Kennwörter für die Freigabe zuzuweisen.
Ist Ihr System mit Sicherheit auf Benutzerebene konfiguriert, sieht die Registerkarte Freigabe des Eigenschaften-Dialogs des Ordners aus wie in Abbildung 5-3. Wie Sie sehen können, haben wir eine Freigabe namens DATA erzeugt und dann über Hinzufügen... Zugriffsrechte zugewiesen, die den schreibgeschützten Zugriff für alle Benutzer der Domäne sowie vollständigen Zugriff für jay gewähren.
Wenn Sie die Einstellungen für die Freigabe getroffen haben, klicken Sie auf den OK-Button. Die Freigabe wird den Benutzern auf den Netzwerk-Clients zur Verfügung gestellt. Sie können die Freigabe in der Netzwerkumgebung der Windows-Clients im Netzwerk sehen, es sei denn, der Name der Freigabe endet mit einem Dollar-Zeichen. Außerdem können Sie nun die in diesem Kapitel beschriebenen Unix-Clients verwenden, um eine Verbindung zu der Freigabe herzustellen.
Dateien unter Windows NT/2000/XP freigeben
Um eine Dateifreigabe unter Windows NT/2000/XP zu erzeugen, müssen Sie sich zuerst als ein Mitglied der Gruppen der Administratoren, Hauptbenutzer oder Server-Operatoren am System anmelden. Klicken Sie mit der rechten Maustaste auf einen Ordner, den Sie freigeben wollen, und klicken Sie im sich öffnenden Pop-up-Menü auf Freigabe... Die Registerkarte Freigabe des Eigenschaften-Dialogs des Ordners erscheint (siehe Abbildung 5-4). Klicken Sie auf den Radio-Button Diesen Ordner freigeben.
Freigabename: ist standardmäßig der Name des Ordners; Sie können den Namen jedoch ändern. Ein Grund, einen anderen Namen für die Freigabe zu verwenden, wäre, dass die Freigabe nicht in Suchlisten auftauchen soll (die beispielsweise von der Netzwerkumgebung angezeigt werden). Dazu lassen Sie den Freigabenamen mit einem Dollar-Zeichen enden ($). Sie können im Kommentar:-Bereich eine Beschreibung der Freigabe angeben. Die Beschreibung ist für die Benutzer der Netzwerk-Clients sichtbar und hilft ihnen dabei, den Inhalt der Freigabe zu verstehen.
Durch Anklicken des Berechtigungen-Buttons können Sie auf Benutzerbasis Zugriffsrechte für die Freigabe festlegen. Dies entspricht der Sicherheit auf Benutzerebene unter Windows 95/98/Me. Microsoft empfiehlt für Windows NT/2000/XP, die Freigaberechte so einzustellen, dass allen Benutzern voller Zugriff gewährt wird, wobei die Rechte im Dateisystem auf Dateibasis mit Hilfe von Zugriffskontrolllisten (ACLs) gesteuert werden. Die den Netzwerk-Clients tatsächlich gewährten Rechte stellen eine Kombination aus den Freigaberechten und den Dateizugriffsrechten dar. Um die ACL für den Ordner zu bearbeiten, klicken Sie auf das Register Sicherheitseinstellungen. Nähere Informationen über ACLs finden Sie im Abschnitt »Windows NT/2000/XP-ACLs« in Kapitel 8.
Sie können die Zahl der Benutzer begrenzen, die sich gleichzeitig an einer Freigabe anmelden dürfen. Dazu verwenden Sie den Radio-Button Benutzerbegrenzung:. Der Button Neue Freigabe erlaubt es Ihnen, mehrere Dateifreigaben für den gleichen Ordner zu erzeugen, die jeweils ihren eigenen Namen, Kommentar, ihre eigene Benutzerbegrenzung sowie andere Parameter besitzen.
Wenn Sie fertig sind, klicken Sie auf den OK-Button. Der Ordner steht nun den anderen Clients im Netzwerk zur Verfügung.
smbclient
Das Samba-Team stellt smbclient als Grundbestandteil der Samba-Suite bereit. Auf den ersten Blick scheint es sich dabei nur um eine primitive Schnittstelle zum SMB-Netzwerk zu handeln, tatsächlich ist smbclient jedoch ein sehr vielseitiges Werkzeug. Es kann eingesetzt werden, um Freigaben auf dem Server zu durchsuchen, Konfigurationen zu testen, Fehler zu suchen, auf freigegebene Drucker zuzugreifen, freigegebene Daten zu sichern und administrative Aufgaben in Shell-Skripten zu automatisieren. Und im Gegensatz zu smbfs und smbsh funktioniert smbclient auf allen Unix-Varianten, die Samba unterstützen.
In diesem Kapitel konzentrieren wir uns vor allem auf smbclient als interaktive Shell, das heißt, wir verwenden seine ftp-artigen Befehle, um auf freigegebene Verzeichnisse im Netzwerk zuzugreifen. Die Verwendung von smbclient für den Zugriff auf Drucker und die Durchführung von Backups wird in Kapitel 10 behandelt.
Eine vollständige Referenz zu smbclient finden Sie in Anhang C.
Dienste auflisten
Die Option -L kann zusammen mit smbclient verwendet werden, um die Ressourcen auf einem Computer aufzulisten. Angenommen, der Samba-Server ist so konfiguriert, dass er die Rolle des Hauptsuchdiensts übernimmt. Wir können dann eine Liste der Computer in der Domäne oder Arbeitsgruppe beziehen:
$ smbclient -L toltec added interface ip=172.16.1.1 bcast=172.16.1.255 nmask=255.255.255.0 Password: Domain=[METRAN] OS=[Unix] Server=[Samba 2.2.5] Sharename Type Comment --------- ---- ------- test Disk Bitte nur zu Testzwecken verwenden IPC$ IPC IPC Service (Samba 2.2.5) ADMIN$ Disk IPC Service (Samba 2.2.5) Server Comment --------- ------- MAYA Windows 98 MIXTEC Samba 2.2.5 TOLTEC Samba 2.2.5 ZAPOTEC Workgroup Master --------- ------- METRAN TOLTECIn der Spalte mit der Bezeichnung »Server« stehen maya, mixtec und zapotec zusammen mit toltec, dem Samba-Server. Die Dienste auf toltec sind unter »Sharename« aufgeführt. Die Freigaben IPC$ und ADMIN$ sind Standard-Windows-Dienste, die der Netzwerkkommunikation sowie administrativen Aufgaben dienen. Bei test handelt es sich um das Verzeichnis, das wir in Kapitel 2 als Freigabe angelegt haben.
Nachdem Sie nun die Namen der Computer in der Domäne erfahren haben, können Sie sich die Dienste auf einem beliebigen dieser Computer ausgeben lassen, wie beispielsweise die von maya, einer Windows 98-Workstation, angebotenen Dienste:
$ smbclient -L maya added interface ip=172.16.1.1 bcast=172.16.1.255 nmask=255.255.255.0 Password: Sharename Type Comment --------- ---- ------- PRINTER$ Disk HP Printer HP 932C auf Maya D Disk D: auf Maya E Disk E: auf Maya ADMIN$ Disk IPC$ IPC Remote Inter Process Communication Server Comment --------- ------- Workgroup Master --------- -------Ein freigegebener Drucker ist an maya angeschlossen, deshalb sehen wir den administrativen Dienst PRINTER$ sowie die Freigabe HP für den Drucker selbst. Ebenfalls auf maya befinden sich die Freigaben D und E, die über das Netzwerk den Zugriff auf mayas Laufwerke D: und E: erlauben. Es ist normal, dass die Abschnitte Server und Workgroup leer sind, wenn die Dienste auf einem Windows-Client aufgelistet werden.
smbclient authentifizieren
Wie jeder andere SMB-Client muss auch smbclient einen Benutzernamen und ein Kennwort angeben, wenn es sich in einer Domänenumgebung authentifiziert oder einen Samba-Server anspricht, der mit Sicherheit auf Benutzerebene eingerichtet wurde. In einer Arbeitsgruppenumgebung ist zumindest ein Kennwort nötig, wenn eine Verbindung zu einer mit Kennwort geschützten Ressource aufgenommen wird.
Standardmäßig verwendet smbclient den Benutzernamen des ausführenden Benutzers und fragt dann nach einem Kennwort. Falls Sie smbclient oft verwenden, haben Sie vermutlich irgendwann keine Lust mehr, jedes Mal Ihr Kennwort eingeben zu müssen.
smbclient unterstützt einige alternative Methoden zum Angeben von Benutzernamen und Kennwort. Das Kennwort kann auf der Kommandozeile eingegeben werden:
$ smbclient //maya/e jayspasswordSowohl der Benutzername als auch das Kennwort können ebenfalls mit Hilfe der Option -U angegeben werden, wobei Benutzername und Kennwort durch ein Prozentzeichen (%) voneinander getrennt werden:
$ smbclient //maya/e -U kelly%kellyskennwortDiese Methode ist nützlich, wenn Sie an Ihrem System unter einem anderen Zugang angemeldet sind, der keinen Zugang auf Samba besitzt, oder wenn Sie testen wollen, wie Ihre Konfiguration einen anderen Benutzer behandelt. Bei beiden Methoden können Sie vermeiden, jedes Mal den Benutzernamen und/oder das Kennwort eingeben zu müssen, wenn Sie smbclient ausführen, indem Sie einen Alias für den Befehl erzeugen oder eine Shell-Funktion oder ein Shell-Skript einsetzen. Mit der bash-Shell ist es zum Beispiel möglich, eine solche Funktion zu definieren:
smbcl( ) { smbclient $* -U jay%jayskennwort }Fügen Sie die Definition dem Start-Skript der Shell hinzu (für die bash wäre dies ~/.bash_profile), beeinflusst die Definition alle folgenden Shell-Sitzungen.
Eine andere Methode, die verwendet werden kann, um sowohl den Benutzernamen als auch das Kennwort anzugeben, besteht darin, die Umgebungsvariablen USER und PASSWD zu setzen. Sie setzen die Umgebungsvariable USER entweder mit Hilfe des Formats benutzername%kennwort, oder Sie setzen die Umgebungsvariable USER auf den Benutzernamen und PASSWD auf das Kennwort des Benutzers.
Es ist außerdem möglich, eine Credentials-Datei zu erzeugen, die den Benutzernamen auf der ersten Zeile und das Kennwort auf der zweiten Zeile enthält:
username = jay password = jayskennwortAnschließend wird smbclient mit der Option -A aufgerufen, mit der der Name der Datei festgelegt wird:
$ smbclient //maya/e -A ~/.smbpwVon den in diesem Abschnitt beschriebenen Methoden ist nur eine wirklich sicher. Das ist die Standardmethode, bei der smbclient nach dem Kennwort fragen darf und das Kennwort dann ohne Wiedergabe auf dem Bildschirm eingetippt wird.
Wenn Sicherheit für Sie eine gewisse Wichtigkeit besitzt, sollten Sie es auf jeden Fall vermeiden, Ihr Kennwort auf der Kommandozeile anzugeben, da es sowohl für diejenigen, die Ihnen zufällig beim Tippen über die Schulter blicken, als auch jemanden, der die Befehls-History Ihrer Shell durchsucht, möglich ist, Ihr Kennwort auszuspähen.
Falls Sie Ihr Samba-Kennwort in einer Credentials-Datei, einer Shell-Startdatei oder einem Shell-Skript aufbewahren, müssen Sie sicherstellen, dass Dateizugriffsrechte es anderen Benutzern verbieten, die Datei zu lesen oder zu schreiben. (Benutzen Sie den Oktalwert 0600 für die Zugriffsrechte.) Sicherheitsexperten legen ihre Kennwörter niemals in Dateien ab, die Nicht-root-Benutzern gehören oder auf die von jemand anderem als dem Superuser zugegriffen werden kann. Als Teil ihrer Sicherheitsrichtlinien verbieten einige Einrichtungen das Speichern von Kennwörtern in Dateien. Sie sollten deshalb zuerst die Regeln prüfen, bevor Sie diese Methode anwenden.
Die Authentifizierungsmethode, die die Umgebungsvariablen USER und PASSWD verwendet, ist nicht sicherer. Umgebungsvariablen werden üblicherweise entweder auf der Kommandozeile oder in einer oder mehreren der Startdateien der Shell gesetzt. Diese Methode weist also die bereits genannten Schwachstellen auf. Darüber hinaus besitzt jedes Programm, das vom Benutzer ausgeführt wird, Zugriff auf die Umgebungsvariablen der Shell, wodurch ein Trojaner-Angriff auf die Variable PASSWD wirklich einfach gemacht wird!
Eine interaktive smbclient-Sitzung
Ein gebräuchlicher Anwendungsfall für smbclient ist sein Einsatz als ftp-artige Shell zum Zugriff auf SMB-Ressourcen im Netzwerk. Um eine Sitzung zu beginnen, muss smbclient auf der Kommandozeile die UNC einer Ressource im Netzwerk geliefert werden (die Sie mit Hilfe der Option -L ermitteln können):
$ smbclient //maya/e added interface ip=172.16.1.3 bcast=172.16.1.255 nmask=255.255.255.0 Password: smb: \>Schrägstriche werden von smbclient für die UNC der Freigabe akzeptiert, wodurch sich das Eingeben der UNC auf der Kommandozeile vereinfacht. Backslashes können ebenfalls benutzt werden. Sie müssen jedoch geschützt werden, es ist daher etwas aufwändiger, '\\maya\e' oder \\\\maya\\e einzutippen. Nach dem Anmelden an der Freigabe zeigt smbclient den smb: \>-Prompt und wartet auf die Eingabe eines Befehls. Die Befehle sind den Ihnen vertrauten Befehlen in ftp sehr ähnlich und gleichen in gewisser Weise auch Unix-Shell-Befehlen. Um eine Liste der smbclient-Befehle zu erhalten, verwenden Sie den Befehl help:
smb: \> help ls dir du lcd cd pwd get mget put mput rename more mask del open rm mkdir md rmdir rd prompt recurse translate lowercase print printmode queue cancel quit q exit newer archive tar blocksize tarmode setmode help ? history !Einige Befehle in der gezeigten Liste sind Synonyme für andere Befehle. So ist beispielsweise der Befehl ? ein Synonym für help. Sie können diesem Befehl den Namen eines anderen Befehls als Argument übergeben, um eine Zusammenfassung über die Funktionsweise des Befehls zu bekommen:
smb: \> ? ls HELP ls: <mask> list the contents of the current directoryDer Begriff <mask> bezieht sich auf ein Suchmuster, das üblicherweise in Unix-Shells und Dienstprogrammen zu finden ist. So listet zum Beispiel
smb: \> ls *doc ms-ProfPol-wp.doc A 131 Tue Dec 18 09:12:34 2002 smbclient.doc A 33969 Mon Dec 10 20:22:24 2002 smbmount.doc A 7759 Mon Dec 10 20:20:00 2002 48590 blocks of size 524288. 40443 blocks availablealle Dateien auf, die im aktuellen Verzeichnis auf dem entfernten System auf »doc« enden. Die erste Spalte in dem Listing zeigt den Dateinamen. Von links nach rechts folgen die MS-DOS-Attribute der Datei, die Größe und der Zeitpunkt der letzten Änderung.
Wie jedes andere Unix-Dienstprogramm besitzt auch smbclient ein Arbeitsverzeichnis auf dem lokalen Host. Außerdem besitzt es ein weiteres aktuelles Verzeichnis auf der entfernten SMB-Share. Bei smbclient wird der Befehl cd verwendet, um im entfernten System zu navigieren:
smb: \> cd trans smb: \trans\>Beachten Sie, wie die Änderung des Prompts das neue aktuelle Arbeitsverzeichnis anzeigt. Um auf dem lokalen System das aktuelle Verzeichnis zu wechseln, verwenden Sie den Befehl lcd:
smb: \trans\> lcd /u/snd the local directory is now /u/sndDie meisten der Befehle von smbclient dienen dazu, Operationen auf entfernten Dateien und Verzeichnissen auszuführen. Es gibt keinen Befehl zum Auflisten des Inhalts des lokalen Verzeichnisses. Allerdings erlaubt smbclient ein Shell-Escape. Jeder Befehl, dem ein Ausrufezeichen vorangestellt (!) ist, wird als Shell-Befehl interpretiert und in einer Subshell auf dem lokalen System ausgeführt. Ein Beispiel:
smb: \trans\> ! ls -l total 16 drwxrwxr-x 2 jay jay 4096 Jan 10 14:46 dr220-fet drwxrwxr-x 2 jay jay 4096 Sep 22 12:16 dr220-tube -rw-rw-r-- 1 jay jay 131 Jan 10 02:22 readme.txt drwxrwxr-x 7 jay jay 4096 Jan 10 02:19 xl1Dieser Befehl listet den Inhalt von /u/snd auf. Wenn smbclient-Befehle zum Arbeiten auf dem entfernten System und geschützte Shell-Befehle zum Arbeiten auf dem lokalen System verwendet werden, ist es möglich, Daten auf beiden Systemen zu manipulieren, ohne smbclient beenden oder ein anderes Shell-Fenster öffnen zu müssen.
Die Übertragung von Dateien wird mit Hilfe der Befehle get und put erledigt. Der get-Befehl überträgt eine einzelne Datei vom entfernten auf das lokale System. put wiederum kopiert eine Datei vom lokalen auf das entfernte System. Der folgende Befehl kopiert zum Beispiel die Datei readme.txt auf die SMB-Freigabe:
smb: \trans\> put readme.txt putting file readme.txt as \trans\readme.txt (127.9 kb/s) (average 10.7 kb/s)Im Gegensatz zu ftp kennt smbclient keine ascii- und binary-Befehle zum Einstellen des Typs der zu übertragenden Datei. Bevor Sie eine Textdatei von einem Unix-System auf ein Windows- oder Macintosh-System übertragen, sollten Sie daher den GNU-Befehl unix2dos einsetzen, um die Newlines in der Datei in der Weise neu zu formatieren, dass sie mit dem CRLF-Standard (Carriage Return Linefeed) funktionieren:
$ unix2dos text_file >text_file.txtAnschließend übertragen Sie die CRLF-formatierte Version. Nach dem Übertragen einer Textdatei von einem Windows- oder Macintosh-System nach Unix können Sie mit dem GNU-Befehl dos2unix die entgegengesetzte Operation ausführen:
$ dos2unix text_file.txt >text_fileUm mehr als eine Datei mit einem einzigen Befehl zu übertragen, verwenden Sie die Befehle mget und mput, die eine Liste mit Dateinamen auf der Kommandozeile akzeptieren. Die Liste kann angegeben werden, indem Sie die durch Leerzeichen getrennten Dateinamen auf der Kommandozeile eintippen. Es ist auch möglich, wie in Unix-Shell-Befehlen eine Gruppe von Dateien mit einem Muster festzulegen. Der Befehl:
smb: \trans\> mget plain/*kopiert alle Dateien aus dem Verzeichnis plain auf der SMB-Freigabe in das aktuelle Verzeichnis auf dem lokalen System. Standardmäßig fragt smbclient bei jeder Datei, ob Sie sie kopieren wollen:
smb: \trans\> mget plain/* Get file tomm.wav? n Get file toml.wav? n Get file tomh.wav? n Get file snare.wav? n Get file rim.wav? n Get file handclap.wav? n Get file bassdrum.wav? nFalls Sie sich sicher sind, dass Sie alle Dateien kopieren wollen, können Sie diese Nachfragen mit dem Befehl prompt deaktivieren:
smb: \trans\> prompt prompting is now offDurch die Angabe eines Verzeichnisnamens kopiert smbclient standardmäßig nicht den Inhalt des Verzeichnisses. Um den gesamten Inhalt eines Verzeichnisses zu übertragen, das Sie bei den Befehlen mput oder mget festgelegt haben, müssen Sie zuerst den Befehl recurse einsetzen:
smb: \trans\> recurse directory recursion is now onWenn Sie nun alles mit den Befehlen prompt und recurse eingerichtet haben, können Sie folgendermaßen ein Verzeichnis kopieren:
smb: \trans\> mget acc getting file tomm.wav of size 55494 as tomm.wav (2580.6 kb/s) (average 2087.3 kb/s) getting file toml.wav of size 57220 as toml.wav (2660.9 kb/s) (average 2167.6 kb/s) getting file tomh.wav of size 55936 as tomh.wav (2601.2 kb/s) (average 2220.8 kb/s) getting file snare.wav of size 22132 as snare.wav (1200.7 kb/s) (average 2123.7 kb/s) getting file rim.wav of size 8314 as rim.wav (1623.8 kb/s) (average 2110.8 kb/s) getting file handclap.wav of size 14180 as handclap.wav (1978.2 kb/s) (average 2106.2 kb/s) getting file bassdrum.wav of size 6950 as bassdrum.wav (2262.3 kb/s) (average 2108.5 kb/s)Die Verzeichnisrekursion gilt für alle Befehle. Wird ein ls-Befehl ausgeführt, während die Verzeichnisrekursion aktiviert ist, werden alle Dateien in dem Verzeichnisbaum aufgeführt. Um die Verzeichnisrekursion wieder zu deaktivieren, geben Sie einfach den Befehl noch einmal ein. Gleichzeitig wollen Sie vermutlich das Nachfrageverhalten wieder in seinen ursprünglichen Zustand zurückversetzen:
smb: \trans\> recurse directory recursion is now off smb: \trans\> prompt prompting is now onEs gibt noch weitere smbclient-Befehle, die Sie nützlich finden werden. Der Befehl mkdir kann ein Verzeichnis anlegen, rmdir löscht ein Verzeichnis, rm löscht eine Datei, und rename ändert den Namen einer Datei. Diese Befehle verhalten sich ähnlich wie ihre Gegenstücke auf der Unix-Shell. Anhang C enthält eine vollständige Referenz zu smbclient und seinem Befehlssatz.
Um smbclient zu beenden, verwenden Sie die Befehle exit oder quit:
smb: \trans\> quitMit smbclient programmieren
Die Option -c von smbclient erlaubt die Übergabe einer Liste mit Befehlen auf der Kommandozeile. Um die Datei \\maya\e\trans\readme.txt nach /u/snd/readme.txt zu kopieren, könnten wir diesen Befehl verwenden:
$ smbclient //maya/e -c "lcd /u/snd; cd trans; get readme.txt" -A ~/.smbpwAlles, was smbclient wissen muss, um die Operation auszuführen, wurde in diesem Befehl angegeben. Es gibt keine interaktive Sitzung. Ein solcher Befehl kann daher in ein Shell-Skript oder ein Programm in einer anderen Programmiersprache aufgenommen werden.
Wenn Sie smbclient auf diese Weise einsetzen, ist es möglich, mit Hilfe von Shell-Funktionen, Skripten oder Aliasen eigene Befehle zu erzeugen. Nehmen Sie zum Beispiel an, Sie brauchen einen Befehl, um eine kurze Liste mit Dateien in einem freigegebenen Verzeichnis zu drucken. In der Liste sollen nur die Namen der Dateien auftauchen. Mittels einer bash-Funktion könnten Sie den Befehl smbls definieren:
smbls( ) { share=`echo $1 | cut -d '/' -f '1-4'` dir=`echo $1 | cut -d '/' -f '5-'` smbclient $share -c "cd $dir; ls" -A ~/.smbpw | \ grep "^ " | cut -d ' ' -f 3 - | sort }Anschließend setzen Sie smbls folgendermaßen ein:
$ smbls //maya/e CD-images lectures ms-ProfPol-wp.doc profile-map readme.txt RECYCLED smbclient.doc smbmount.doc smbsh.txt trans $ smbls //maya/e/lectures . .. lecture1.mp3 lecture2.mp3 lecture3.mp3 lecture4.mp3 lecture5.mp3 lecture6.mp3 lecture7.mp3 lecture8.mp3 lecture9.mp3Ein anderes Anwendungsgebiet von smbclient in Skripten besteht in der Ausführung administrativer Aufgaben. Stellen Sie sich eine Gruppe von Benutzern auf Windows-Clients vor, die als Teil eines Projekts, an dem sie arbeiten, Dateien gemeinsam nutzen. Anstatt zu erwarten, dass diese Benutzer die Erstellung täglicher Backups miteinander koordinieren, könnten Sie ein Skript schreiben, das die Freigabe auf den Samba-Server kopiert. Das Skript würden Sie dann jede Nacht als cron-Job ausführen. Das Verzeichnis auf dem Samba-Server könnte ebenfalls freigegeben werden. Dadurch würde es den Benutzern erlaubt, ein Backup einer ihrer Dateien zu beziehen, ohne extra den Administrator belästigen zu müssen.
Backups mit smbclient
Ein wichtiges Einsatzgebiet von smbclient ist die Erstellung und Wiederherstellung von Backups von SMB-Dateifreigaben. Die Backup-Dateien, die smbclient schreibt, liegen im tar-Format vor. Dadurch ist es einfach, mit ihnen zu arbeiten und sie auf andere Unix-Versionen zu übertragen. Die Benutzung von smbclient auf einem Unix-Server zum Erstellen von Netzwerk-Backups kann zu einer zentraleren und leichter zu verwaltenden Lösung zum Erhalten der Datenintegrität führen, da sowohl SMB-Freigaben als auch NFS-Dateisysteme auf dem gleichen System gesichert werden können.
Es gibt zwei Wege, um mit smbclient Backups auszuführen. Wenn Sie eine komplette Freigabe sichern, besteht die einfachste Methode darin, die Option -Tc auf der Kommandozeile einzugeben:
# smbclient //maya/e -A samba-domain-pw -Tc >maya-e.tarDies erzeugt ein tar-Archiv der Freigabe \\maya\e in der Datei maya-e.tar. Mit der Option -D kann an Stelle der ganzen Freigabe ein Verzeichnis aus der Freigabe gesichert werden:
# smbclient //maya/e -A samba-domain-pw -D trans -Tc >maya-e.tarDies veranlasst smbclient, in das Arbeitsverzeichnis trans der Freigabe \\maya\e zu wechseln, bevor mit dem Backup begonnen wird. Es ist auch möglich, den tar-Befehl von smbclient im interaktiven Modus zu verwenden:
# smbclient //maya/e added interface ip=172.16.1.3 bcast=172.16.1.255 nmask=255.255.255.0 Password: smb: \> cd trans smb: \trans\> tarmode full hidden system quiet smb: \trans\> tar c maya-e-trans.tarMit dem gezeigten Code wird nur das Unterverzeichnis trans der Freigabe \\maya\e gesichert. Dazu werden die Einstellungen verwendet, die im Befehl tarmode festgelegt wurden. Damit diese Art von Backup automatisch über ein Skript ausgeführt werden kann, verwenden Sie die Option -c:
# smbclient //maya/e -A samba-domain-pw -c "cd trans; tarmode full hidden \ system quiet; tar >maya-e-trans.tar"Über die Kommandozeilen-Option -T oder den tar-Befehl von smbclient können zusätzliche Optionen angegeben werden. Es ist notwendig, entweder die Option c anzugeben, um ein Sicherungsarchiv zu erstellen, oder die Option x, um das Archiv wieder zu extrahieren.1 Die anderen Optionen können an den Options-String angehängt werden. Sie werden im Abschnitt über smbclient in Anhang C erläutert. Sie erlauben es Ihnen, inkrementelle Backups zu erzeugen sowie festzulegen, welche Dateien in das Backup aufgenommen oder aus ihm ausgeschlossen werden sollen, und legen eine Reihe weiterer Einstellungen fest. Stellen Sie sich beispielsweise vor, Sie wollen ein inkrementelles Backup einer Freigabe herstellen und setzen das Archiv-Bit auf den Dateien zurück, um alles für das nächste inkrementelle Backup einzurichten. Anstatt die interaktiven Befehle
smb: \> tarmode inc reset quiet smb: \> tar c backup.tarzu benutzen, könnten Sie entweder den interaktiven Befehl
smb: \> tar cgaq backup.tarverwenden oder die Option -Tcgaq auf der smbclient-Kommandozeile einsetzen.
Ihre beste Strategie für die Benutzung von smbclient für Netzwerk-Backups hängt von Ihrer lokalen Konfiguration ab. Wenn Sie nur einige Windows-Systeme haben, die wenige Daten gemeinsam nutzen, könnten Sie ein Skript schreiben, das -Tc-Befehle des smbclient enthält, mit dem Sie jede Freigabe in einer eigenen tar-Datei sichern und die Dateien dann in einem Verzeichnis ablegen, das bei den normalen Sicherungszyklen des Unix-Systems gesichert wird. Haben Sie dagegen große SMB-Freigaben in Ihrem Netzwerk, ziehen Sie es möglicherweise vor, das Backup direkt auf ein Bandlaufwerk zu schreiben. Sie können dies mit smbclient erledigen. Das funktioniert genauso wie der Unix-Befehl tar:
# smbclient //maya/d -A samba-domain-pw -Tc >/dev/tapeWenn Sie sich mit smbclient vertraut gemacht haben und Ihr automatisiertes Backup-System funktioniert, werden Sie feststellen, dass Sie sich mit Hilfe von Samba viel weniger Sorgen um die Integrität der Daten Ihres Netzwerks machen müssen. Die Autoren dieses Buches sind erfahrene Unix-Systemadministratoren. Wir empfehlen Ihnen, auf jeden Fall eine Backup-Strategie einzusetzen, die sorgfältig geplant, implementiert und - das ist wohl am wichtigsten - getestet und für gut befunden wurde.
smbfs
Unter Linux kann das smbfs-Dateisystem dazu verwendet werden, SMB-Freigaben auf eine Weise an das Linux-Dateisystem zu mounten, die ähnlich dem Mounten von Plattenpartitionen an NFS-Dateisystemen funktioniert. Das Ergebnis ist so transparent, dass Benutzer auf dem Linux-System es nicht einmal merken, dass sie über einen Windows- oder Samba-Server auf die Dateien zugreifen. Dateien und Verzeichnisse sehen genau so aus wie die anderen Dateien und Verzeichnisse auf dem lokalen Linux-System. Allerdings gibt es in Bezug auf die Eigentümerschaft und die Zugriffsrechte einige Unterschiede im Verhalten.2
smbfs basiert zwar auf dem Samba-Code, ist aber selbst kein Bestandteil der Samba-Distribution. Statt dessen ist es als normaler Bestandteil der Linux-Dateisystemunterstützung in Linux enthalten.
Die Programme smbmount und smbmnt gehören zur Samba-Distribution und werden auf dem Client benötigt, um smbfs-Dateisysteme zu mounten. Samba muss mit der Konfigurationsoption --with-smbmount kompiliert werden, um sicherzustellen, dass diese Programme kompiliert werden. Sie suchen in der smb.conf nach Informationen über das lokale System und die Netzwerkkonfiguration, Sie benötigen deshalb eine funktionierende smb.conf-Datei auf dem System, selbst wenn dieses nicht als Samba-Server arbeitet.
Ein smbfs-Dateisystem mounten
Der Befehl smbmount wird eingesetzt, um ein smbfs-Dateisystem an das Linux-Dateisystem zu mounten. Die grundlegende Syntax lautet:
# smbmount Freigabe-UNC Mount-Punkt -o OptionenErsetzen Sie Freigabe-UNC durch die UNC der SMB-Freigabe und Mount-Punkt durch den vollständigen Pfad zu dem Verzeichnis im Linux-Dateisystem, das als Mount-Punkt verwendet werden soll. Das Argument Optionen wird verwendet, um die genaue Art und Weise festzulegen, in der die Freigabe gemountet wird. Schauen wir uns das Beispiel eines smbmount-Befehls an:
# smbmount //maya/e /smb/e \ -o "credentials=/home/jay/.smbpw,uid=jay,gid=jay,fmask=664,dmask=775"Hier mounten wir die Freigabe \\maya\e eines Windows 98-Systems an den Mount-Punkt /smb/e auf dem Linux-System.
ERROR: smbfs filesystem not supported by the kernelIn diesem Fall müssen Sie einen neuen Kernel konfigurieren und kompilieren, um Unterstützung für smbfs zu integrieren. Wenn smbfs installiert und eine SMB-Freigabe gemountet ist, können Sie den Befehl
$ cat /proc/filesystemsnodev smbfsDer Mount-Punkt muss existieren, bevor smbmount ausgeführt wird. Er kann mit Hilfe des Befehls mkdir erzeugt werden:
# mkdir /smb/eDas Argument der Option -o sieht vielleicht ein bisschen kompliziert aus. Es handelt sich dabei um eine durch Kommata getrennte Liste aus schlüssel=wert-Paaren. Der credentials-Schlüssel wird auf den Namen der Credentials-Datei gesetzt, die dazu dient, smbmount einen gültigen Benutzernamen und ein gültiges Kennwort zu übergeben, mit dem die Authentifizierung während der Anmeldung an einer Freigabe vorgenommen wird. Das Format ist identisch mit dem von smbclient verwendeten (wie im vorangegangenen Abschnitt erklärt), Sie können also für beide Clients die gleiche Credentials-Datei benutzen. Wenn Sie wollen, können Sie das schlüssel=wert-Paar username=name%kennwort verwenden, um den Benutzernamen und das Kennwort direkt im smbmount-Befehl festzulegen, obwohl die Sicherheit dadurch deutlich vermindert wird.
Der Befehl smbmount akzeptiert die gleichen Authentifizierungsmethoden wie smbclient. Die Kommentare in dem Abschnitt über smbclient bezüglich der Angabe von Kennwörtern auf der Kommandozeile - und dem Ablegen von Kennwörtern in Dateien und Umgebungsvariablen - gelten auch hier.
Die restlichen Optionen teilen smbmount mit, wie zwischen dem SMB-Dateisystem und dem Unix-Dateisystem übersetzt wird, die sich in der Handhabung der Eigentümerschaft und der Zugriffsrechte unterscheiden. Die Optionen uid und gid legen den Eigentümer und die Gruppe fest, die allen Verzeichnissen und Dateien in der gemounteten Freigabe zugewiesen werden.
Die Optionen fmask und dmask geben Bit-Masken für die Rechte von Dateien bzw. Verzeichnissen an. Diese Bit-Masken sind durch ein logisches UND mit den Rechten verknüpft, die vom Server gewährt werden, um die effektiven Zugriffsrechte auf dem Client-Unix-System zu erzeugen. Auf der Server-Seite hängen die gewährten Zugriffsrechte vom Betriebssystem des Servers ab. Bei einem Windows 95/98/Me-Server mit Sicherheit auf Freigabeebene kann auf einzelnen Dateien und Verzeichnissen das MS-DOS-Attribut Read-only gesetzt und mit den Zugriffsrechten Full Access oder Read-only auf der Freigabe als Ganzes kombiniert werden. Im Modus Sicherheit auf Benutzerebene kann Windows 95/98/Me ACL-artige Zugriffsrechte besitzen, die auf die gesamte Freigabe angewendet werden, wie in Kapitel 4 vorgestellt. Windows NT/2000/XP unterstützen ACLs auf einzelnen Dateien und Verzeichnissen mit den Zugriffsrechten Full Control, Change oder Read, die auf die ganze Freigabe angewendet werden können. Handelt es sich bei dem Server um einen Samba-Server, sind die Rechte identisch mit denen, die durch die Samba-Freigabe und das lokale Unix-System für die einzelnen Dateien und Verzeichnisse definiert sind. In jedem Fall dienen die Rechte, die auf die Freigabe angewendet werden, dazu, den Zugriff weiter einzuschränken - über das hinaus, was für die einzelnen Dateien und Verzeichnisse festgelegt wurde.
Möglicherweise glauben Sie, dass die Berechtigungsmasken fmask und dmask nur dazu verwendet werden können, die effektiven Zugriffsrechte auf Dateien und Verzeichnissen zu reduzieren. Das ist jedoch nicht immer der Fall. Nehmen Sie beispielsweise an, dass eine Datei von einem Windows 95/98/Me-Server mit Sicherheit auf Freigabeebene freigegeben wird und eine ganze Reihe von Benutzern das Kennwort für den vollständigen Zugriff auf die Freigabe erhalten hat. Wenn die Freigabe mit smbmount unter Benutzung eines fmask-Werts von 666 gemountet wird, werden die Lese-/Schreibrechte auf dem Unix-System nicht nur für den Eigentümer, sondern auch für jeden anderen Benutzer auf dem Unix-System gewährt!
Nach dem Mounten der Freigabe \\maya\d an /smb/e sieht der Inhalt von /smb/e folgendermaßen aus:
$ cd /smb/e ; ls -l total 47 drwxrwxr-x 1 jay jay 512 Jan 8 20:21 CD-images drwxrwxr-x 1 jay jay 512 Jan 6 21:50 lectures -rw-rw-r-- 1 jay jay 131 Dec 18 09:12 ms-ProfPol-wp.doc -rw-rw-r-- 1 jay jay 59 Dec 18 09:12 profile-map -rw-rw-r-- 1 jay jay 131 Jan 15 05:01 readme.txt drwxrwxr-x 1 jay jay 512 Feb 4 2002 RECYCLED -rw-rw-r-- 1 jay jay 33969 Dec 10 20:22 smbclient.doc -rw-rw-r-- 1 jay jay 7759 Dec 10 20:20 smbmount.doc -rw-rw-r-- 1 jay jay 1914 Dec 10 20:17 smbsh.txt drwxrwxr-x 1 jay jay 512 Jan 10 03:54 transIm Großen und Ganzen funktionieren die Dateien und Verzeichnisse, die in dem gemounteten smbfs-Dateisystem enthalten sind, genau so wie alle anderen, abgesehen von den Einschränkungen auf Grund der Natur der SMB-Netzwerke. So kann zum Beispiel nicht einmal der Superuser diese Operation ausführen:
# chown root lectures chown: changing ownership of 'lectures': Operation not permittedda SMB-Freigaben an sich den Gedanken der Eigentümerschaft nicht unterstützen. Das kann einige eigenartige Verhaltensweisen zur Folge haben. Beispielsweise erzeugt der Befehl:
# chmod 777 readme.txtkeine Fehlermeldung, obwohl sich nichts geändert hat. Bei der Datei readme.txt sind die Zugriffsrechte weiterhin auf 664 gesetzt:
# ls -l readme.txt -rw-rw-r-- 1 jay jay 131 Jan 15 05:01 readme.txtAbgesehen von Kleinigkeiten wie diesen kann das gemountete smbfs-Dateisystem zusammen mit praktisch jeder Anwendung benutzt werden. Sie werden angenehm überrascht sein, wie nahtlos es sich in Ihre Linux-basierte Arbeitsumgebung einfügt. Sie können im Unix-Dateisystem sogar symbolische Links erzeugen, die auf Dateien und Verzeichnisse innerhalb von SMB-Freigaben verweisen. Es ist jedoch nicht möglich, einen symbolischen Link innerhalb des gemounteten smbfs-Dateisystems zu erzeugen, es sei denn, der Server ist ein Samba-Server, der Unix-CIFS-Erweiterungen unterstützt.
smbfs-Dateisysteme automatisch mounten
Genau wie andere Arten von Dateisystemen kann auch ein smbfs-Dateisystem automatisch während des Systemstarts gemountet werden, indem ein Eintrag dafür in /etc/fstab erstellt wird. Das Format des Eintrags sieht so aus:
Freigabe-UNC Mount-Punkt smbfs Optionen 0 0Ersetzen Sie Freigabe-UNC durch die UNC der Freigabe (im Format mit den Schrägstrichen) und Mount-Punkt durch den Namen des Verzeichnisses im Linux-Dateisystem, an das die Freigabe gemountet wird. Bei den Optionen verwenden Sie einfach den String, den Sie mit dem Flag -o im Befehl smbmount benutzt haben.
Sobald Sie die Argumente ermittelt haben, die zusammen mit dem Befehl smbmount eingesetzt werden, um die Freigabe auf die Art zu mounten, die Sie sich vorstellen, ist es eine sehr einfache Sache, den Eintrag für /etc/fstab zu erzeugen. Der Befehl smbmount, den wir verwendeten, um die Freigabe \\maya\e an /smb/e zu mounten, würde folgenden /etc/fstab-Eintrag ergeben:
//maya/e /smb/e smbfs credentials=/home/jay/.smbpw,uid=jay,gid=jay,fmask=664,dmask=775 0 0 (Beachten Sie bitte, dass dies auf eine Zeile gehört.)Wenn Sie einen Fehler beim Verändern der /etc/fstab machen, startet Ihr System möglicherweise nicht mehr richtig, und Sie müssen eventuell im Einbenutzermodus booten, um das Problem zu beheben. Bevor Sie die /etc/fstab bearbeiten, sollten Sie eine Sicherungskopie davon anlegen. Stellen Sie sich darauf ein, Ihr System wieder herzustellen, falls etwas schiefgeht.
Wenn der Eintrag hinzugefügt wurde, mountet das System die Freigabe beim Start automatisch. Der Systemadministrator kann die Freigabe aber auch manuell mounten oder abmounten. Dazu verwendet er diese Befehle:
# mount /smb/e # umount /smb/eEs ist möglich, mount und umount zu verwenden und diesen die UNC für die Freigabe im Format mit Schrägstrichen zu übergeben, wie in Ihrem /etc/fstab-Eintrag. Seien Sie dabei jedoch vorsichtig. Eine Freigabe könnte mehr als einmal in /etc/fstab aufgeführt sein, so dass sie auch an mehr als einer Stelle im Linux-Dateisystem gemountet werden kann. Wenn Sie die UNC verwenden, um die Freigabe festzulegen, die Sie mounten oder abmounten wollen, veranlassen Sie damit unter Umständen ein Mounten oder Abmounten an einem anderen als dem gewünschten Mount-Punkt.
Gängige smbmount-Optionen
Tabelle 5-1 zeigt schlüssel=wert-Paare, die zusammen mit der Option -o des Befehls smbmount oder im Optionenfeld des /etc/fstab-Eintrags für das smbfs-Dateisystem verwendet werden können. In der smbmount-Manpage finden Sie eine vollständige Liste der Optionen.
smbsh
Das Programm smbsh ist Teil der Samba-Suite und funktioniert auf einigen, nicht jedoch auf allen Unix-Varianten.3 Es fügt um die Kommando-Shell des Benutzers einen Wrapper hinzu, wodurch der Shell sowie gebräuchlichen Unix-Dienstprogrammen ermöglicht wird, neben Dateien und Verzeichnissen im lokalen Unix-System auch auf Dateien und Verzeichnissen in SMB-Freigaben zu agieren. Aus Sicht des Benutzers scheinen die SMB-Freigaben an das Unix-Dateisystem gemountet zu sein.
smbsh funktioniert, indem die Shell und die von ihr ausgeführten Programme in einer Umgebung laufen, aus der Aufrufe an die Standard-C-Bibliothek an die smbwrapper-Bibliothek umgeleitet werden, die Unterstützung für das Arbeiten auf SMB-Freigaben enthält. Diese Umleitung kann nur funktionieren, wenn das ausgeführte Programm dynamisch gebunden ist. Glücklicherweise sind in modernen Unix-Versionen die meisten üblichen Dienstprogramme dynamisch und nicht statisch gebunden.
Um festzustellen, ob ein Programm dynamisch oder statisch gebunden ist, versuchen Sie einfach, den Befehl file einzusetzen.
Um smbsh zu benutzen, muss Ihre Samba-Installation mit der Konfigurationsoption --with-smbwrapper konfiguriert sein.
Falls Sie eine ganze Reihe von Unix-Systemen mit dem gleichen Host-Betriebssystem und der gleichen Architektur haben und sich nicht mit einer kompletten Samba-Installation herumschlagen wollen, verschieben Sie einfach die folgenden Dateien auf die anderen Systeme:
/usr/local/samba/bin/smbsh /usr/local/samba/bin/smbwrapper.so /usr/local/samba/lib/smb.confAchten Sie darauf, dass /usr/local/samba/bin im Suchpfad Ihrer Shell steht. Die Datei smb.conf wird von smbsh nur benötigt, um die Arbeitsgruppe oder Domäne zu ermitteln. Sie muss deshalb nicht so kompliziert sein wie die Konfigurationsdatei Ihres Samba-Servers.
Eine interaktive Sitzung mit smbsh
Um smbsh zu starten, geben Sie am Shell-Prompt einfach den Befehl smbsh ein. Sie werden nach einem Benutzernamen und einem Kennwort gefragt, mit denen Sie sich am SMB-Netzwerk authentifizieren:
$ smbsh Username: davecb Password: smbsh$Während der Arbeit in der smbsh-Shell haben Sie ein virtuelles /smb-Verzeichnis. Dieses existiert im Unix-Dateisystem eigentlich nicht und wird innerhalb der smbsh nur unterstützt, um die SMB-Freigaben in einer Struktur zu organisieren, die Unix-Benutzern vertraut ist. Sie können den Inhalt des virtuellen /smb-Verzeichnisses auflisten und eine Liste der Arbeitsgruppen im lokalen Netzwerk erhalten, die ebenfalls als virtuelle Verzeichnisse präsentiert werden:
smbsh$ cd /smb ; ls ZOOL PLANK BACILWenn Sie Ihr Arbeitsverzeichnis in eines der virtuellen Arbeitsgruppenverzeichnisse verlegen, können Sie sich die Computer in der Arbeitsgruppe anzeigen lassen:
smbsh$ cd ZOOL ; ls ANTILLES DODO MILO SEAL ARGON HANGGLIDE OSTRICH SPARTA BALLET INFUSION PLAQUE THEBES CHABLIS JAZ PRAETORIAN TJ COBRA KIKO RAYOPCI TRANCE COUGUR MACHINE-HEADPCI RUMYA VIPERPCI CRUSTY MATHUMA SCOTAuf die gleiche Weise können Sie in eines der virtuellen Computerverzeichnisse wechseln und sich die Freigaben anzeigen lassen, die dieser Computer anbietet:
smbsh$ cd scot ; ls ADMIN$ davecb nc np2s pl ace dhcp-mrk03 np nps xp cl ep np2 opcomDies ist die niedrigste Stufe des Systems der virtuellen Verzeichnisse von smbsh. Sobald Sie mit cd in eine Freigabe wechseln, befinden Sie sich innerhalb der SMB-Freigabe auf dem entfernten Computer:
smbsh$ cd davecb ; ls Mail mkanalysis_dirs.idx SUNWexplo nfs.ps Sent nsmail allsun.html projects.txt bin sumtimexIn der entfernten Freigabe funktionieren die meisten Dienstprogramme der Unix-Shell, und Sie können auf Dateien und Verzeichnissen genauso arbeiten wie in einem beliebigen Unix-System. Sie können sogar symbolische Links im Unix-Dateisystem erzeugen, die auf Dateien und Verzeichnisse in der SMB-Freigabe verweisen. Allerdings werden Versuche, symbolische Links in der SMB-Freigabe zu erzeugen, fehlschlagen, es sei denn, die Freigabe befindet sich auf einem Samba-Server mit Unterstützung für Unix-CIFS-Erweiterungen.
smbutil und mount_smbfs
Die Programme smbutil und mount_smbfs liefern SMB-Client-Funktionalität für FreeBSD, Darwin und Mac OS X. Keines der Programme ist Bestandteil der Samba-Distribution; wir führen sie hier dennoch auf, um Ihnen ein wenig Unterstützung zu liefern, falls Sie Systeme mit BSD-Unix in Ihrem Netzwerk betreiben.
smbutil
Das Programm smbutil stellt eine Funktionalität zur Verfügung, die ähnlich der einiger Kommandozeilen-Programme der Samba-Suite ist. Es kann verwendet werden, um die Freigaben auszugeben, die auf einem SMB-Server angeboten werden, oder um NetBIOS-Namensabfragen auszuführen.
Das erste Argument, das an smbutil übergeben wird, besteht aus einer Reihe von Unterbefehlen. Üblicherweise folgen den Unterbefehlen die notwendigen Argumente. Um beispielsweise die Ressourcen aufzuführen, die von einem Server angeboten werden, verwenden Sie den Unterbefehl view und geben bei der entsprechenden Aufforderung Ihr Server-Kennwort ein:
% smbutil view //vamana Password: Share Type Comment ------------------------------------------------------------- public disk SS2500 printer Stylus Scan 2500 IPC$ pipe IPC Service (Samba 2.2.5) ADMIN$ disk IPC Service (Samba 2.2.5) leonvs disk User Home Directories 5 shares listed from 5 availableFalls Sie sich an dem Server mit einem Benutzernamen anmelden wollen, der sich von dem auf Ihrem Client unterscheidet, können Sie diesen auf der Kommandozeile angeben. Dazu geben Sie vor dem Namen des Servers den Benutzernamen ein und trennen das Ganze mit einem at-Zeichen (@):
% smbutil view //leonvs@vamanaSie können nach dem Benutzernamen auch das Kennwort eintippen. Als Trennzeichen wird in diesem Fall ein Doppelpunkt (:) verwendet. Dadurch vermeiden Sie die explizite Nachfrage nach dem Kennwort:
% smbutil view //leonvs:leonspassword@vamanaEs wird ausdrücklich davon abgeraten, das Kennwort derart offen einzugeben. Verwenden Sie lieber ein verschlüsseltes Kennwort. Dieses können Sie mit dem smbutil-Unterbefehl crypt erzeugen:
% smbutil crypt leonspassword $$1625a5723293f0710e5faffcfc6Dies kann dann an Stelle eines Klartextkennwort eingesetzt werden. Die Verschlüsselung ist allerdings nicht besonders stark und hält nur einer oberflächlichen Überprüfung stand. Wie bereits früher ausgeführt, ist die einzig wirklich sichere Methode der Angabe eines Kennworts die, bei der danach gefragt wird.
Während des Starts liest smbutil die Datei .nsmbrc im Home-Verzeichnis des Benutzers ein. Auch die Datei /usr/local/etc/nsmb.conf wird gelesen. Die Anweisungen in dieser Datei setzen diejenigen aus den ~/.nsmbrc-Dateien des Benutzers außer Kraft. Damit ist es den Administratoren möglich, einheitliche Einstellungen für alle Benutzer festzulegen. Die Anweisungen können in dieser Datei in einem ähnlichen Format aufgeschrieben werden wie in der Samba-Konfigurationsdatei, das heißt mit Abschnitten und Parametern. Eine Liste der gebräuchlichen Konfigurationsparameter finden Sie in Tabelle 5-2.
Um zum Beispiel Ihr Kennwort in Ihrer ~/.nsmbrc-Datei abzulegen, erzeugen Sie einen solchen Eintrag in der Datei:
[VAMANA:LEONVS] password=$$1625a5723293f0710e5faffcfc6Die Abschnittsüberschrift in den eckigen Klammern gibt den NetBIOS-Namen des SMB-Servers sowie den Benutzernamen an, für den die folgenden Parameter-Einstellungen gelten. (Host- und Benutzername sollten in Großbuchstaben angegeben werden.) Abschnittsüberschriften können auch aus nur dem Hostnamen bestehen oder einen Freigabenamen als drittes Element enthalten, um Parameter festzulegen, die für eine einzelne Freigabe gelten sollen. Gibt es schließlich einen [default]-Abschnitt, werden die Einstellungen darin auf alle Verbindungen angewandt.
Die folgende .nsmbrc-Beispieldatei zeigt einige der anderen Parameter, die Sie verwenden könnten:
[default] username=leonvs # NetBIOS-Nameserver nbns=192.168.1.3 [VAMANA] # Server-IP-Adresse addr=192.168.1.6 workgroup=TEST [VAMANA:LEONVS] password=$$1625a5723293f0710e5faffcfc6Mit dem Programm smbutil können Sie außerdem zwischen IP-Adressen oder DNS-Namen und NetBIOS-Namen übersetzen. So nimmt beispielsweise der Unterbefehl status eine IP-Adresse oder einen DNS-Hostnamen als Argument entgegen und liefert den NetBIOS-Namen und die Arbeitsgruppe des entsprechenden SMB-Servers zurück:
% smbutil status 192.168.1.6 Workgroup: TEST Server: VAMANADer Unterbefehl lookup liefert die IP-Adresse zurück, die mit einem vorgegebenen NetBIOS-Hostnamen verknüpft ist. Ein NetBIOS-Name-Server kann optional mit dem Argument -w angegeben werden:
% smbutil lookup -w 192.168.1.3 VAMANA Got response from 192.168.1.3 IP address of VAMANA: 192.168.1.6mount_smbfs
Das Programm mount_smbfs führt im Wesentlichen die gleiche Funktion aus wie smbmount unter Linux. Es mountet eine SMB-Freigabe an ein Verzeichnis im lokalen Dateisystem. Auf die SMB-Freigabe kann dann wie auf jedes andere Verzeichnis zugegriffen werden; Unterschiede im Verhalten wurden bereits im Abschnitt »Ein smbfs-Dateisystem mounten« aufgezeigt.
Die Syntax für mount_smbfs lautet:
mount_smbfs [Optionen] Freigabe-UNC Mount-Punktwobei Freigabe-UNC folgende Form aufweist:
//[Arbeitsgruppe;][Benutzername[:Kennwort]@]Server[/Freigabe]# mount_smbfs '//TEST;leonvs:$$1625a5723293f0710e5faffcfc6@vamana/leonvs' / \Volumes/leonvsDie Eigentümerschaft und die Zugriffsrechte des Mount-Punkts legen die vorgegebene Eigentümerschaft und die Zugriffsrechte für die Dateien und Verzeichnisse in der gemounteten Freigabe fest. Diese können mit Hilfe von Kommandozeilen-Argumenten modifiziert werden:
# mount_smbfs -u leonvs -g admin -f 0750 -d 0755 //leonvs@vamana/leonvs \/Volumes/leonvsIn diesem Beispiel gehören die Dateien und Verzeichnisse in der gemounteten Freigabe dem Benutzer leonvs und der Gruppe admin, wobei die Dateien und Verzeichnisse die Zugriffsrechte 750 bzw. 755 haben. (Wie üblich werden die Zugriffsrechte im oktalen Format angegeben, das auch vom Unix-Befehl chmod verwendet wird.)
Der Befehl mount_smbfs greift ebenfalls auf die Einstellungen in /usr/local/etc/nsmb.conf und ~/.nsmbrc zurück, wie bereits beschrieben. Eine Liste der gebräuchlichen Konfigurationsparameter und Kommandozeilen-Optionen finden Sie in Tabelle 5-2.
Mac OS X
Neben smbutil und mount_smbfs enthält OS X eine grafische Schnittstelle zu der von diesen Programmen angebotenen Funktionalität. Um diese Schnittstelle zu benutzen, öffnen Sie das Menü Gehe zu und wählen den Menüeintrag Mit Server verbinden... An Stelle einer UNC verwenden Sie für die Angabe der Freigabe einen Uniform Resource Identifier (URI) mit dem Präfix smb://. Diesen Wert setzen Sie in das Feld Adresse ein, wie in Abbildung 5-5 demonstriert.
Sie können einen Server, eine Freigabe, eine Arbeitsgruppe, einen Benutzernamen und ein Kennwort (optional verschlüsselt mit smbutil crypt) in dem URI festlegen, und zwar im gleichen Format wie das UNC-Argument für mount_smbfs. Falls Sie den Freigabenamen im URI weglassen, wird Ihnen ein Fenster präsentiert, in dem Sie aus einer Liste verfügbarer Freigaben wählen können, zu sehen in Abbildung 5-6.
Solange Sie sich nicht authentifiziert haben, werden lediglich Freigaben gezeigt, für die es nur Gastzugriff gibt. Nach dem Anklicken des Buttons Identifizieren werden Sie nach einer Arbeitsgruppe, einem Benutzernamen und einem Kennwort gefragt, wie in Abbildung 5-7 gezeigt. Diesen Dialog sehen Sie auch, wenn Sie zwar einen Freigabenamen in dem URI angeben, jedoch keinen Benutzernamen und kein Kennwort.4
Wie bei Mac OS X üblich, werden die Freigaben unter /Volumes gemountet, sind aber im root-Bereich der Finder-Hierarchie zu sehen.
Falls Sie einen WINS-Server in Ihrem Netzwerk haben, können Sie die IP-Adresse des Servers im Programm Verzeichnisdienste angeben oder den Parameter wins server in /etc/smb.conf verwenden.
Sollten Sie den Namen des Servers nicht kennen, an dem Sie sich anmelden wollen, können Sie ihn in der Suchliste ermitteln. Dazu benutzen Sie die grafische Schnittstelle des Befehls nmblookup, der mit Samba bereitgestellt wird. Klicken Sie auf den nach unten weisenden Pfeil im Dialogfeld Mit Server verbinden..., um eine hierarchische, spaltenorientierte Ansicht der verfügbaren Arbeitsgruppen und Server zu erhalten, ähnlich der in Abbildung 5-8 gezeigten. Wenn Ihr Client auch als SMB-Datei-Server agiert, wird er in seiner eigenen Suchliste nicht zu sehen sein.
1Eine Alternative zum Extrahieren des tar-Archivs direkt in die SMB-Freigabe besteht darin, den tar-Befehl des Unix-Systems einzusetzen, um das Archiv in ein Verzeichnis auf dem Unix-Server auszupacken. Anschließend werden die gewünschten Dateien in ein freigegebenes Verzeichnis kopiert. Dies bietet eine bessere Kontrolle über den Wiederherstellungsvorgang, etwa beim Beheben einer versehentlichen Löschung einer Datei oder beim Zurücksetzen von Dateien in einen früheren Zustand.
2Die Samba-Versionen 2.2.4 und später enthalten Unterstützung für die von Hewlett-Packard entwickelten Unix-CIFS-Erweiterungen, die in smbfs-Dateisystemen vollständige Unterstützung für die Unix-Eigentümerschaft, Gruppen und Zugriffsrechte hinzufügen, wenn zwei Samba-Systeme die Dateisysteme gemeinsam nutzen. Sie benötigen in Ihrem Linux-Kernel außerdem eine aktuelle Version von smbfs.
3Zu dem Zeitpunkt, als das Buch geschrieben wurde, funktionierte smbsh nicht unter HP/UX und Linux. Linux-Unterstützung könnte in der Zukunft jedoch hinzukommen.
4Falls Sie Ihre Authentifizierungsinformationen in einem Schlüsselbund gespeichert haben, werden Sie stattdessen nach dem Kennwort für den Schlüsselbund gefragt.