Linux-Server: Samba
Willemers Informatik-Ecke
SAMBA ist ein Linux/UNIX-Server, der es mehreren Benutzern ermöglicht, Dateien und Verzeichnisse zu teilen und abwechselnd zu bearbeiten. Seinen Ursprung im Namen und seinem Dienst hat SAMBA im Protokoll Server Message Block (SMB), das Microsoft für Windows entwickelte.

Aufgrund seiner Herkunft ist das gelieferte Dateisystem nicht POSIX-kompatibel und kann darum die Dateieigenschaften eines Linux- oder UNIX-Systems nur unzugreichend abbilden. Wird ein Dateiserver im POSIX-Umfeld benötigt, ist das Network File System (NFS) das Mittel der Wahl.

Installation

Samba kommt in jeder Linux-Distribution vor. Unter Debian, Ubuntu und Linux Mint wird sie mit dem Befehl apt installiert. Dazu müssen Sie Administratorrechte besitzen.

server # apt install samba

Konfiguration

Die installierte Konfigurationsdatei schiebt man sich am besten zur Seite, da in den Kommentaren viele Hilfestellungen stehen. Für unsere Zwecke fangen wir mit einer sehr kleinen Konfigurationsdatei an.
server # cd /etc/samba
server # mv smb.conf smb.conf.orig
Mit dem folgenden Befehl rufen Sie das eingebaute Manual für die SAMBA-Konfigurationsdatei auf und erhalten weitere Hinweise.
man smb.conf
Wir öffnen die nun leere Samba-Konfigurationsdatei. Statt vi können Sie auch nano verwenden.
server # vi smb.conf
Es gibt einen globalen Bereich, der sich auf den ganzen Server bezieht. Es folgen, mit rechteckigen Klammern gekennzeichnet, sogenannte Shares, also Freigaben von Verzeichnissen.
[global]
    workgroup = WILLEMER
[foto]
    path = /var/samba/foto
    read only = no
Achten Sie darauf, dass es den Pfad, der hinter path genannt wird, auch wirklich gibt. Ändern Sie die Rechte so, dass jeder Benutzer darin lesen und schreiben kann. Am einfachsten geschieht das mit dem folgenden Befehl:
server # mkdir /var/samba
server # mkdir /var/samba/foto
server # chown 777 /var/samba/foto
Mit dem Befehl testparm können Sie sich Ihre Konfiguration anschauen.
server # testparm
Anschließend können Sie den Server des SMB-Dienstes starten, der smbd (für Samba-Demon) heißt.
server # systemctl restart smbd

Benutzer

Für den Zugriff auf die Freigaben muss sich der Benutzer ausweisen. Das wird üblicherweise über User und Passwort erledigt. Als Basis für einen Samba-Benutzer wird immer ein Benutzer des Linux-Servers benötigt. Der wird wie üblich mit dem Befehl adduser angelegt.
server # adduser mueller
Es wird nach einem Passwort gefragt. Anschließend noch ein paar Eingaben wie Telefonnummer oder Büro, die ignoriert werden können. Anschließend wird der Linux-Benutzer mueller angelegt.

Der Benutzer benötigt explizit ein SMB-Passwort, das mit dem Befehl smbpasswd -a angelegt wird.

server # smbpasswd -a mueller
Eine Liste der SAMBA-User erhält man mit dem Befehl pdbedit -L.

Test über einen Linux-Client

Sie können auf die Freigabe direkt über einen Linux-Dateimanager wie Caja oder Nautilus zugreifen. Doppelklicken Sie den persönlichen Ordner. Dann geben Sie smb:// gefolgt von der IP-Adresse oder dem Namen Ihres Servers in die Adresszeile ein. Wenn der Dateimanager keine Adresszeile anzeigt, drücken Sie [Strg]+[L].

Anschließend sollten Sie den Namen Ihrer Freigabe sehen (hier foto). Klicken Sie darauf doppelt, können Sie diese anonym oder durch Eingabe von Benutzer und Passwort öffnen.

Test über einen Windows-Client

Öffnen Sie einen Explorer ([Windows]+[E]). Geben Sie zwei Backslashzeichen ein, gefolgt von der IP-Adresse oder dem Namen Ihres Servers. Anschließend sollten Sie den Namen Ihrer Freigabe sehen (hier foto). Klicken Sie darauf doppelt, Sie werden nun aufgefordert, Benutzer und Passwort einzugeben.

Benutzer und deren Einschränkungen

Wenn mehrere Benutzer mit verschiedenen Rechten auf Dateien und Verzeichnissen zugreifen, kann es schnell zu Konflikten führen.

Gäste willkommen?

Eine Freigabe kann auch ohne Passwort verwendet werden, wenn der Freigabe Gäste erlaubt.

[foto]
    guest ok = Yes
    path = /var/samba/fotos
    read only = No

Linux verwendet für den Gastzugang des SMB den Benutzer nobody und die Group nogroup.

Da hier die Freigabe pauschal auf read only = no gesetzt ist, dürfen auch Gäste schreiben. Sollen Gäste nur lesen dürfen, aber nicht schreiben, sollte statt dem pauschalen read only (bzw writeable) eine write list angelegt werden.

Anonymes Anmelden ohne Passwort gelingt mit dem Dateimanager des Linux-Desktops MATE problemlos, da er eine entsprechende Option anbietet. Der Windows-Explorer dagegen will ein Passwort sehen.

Allgemein gilt, dass viele SMB-Clients Benutzer und Passwörter einfordern, obwohl der Server sie grundsätzlich nicht erfordern würde.

Der Gastzugang kann ausgeschlossen werden:

[global]
    ...
    map to guest = bad user

Konflikte zwischen Benutzerrechten

Problematisch kann es werden, wenn unterschiedliche Benutzer und Gäste Dateien oder Verzeichnisse anlegen. Hier hat der SMB-Benutzer erna ein Verzeichnis huhu angelegt.

# ls -la
insgesamt 248
drwxrwxrwx 3 root  root    4096 Nov 24 15:14 .
drwxr-xr-x 3 root  root    4096 Nov 24 09:32 ..
drwxr-xr-x 2 erna  erna    4096 Nov 24 15:14 huhu

Würde der Benutzer mueller im Verzeichnis huhu eine Datei anlegen wollen, würde er den Fehler "Permission denied" erhalten, weil nur erna darin schreiben darf.

Lösungsansätze

Benutzerlisten

Eine Freigabe kann nur für bestimmte Benutzer freigegeben werden, indem die zugelassenen Benutzer hinter der Option valid users aufgelistet werden. Es können auch einzelne Benutzer mit invalid users ausgeschlossen werden.
valid users = johannes, paul, georg, richard
invalid users = michael, robert
Mit einer ähnlichen Liste lassen sich die Schreibrechte auf bestimmte Benutzer einschränken. Die Option heißt write list.
write list = paul, georg

Benutzerverzeichnisse

Jeder der SAMBA"=Anwender besitzt auch ein Benutzerkonto unter Debian und dementsprechend auch ein dazugehöriges Benutzerkonto. Dieses wird von SAMBA dem jeweiligen Anwender zugeordnet, aber nur gegen Anmeldung freigegeben. Das Benutzerverzeichnis wird in der Datei smb.conf durch den Freigabenamen homes konfiguriert.
[homes]
    comment = Freigabe des Home-Verzeichnisses
    valid users = %U
    write list = %U
Der Parameter %U steht für den Namen des angemeldeten Benutzers. In einigen Dokumentationen finden Sie an dieser Stelle auch %S. Das steht für den Freigabenamen, der im Falle von homes mit dem des Benutzernamens identisch ist. Die Freigabe trägt jeweils den Namen des Benutzers. Der Benutzer georg wird sein Benutzerverzeichnis über den Pfad smb://server/georg aufrufen.

Einhängen einer Freigabe

Das dauerhafte Einhängen von Freigaben als Erweiterung des lokalen Datei- und Verzeichnisraums ist natürlich sehr bequem und hat sich darum auch in weiten Teilen von Firmennetzwerken etabliert.

Man sollte aber nicht außer Acht lassen, dass genau solche Netzwerkstrukturen die Verbreitung und die Gefährlichkeit von Ransom-Viren fördert.

Einhängen einer Freigabe in Linux

Eine Freigabe kann mit dem Befehl mount in den Verzeichnisbaum eingebunden werden, wie man es auch bei Festplatten tut. Dazu wird die Option -t cifs oder der Befehl mount.cifs aufgerufen.

client # mount -t cifs //193.175.188.253/foto /mnt -o user=mueller
Password for mueller@//193.175.188.253/foto:  ***
Prinzipiell kann mit den Optionen des mount-Befehls eine Einbindung in der /etc/fstab erfolgen. Allerdings muss User und Passwort in einer Credential-Datei abgelegt werden.

# /etc/fstab
//server/foto /media/foto cifs credentials=/home/mueller/.smbcredentials  0 0
Die Datei .smbcredentials muss mit chmod 600 vor den neugierigen Blicken anderer Benutzer verborgen werden. Die Datei enthält Benutzername und Passwort
username=mueller
password=gehtdichgarnichtsan

Das Aushängen funktioniert wie bei Festplatten auch über den Befehl umount.

client # umount /mnt

Einhängen einer Freigabe als Windows-Laufwerk

Unter Windows kann die Freigabe als virtuelles Laufwerk (hier U:) mit dem Befehl \befehl{net use} eingebunden werden:
net use u: \\192.168.0.114\foto erna /user:erna