Kapitel 12
IN DIESEM KAPITEL
Das SMB-Protokoll (Server Message Block) hatte seinen Anfang in einem Microsoft Dateiserver, der in einem lokalen Netzwerk PCs unter MS-DOS ein virtuelles gemeinsames Laufwerk bescherte. In den alten Windows-Versionen konnte man ein Verzeichnis ad hoc freigeben und jeder im lokalen Netzwerk konnte die Dateien darauf nutzen.
Schon vor Linux wurde SAMBA als quelloffene Komponente entwickelt, um die UNIX-Variante SunOS über das SMB mit MS-DOS oder Windows zu koppeln. Insbesondere mit dem Aufkommen von Linux wurde SAMBA sehr beliebt. Es ersetzte kostenlos eine teure Windows-Server-Lizenz.
Da das Protokoll ursprünglich für Windows erstellt wurde, hält es sich nicht an die Standards von POSIX. So unterscheiden sich die Dateikonventionen. Beispielsweise ignoriert Windows die Groß- und Kleinschreibung. Und auch die Rechtelage der Dateien erweist sich manchmal als etwas knifflig.
Für die Experimente mit Samba benötigen Sie einen Server und einen Client. In einem normalen LAN ist das mit zwei Computern realisierbar. Soll der Samba-Server dann auf längere Sicht produktiv eingesetzt werden, ist es sinnvoll, ihm eine feste IP-Adresse (siehe Kapitel 8) und vielleicht sogar einen festen lokalen Namen per DNS (siehe Kapitel 8) zuzuordnen.
Wenn Sie den Server in einem virtuellen Labor wie in Kapitel 19 austesten wollen, reicht für die ersten Tests eine normale virtuelle Maschine. In diesem Fall installieren Sie darauf den Samba-Server und testen die Fähigkeiten über localhost, also auf der lokalen Maschine, aus.
Wollen Sie den Server von Clients aus Ihrem lokalen Netzwerk aus ansprechen, können Sie in den Netzwerkeinstellungen Ihres SAMBA-Servers den Netzwerkadapter auf »Netzwerkbrücke« umstellen. Damit ist diese VM von allen Computern aus dem lokalen Netzwerk erreichbar.
Wenn die Ansprüche größer werden oder in Ihrem Netzwerk sensible Server laufen, kann es sinnvoll sein, eine VM zu starten, die einen Router realisiert, wie in Kapitel 20 beschrieben, und den Server und die Clients in einem internen Netzwerk zu starten. Damit kommen alle Computer ins Internet, aber lokale Änderungen haben keinen Einfluss auf Ihr Netzwerk.
ÄNDERN | NETZWERK | Adapter auswählen | ERWEITERT aufklappen | MAC-ADRESSE
Alle MAC-Adressen innerhalb des virtuellen LANs müssen sich unterscheiden. Im Zweifelsfall ändern Sie die MAC-Adresse leicht ab, sodass sie sich unterscheiden.
Sie können Samba durch Installation des gleichnamigen Pakets aus dem Repository installieren.
# apt update
# apt install samba
Die Konfiguration erfolgt in der Datei /etc/samba/smb.conf. Bei der Installation wird bereits eine solche Konfiguration beigelegt, die ausgiebig kommentiert ist und damit den Server gut dokumentiert. Leider ist sie in ihrer Größe etwas unübersichtlich. Aus diesem Grund ist es klug, diese zu kopieren und eine neue eigene Konfigurationsdatei zu erstellen. Eine sehr ausführliche Beschreibung aller Parameter der Konfigurationsdatei finden Sie auf der Manpage von smb.conf:
$ man smb.conf
Sie benötigen natürlich den Pfad, um alle Dateien zu speichern, die anderen zur Verfügung stehen sollen. Serverdaten gehören klassischerweise in das Verzeichnis /var. Für Samba könnte man also ein Verzeichnis /var/samba anlegen und darunter wiederum den Platz für alle möglichen Freigaben.
Ein wichtiges Thema sind die Benutzer. Ressourcen, die über das Netzwerk angeboten werden, sollten vor unberechtigten Zugriffen geschützt sein. Samba verwendet eine eigene Benutzerliste, deren Benutzer aber immer mit einem Linux-Benutzer korrespondieren muss.
Unser erster Server soll die Familienfotos aufnehmen, die ansonsten auf irgendwelchen Fotoapparaten, Smartphones oder externen Festplatten herumfliegen. Darum soll eine Freigabe namens foto
definiert werden. Alle Familienmitglieder sollen gleichberechtigt darauf schreiben und lesen dürfen.
Um ein oder mehrere Verzeichnisse für andere Netzwerkteilnehmer freizugeben, müssen sie auf dem lokalen Computer natürlich erst einmal existieren. Wir erzeugen ein Verzeichnis /var/samba und für die Freigabe foto
auch ein entsprechendes Verzeichnis.
# mkdir /var/samba
# mkdir /var/samba/foto
# chmod -R 777 /var/samba
Die Verzeichnisse wurden damit angelegt und für alle Benutzer zum Lesen, Schreiben und Betreten freigegeben.
Das Verzeichnis /var/samba/foto soll allen Netzwerkteilnehmern zur Verfügung stehen. Das muss Samba erst gesagt werden. Alle Informationen für den Samba-Server werden in der Datei /etc/samba/smb.conf gespeichert. Da die Originaldatei wertvolle Informationen enthält, wird sie zur Seite geschoben und eine neue Datei angelegt.
# cd /etc/samba
# mv smb.conf bak.smb.conf
# vi smb.conf
Nun sind Sie im Editor. Statt vi
können Sie natürlich auch nano
verwenden, wenn Ihnen dieser leichter fällt. Hier geben Sie die Einstellungen für den Samba-Server und seine Freigaben ein.
Die Konfiguration wird in mehrere Abschnitte untergliedert. Die Abschnittsbezeichner werden in eckige Klammern eingeschlossen.
Der wichtigste Abschnitt heißt global
. Er beschreibt den Server als solchen. Für den ersten Server benötigen wir keine Besonderheiten. Die Vorgaben decken unseren Bedarf. Weitere Abschnitte definieren Ressourcen, die der Server dem Netzwerk zur Verfügung stellt. In diesem Fall ist es die Freigabe foto
.
[global]
[foto]
path = /var/samba/foto
writeable = yes
read only
, allerdings umgekehrt. read only=true
entspricht writeable=no
.Die Konfiguration kann durch den Befehl testparm
getestet werden. Dadurch werden syntaktische Fehler erkannt, bevor der Server gestartet wird.
# testparm -s
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_STANDALONE
# Global parameters
[global]
idmap config * : backend = tdb
[foto]
path = /var/samba/foto
read only = No
Sie sehen hier einige Optionen, die vom System vorgegeben wurden. Manchmal fehlen auch Optionen, wenn diese den Standardwerten entsprechen.
Nachdem der Prüfbericht gut ausgefallen ist, kann Samba neu gestartet werden. Der Dienst heißt smbd
für »SMB-Dämon«. Immer wenn die Konfiguration geändert wurde, sollten Sie den Befehl geben.
# systemctl restart smbd
Für den Zugriff auf die Freigaben muss sich der Benutzer ausweisen. Das wird üblicherweise über Benutzerkennung und Passwort erledigt. Als Basis für einen Samba-Benutzer benötigen Sie zuerst einmal einen Benutzer des Linux-Servers. Der wird wie üblich mit dem Befehl adduser
angelegt.
# adduser johanna
Es wird zwei Mal nach dem Passwort gefragt. Anschließend noch ein paar Eingaben wie Telefonnummer oder Büro, die ignoriert werden können. Nach einer kurzen Nachfrage ist der Linux-Benutzer johanna angelegt.
Damit johanna per Samba auf die Fotos zugreifen kann, muss sie zusätzlich zum Samba-Benutzer werden. Dazu befördert sie der Befehl smbpasswd
.
# smbpasswd -a johanna
New SMB password:
Retype new SMB password:
Added user johanna.
#
Auch hier wird ein Passwort doppelt eingefordert. Die Passwörter von Linux und Samba werden unterschiedlich gespeichert, was es für den Benutzer nicht unbedingt einfacher macht.
Der Administrator nutzt smbpasswd
, um SAMBA-Benutzer anzulegen, zu sperren, zu löschen oder ihre Passwörter zu ändern. Der Anwender kann zwar ebenfalls smbpasswd
aufrufen, allerdings nur, um sein eigenes Passwort zu ändern. Er kann seinen eigenen Account weder löschen noch deaktivieren.
Option |
Wirkung |
---|---|
| Legt ein neues SAMBA-Konto an. |
| Löscht ein bestehendes SAMBA-Konto. |
| Sperrt einen Benutzer. |
| Hebt die Benutzersperre wieder auf. |
Tabelle 12.1: Einige Optionen von smbpasswd
Nachdem die Prozesse gestartet worden sind, können sie getestet werden. Dazu gibt es vielfältige Methoden.
Das Programm smbclient
ist sicher nicht besonders komfortabel, eignet sich aber prima, um den Server zu testen. Dieses Programm ist unter Debian nicht im SAMBA-Paket enthalten, sondern muss explizit installiert werden.
# apt install smbclient
Nun können Sie auf der lokalen Maschine den SMB-Client aufrufen. Mit der Option -U geben Sie den Benutzernamen an. Hinter der Option -L geben Sie an, welchen Server Sie betrachten wollen. Das Programm fragt nach einem Passwort. Hier muss das Passwort von johanna eingegeben werden.
$ smbclient -U johanna -L localhost
Password for [WORKGROUP\johanna]:
Sharename Type Comment
--------- ---- -------
foto Disk
IPC$ IPC IPC Service (Samba 4.15.9-Ubuntu)
SMB1 disabled -- no workgroup available
Wenn Sie auf einen anderen PC wechseln, können Sie den gleichen Befehl absetzen, müssen hinter der Option -L
natürlich die Adresse des Samba-Servers angeben. Die Adresse 192.168.0.105 habe ich zuvor auf meinem Samba-Server mit dem Befehl ip a
ermittelt.
$ smbclient -U johanna -L 192.168.0.105
Bemerkenswert ist, dass Sie auf dem Client-Rechner den Benutzer johanna
weder als Linux- noch als Samba-Benutzer anlegen mussten.
Mit dem SAMBA-Client können Linux-Rechner nicht nur sehen, welche Freigaben ein Server besitzt, sondern auch auf diese zugreifen. Dazu wird die Freigabe als letztes Argument des Befehls angehängt.
$ smbclient -U johanna //192.168.0.105/foto
Password for [WORKGROUP\johanna]:
Try "help" to get a list of possible commands.
smb: \>
An dieser Stelle können Sie verschiedene Befehle angeben, mit denen Sie Daten zwischen dem Client und dem Server austauschen. Beispielsweise kopiert der SMB-Befehl put
eine Datei von dem Client auf den Server. Im folgenden Beispiel wird die lokale Datei /etc/fstab, die ja immer existieren muss, unter dem Dateinamen huhu in das Verzeichnis der Freigabe foto
, also unter /var/samba/foto kopiert.
$ smbclient -U johanna //192.168.0.105/foto
Password for [WORKGROUP\johanna]:
Try "help" to get a list of possible commands.
smb: \> put /etc/fstab huhu
putting file /etc/fstab as \huhu (50,0 kb/s) (average 50,0 kb/s)
smb: \> quit
$
Sie verlassen smbclient
mit quit
oder exit
. Falls Sie daran Interesse haben, finden Sie alle Kommandos von smbclient
, indem Sie die Manpage von smbclient
aufrufen.
$ man smbclient
Eine Freigabe kann auch direkt aus dem Dateimanager geöffnet werden. Damit ist es möglich, Dateien auf einem fremden Rechner wie lokale Dateien zu behandeln.
Zum Testen können Sie den lokalen Dateimanager auf dem Samba-Server öffnen, falls dieser eine grafische Oberfläche hat. Wenn Sie ebenfalls MATE als Desktop verwenden, können Sie durch Anklicken des Stiftsymbols oder die Tastenkombination + in die Adresszeile die URL smb://localhost
eingeben. Bei vielen anderen Desktops funktioniert dies auch.
Nach Eingabe des Servers sehen Sie nun die Freigabe foto
, wie in Abbildung 12.1 zu sehen ist.
Wenn Sie darauf doppelklicken, werden Sie nach Benutzer und Passwort gefragt. Geben Sie die bei smbpasswd
angegebene Kennung an und Sie sollten ein leeres Verzeichnis sehen. Über die rechte Maustaste können Sie zum Test einen Ordner anlegen. Da die Freigabe writeable
ist, sollte das funktionieren.
Es kann allerdings sein, dass der Dateimanager den eigenen Benutzernamen voraussetzt und Ihnen keine Möglichkeit gibt, diesen in dem Dialog einzugeben. Dann müssen Sie dem Servernamen den Benutzernamen voranstellen. In unserem Beispiel lautet dies dann smb://johanna@localhost/foto
.
Nachdem das auf dem lokalen Rechner geklappt hat, wechseln wir auf einen anderen Computer. Wieder öffnen Sie einen Dateimanager. Die Freigabe können Sie nun über die IP-Adresse des Samba-Servers ansprechen.
Dazu muss der Server natürlich im lokalen Netzwerk erreichbar sein.
Sofern sich der Server in einer virtuellen Maschine in der VirtualBox befindet, müssen Sie dazu gegebenenfalls die Netzwerkeinstellung der VM auf »Netzwerkbrücke« umstellen.
ip a
eingeben. Hinter dem Begriff inet
finden Sie die IP-Adresse. Im unteren Beispiel ist das 192.168.0.105.
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state ...
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo ...
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ..
link/ether 08:00:27:60:e8:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.105/24 brd 192.168.0.255 ...
smb://192.168.0.105
oder smb://johanna@192.168.0.105
.# /etc/hosts
192.168.0.105 server
SMB-Freigaben stellen ein Netzwerkdateisystem dar. Ein solches Dateisystem können Sie wie andere Dateisysteme auch mit dem Befehl mount
in den Verzeichnisbaum einhängen.
Beim Einbinden des Dateisystems sollte bedacht werden, dass sich SMB-Dateisysteme nicht POSIX-konform verhalten. So stimmen nicht alle Dateinamenskonventionen überein. Auch Linux-typische Dateispezialitäten wie Links oder Sockets werden nicht funktionieren. Nicht einmal die Rechte und Besitzverhältnisse eines Linux-Systems können auf einem SMB-Dateisystem nachgebildet werden.
Um eine SMB-Freigabe einzuhängen, muss dem Befehl mount
die Option -t cifs
angegeben werden. Diese Option wird dazu führen, dass statt des Standardbefehls mount
der Befehl mount.cifs
aufgerufen wird. Der Befehl mount.cifs
muss explizit installiert werden und befindet sich im Paket cifs-utils:
# apt install cifs-utils
Das Einbinden der Ressource foto
vom Rechner server
in den lokalen Ordner /mnt erfolgt mit einem der beiden Befehle:
# mount.cifs //server/foto /mnt -o username=johanna
# mount -t cifs -o username=johanna //server/foto /mnt
Beim Einbinden einer Freigabe muss der Benutzername für Samba angegeben werden, über den die Freigabe angefordert wird. Diese Option heißt -o username
. Anschließend wird an der Konsole das Passwort dieses Benutzers eingefordert werden.
Der Inhalt des Verzeichnisses /mnt gehört anschließend root. Um die Freigabe einem Benutzer zuzuordnen, wird die Option uid
hinzugefügt. Hier wird die Freigabe foto
dem lokalen Benutzer paul zugewiesen.
# mount -t cifs -o username=johanna,uid=paul //server/foto /mnt
Die Verbindung kann mit dem normalen umount
wieder aufgelöst werden:
# umount /mnt
Soll eine SMB-Freigabe bereits beim Booten des Rechners eingebunden werden, muss ein entsprechender Eintrag in der Datei /etc/fstab (siehe Kapitel 7) hinterlegt werden. Jede Zeile enthält die folgenden Bestandteile:
cifs
angegeben.Für das Einhängen wird ein Passwort benötigt, das nicht in der Datei /etc/fstab stehen sollte, da diese Datei für alle Benutzer eines Systems einsehbar ist. Darum wird eine Credentials-Datei verwendet, die Benutzerkennung und Passwort enthält und vor den Blicken der anderen Benutzer des Systems verborgen werden kann.
//server/foto /media/foto cifs
credentials=/home/georg/.smbcredentials 0 0
Da eine Papierseite am rechten Rand ein natürliches Ende findet, habe ich die Zeile umbrochen. Das war einfacher, als diese Seite im Querformat drucken zu lassen. Verwenden Sie in der Datei /etc/fstab bitte nur eine Zeile.
Hinter der Option credentials
wird eine Datei angegeben, die Benutzerkennung und Passwort enthält.
username=georg
password=gehtdichgarnichtsan
Anstatt die Freigabe bereits beim Booten in den Verzeichnisbaum einzuhängen, ist es klüger, dem Benutzer die Möglichkeit anzubieten, es einzuhängen, wenn er es benötigt. Um einem normalen Benutzer zu ermöglichen, ein Dateisystem per mount
einzuhängen, muss dieses Recht in der Konfigurationsdatei für Dateisysteme /etc/fstab hinterlegt sein.
Dazu werden folgende Optionen benötigt:
mount
für dieses Dateisystem ausführen.Der Eintrag in der Datei /etc/fstab lautet beispielsweise:
# /etc/fstab
//server/foto /media/foto cifs noauto,users,username=johanna 0 2
Das Passwort für johanna
können Sie einfach weglassen. Es wird dann vom Aufrufer des mount
-Befehls eingefordert.
$ mount.cifs //server/foto
Die eingebundene Freigabe gehört anschließend dem Benutzer, der den Befehl mount
aufgerufen hat.
Bisher haben wir mit dem Befehl smbpasswd
nur einen Benutzer johanna
angelegt. Das macht es sehr einfach, weil nur johanna
die Daten lesen und verändern kann.
Schwieriger wird es, wenn es mehrere Samba-Benutzer gibt. Schließlich arbeitet jeder Samba-Benutzer mit einem Linux-Gegenstück. Wenn johanna
eine Datei per Samba anlegt, gehört sie ihr auch. Standardmäßig weist Samba die Rechte 744 zu. Das bedeutet, dass nur sie sie ändern kann und alle anderen Benutzer sie nur lesen dürfen.
Gibt es einen zweiten Samba-Benutzer anna
, kann dieser wiederum Dateien anlegen, die aber dann für johanna
nur lesbar sind. Je mehr Benutzer im Spiel sind, desto unübersichtlicher wird die Situation.
Darum ist es gut, dass man die Benutzer für jede Freigabe separat festlegen kann.
Freigaben können auf einzelne berechtigte Benutzer begrenzt werden (valid users
). Dazu zählen Sie die zugelassenen Benutzer nach der Option valid users
auf. Die Benutzernamen werden kommasepariert aufgeführt. Mit der Option invalid users
werden Benutzer ausgeschlossen.
valid users = johanna, paul, inga
invalid users = georg
Da mehrere Benutzer sich gegenseitig behindern können, ist es manchmal am einfachsten, nur einen Benutzer für eine Freigabe zu definieren, der im Namen aller zulässigen Benutzer arbeitet. Dazu gibt es die Einstellung force user
. In diesem Fall werden alle berechtigten Zugriffe auf einen Benutzer umgeleitet. Die Option force user
legt den Benutzer fest, unter dem Dateien und Verzeichnisse angelegt werden.
valid users = johanna, paul, inga
force user = johanna
Samba kann Freigaben für alle freigeben. Was Linux als »die Welt« bezeichnet, sind für Samba Gäste. Jede Freigabe kann mit der Option guest ok
den Zugriff für Gäste öffnen.
Sowohl Gäste als auch Benutzer arbeiten unter ihrem eigenen Konto und können so Dateien anlegen, die von den jeweils anderen Benutzern nicht verändert werden können.
Sie können auf diese Freigabe nicht nur über die Samba-Benutzerkennung zugreifen. Jeder andere darf dies ganz ohne Passwort auch. Gäste werden dem Linux-Benutzer nobody
zugewiesen.
Grundsätzlich sind Freigaben nur lesbar. Das bedeutet, dass die Einstellung read only
auf true
steht und writeable
auf false
. Diese Situation ist meist unkritisch. Will man nicht alle mitlesen lassen, kann man sie mit den Benutzereinträgen aussperren.
Kippt man eine der Variablen, stehen die Freigaben grundsätzlich zur Veränderung offen. So kann jeder Benutzer fremde Dateien lesen, aber nur die eigenen Dateien verändern.
Mit der Option write list
kann eingeschränkt werden, welche Benutzer schreiben dürfen. Dazu wird zunächst die Freigabe auf read only
gesetzt.
write list = johanna, paul
Standardmäßig erhalten über Samba erzeugte Dateien die Berechtigung 744. Das bedeutet, dass der Anleger sie verändern und ausführen kann, alle anderen zum Lesen verdammt sind. Bei Verzeichnissen ist die Vorgabe 755, die anderen Benutzern immerhin das Lesen und Betreten erlauben. Das Anlegen oder Löschen von Dateien ist allerdings ausgeschlossen.
Das kann man ändern, indem bei einer Freigabe create mask
und directory mask
nach den eigenen Wünschen anpasst. Im folgenden Beispiel erhalten nun alle neu erzeugten Dateien Schreib- und Leserecht für alle. Und die Änderung der Verzeichnisrechte sorgt dafür, dass in den neu angelegten Unterverzeichnissen alle hemmungslos Dateien und Verzeichnisse anlegen und löschen dürfen.
create mask = 766
directory mask = 777
Sie können nun beliebig viele Freigaben anlegen und diese in ihren Rechten und Zugriffen unterschiedlich gestalten. Samba kennt neben den Freigaben noch ein paar Besonderheiten.
Unter der Freigabe homes
kann der SAMBA-Server jedem Benutzer sein Heimatverzeichnis zur Verfügung stellen. Existiert eine solche Freigabe, kann jeder Benutzer eine Freigabe mit seinem eigenen Namen öffnen. Für den Anwender johanna hieße das Heimatverzeichnis auf dem Server server also //server/johanna
. Auf der Serverseite handelt es sich um das Verzeichnis, das laut der passwd-Datei das Benutzerverzeichnis ist.
Die Freigabe für homes
unterscheidet sich in einigen Details von den üblichen Freigaben.
# /etc/samba/smb.conf
[homes]
browseable = no
read only = no
valid users = %S
Die Option browseable
wird bei homes
auf no
gesetzt, damit das Benutzerverzeichnis nicht unter dem Namen homes erscheint.
Die Option valid users
wird mit %S
besetzt. Das steht für den Freigabenamen, der im Falle von homes mit dem des Benutzernamens identisch ist. Sie könnten also auch %U
für den Benutzernamen verwenden. In beiden Fällen sorgt es dafür, dass nur der Benutzer selbst sein Heimatverzeichnis öffnen kann.
Da der Ort des Benutzerverzeichnisses durch die Datei /etc/passwd vorgegeben wird, braucht die Ressource homes keine Option path
.
Ein Samba-Dateisystem kennt von Haus aus keine symbolischen Links. Sie können diese allerdings zulassen, indem Sie die Option unix extensions
einschalten. Nun kann ein POSIX-fähiger Client, wie beispielsweise ein Linux-System, einen symbolischen Link als einen solchen sehen und behandeln. Damit Windows-Systeme nicht verzweifeln, kann unix extensions
auf No
gesetzt werden.
Vermutlich interessanter ist die Frage, wie mit Links in Freigabe-Verzeichnissen umgegangen werden soll. Die Option follow symlinks
schreibt vor, dass den symbolischen Links gefolgt wird. Diese Option ist standardmäßig gesetzt. Nicht gesetzt ist der Parameter wide links
. Dieser erlaubt nämlich, symbolischen Links zu folgen, die aus der Freigabe herausführen. Das ist insofern problematisch, als dass ein solcher Link Bereiche im Netz veröffentlichen könnte, mit denen der Administrator nicht unbedingt rechnet.
[global]
unix extensions = No
follow symlinks = Yes
[Filme]
...
wide links = Yes