Blog

SMB-Shares unter Linux und Windows: Die Fallstricke die niemand erwähnt

12. November 2025 · 11 min Lesezeit
SambaSMBWindowsLinuxNetzwerkDateisharing Samba SMB Windows Linux Netzwerk Dateisharing

SMB-Dateifreigaben zwischen Linux und Windows klingen simpel: Samba installieren, eine Freigabe konfigurieren, fertig. In der Praxis scheitert es an überraschenden Stellen — deutschen Windows-Locale, unsichtbaren Berechtigungsproblemen oder einem Credential-Cache, der veraltete Zugangsdaten hartnäckig festhält.

Samba verstehen: Was es ist und was nicht

Samba ist eine freie Implementierung des SMB/CIFS-Protokolls für Unix-Systeme. Es ermöglicht Linux-Servern, als Windows-Dateiserver zu agieren — inklusive Active-Directory-Integration, Druckerfreigaben und Netlogon-Diensten. Für die meisten Heimanwender und kleine Büros reicht die einfache Standalone-Konfiguration ohne AD.

SMB existiert in mehreren Versionen. SMB1 ist tot — es war die Grundlage für WannaCry und sollte auf keinem Produktivsystem mehr laufen. SMB2 (Windows Vista+) und SMB3 (Windows 8+) sind die aktuellen Standards. Samba unterstützt alle, aber SMB1 sollte explizit deaktiviert werden:

[global]
min protocol = SMB2

Die smb.conf Grundstruktur

Eine funktionale, sichere Basis-Konfiguration:

[global]
   workgroup = WORKGROUP
   server string = Samba Server
   netbios name = FILESERVER
   security = user
   map to guest = bad user
   dns proxy = no
   min protocol = SMB2
   server min protocol = SMB2
   # Logging
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file

[daten]
   comment = Gemeinsame Daten
   path = /srv/samba/daten
   browseable = yes
   read only = no
   guest ok = no
   valid users = @smb-users
   create mask = 0664
   directory mask = 0775
   force group = smb-users

Das deutschen-Locale-Problem: Jeder statt Everyone

Wer auf einem deutschen Windows-System SMB-Freigaben einrichtet oder Berechtigungen über die GUI vergibt, stößt auf eine versteckte Falle: Die Windows-interne Gruppe "Everyone" heißt in der deutschen Locale "Jeder". Das ist keine Anzeige — der interne Name der Gruppe ist tatsächlich lokalisiert.

Das bedeutet: Wenn man in der deutschen Windows-GUI Berechtigungen für "Jeder" setzt und diese dann auf einem Samba-Server überprüft oder via Kommandozeile konfiguriert, muss man den deutschen Begriff verwenden. Ein häufiger Fehler beim Einrichten von Freigaben via net use oder beim Debuggen via smbclient:

# Auf deutschem Windows: Freigabe verbinden
net use Z: \server\daten /persistent:yes

# Berechtigungen prüfen (deutsche Locale)
icacls "\server\daten"
# Ausgabe zeigt: JEDER:(OI)(CI)(RX)

In Samba-Konfigurationen selbst spielt das keine Rolle — dort arbeitet man mit Unix-Benutzern und -Gruppen. Aber bei der Fehlersuche ist es wichtig zu wissen, warum "Everyone" in der Fehlermeldung nicht auftaucht, sondern "Jeder".

Berechtigungsmodell: Unix vs. Windows ACLs

Hier liegt eine der fundamentalsten Quellen für Verwirrung. Linux hat ein einfaches Berechtigungsmodell (Owner, Group, Others × Read/Write/Execute). Windows hat ACLs (Access Control Lists) mit feingranularen Berechtigungen pro Benutzer/Gruppe.

Samba kann beides — aber in der Standardkonfiguration werden Windows-ACLs auf Unix-Berechtigungen gemappt, was zu Verlusten führt. Wer volle Windows-ACL-Unterstützung braucht, muss Extended Attributes aktivieren:

[global]
   vfs objects = acl_xattr
   map acl inherit = yes
   store dos attributes = yes

[freigabe]
   path = /srv/samba/freigabe
   acl_xattr:ignore system acls = yes

Das Dateisystem muss dann mit ACL-Unterstützung gemountet sein:

# /etc/fstab Eintrag
/dev/sdb1  /srv/samba  ext4  defaults,acl,user_xattr  0  2

Samba-Benutzer vs. Unix-Benutzer

Samba hat eine eigene Passwort-Datenbank, getrennt vom Unix-Shadow-System. Ein Unix-Benutzer muss explizit als Samba-Benutzer angelegt werden:

# Unix-Benutzer anlegen (ohne Shell, kein Login)
sudo useradd -M -s /usr/sbin/nologin -G smb-users sambauser

# Samba-Passwort setzen (separat vom Unix-Passwort!)
sudo smbpasswd -a sambauser

# Benutzer aktivieren
sudo smbpasswd -e sambauser

# Benutzer auflisten
sudo pdbedit -L

Viele Admins vergessen, dass das Ändern des Unix-Passworts das Samba-Passwort nicht ändert und umgekehrt — sie sind vollständig getrennt.

Der Credential-Cache unter Windows

Windows cached SMB-Credentials aggressiv. Wenn man das Passwort eines Samba-Benutzers ändert, merkt Windows das oft nicht — und versucht weiter mit dem alten Passwort zu verbinden, was zu kryptischen Zugriffsfehlern führt.

# Windows: Alle gecachten Credentials löschen
# Über Systemsteuerung → Anmeldeinformationsverwaltung
# oder via Kommandozeile:
cmdkey /list                     # Alle gespeicherten Credentials anzeigen
cmdkey /delete:SERVERNAME        # Spezifische löschen

# Netzlaufwerk trennen und neu verbinden
net use Z: /delete
net use Z: \serverreigabe /user:sambauser

Debugging: Die wichtigsten Tools

# Konfiguration testen
testparm

# Verbindung vom Linux-Client aus testen
smbclient -L //server -U sambauser
smbclient //server/freigabe -U sambauser

# Namensauflösung testen
nmblookup SERVERNAME

# Logs in Echtzeit
tail -f /var/log/samba/log.smbd

# Verbundene Sessions anzeigen
smbstatus

Performance-Tuning

Samba ist in der Standardkonfiguration nicht auf Performance optimiert. Für schnelle Netzwerke (Gigabit/10-Gigabit) helfen folgende Einstellungen:

[global]
   # Socket-Optionen für besseren Durchsatz
   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
   read raw = yes
   write raw = yes
   # Async IO
   aio read size = 1
   aio write size = 1
   # SMB3 Multichannel (mehrere Netzwerkpfade nutzen)
   server multi channel support = yes

Fazit

Samba-Konfiguration hat viele versteckte Tücken: das Berechtigungsmodell-Mismatch zwischen Unix und Windows, die getrennte Credential-Datenbank, aggressive Windows-Credential-Caches und sprachspezifische Gruppennamen. Wer diese Fallstricke kennt, löst die meisten SMB-Probleme in Minuten statt Stunden. Die wichtigste Regel: SMB1 deaktivieren, testparm nach jeder Änderung, und bei Berechtigungsproblemen immer zuerst den Windows-Credential-Cache leeren.

Samba als Active Directory Domain Controller

Für größere Umgebungen kann Samba nicht nur als einfacher Fileserver, sondern als vollständiger Active Directory Domain Controller betrieben werden. Das ist für kleine Unternehmen oder Heimlabs interessant, die Windows-Domänen-Authentifizierung ohne Microsoft-Server wollen.

# Samba AD DC provisionieren
samba-tool domain provision   --use-rfc2307   --realm=EXAMPLE.LOCAL   --domain=EXAMPLE   --adminpass='Sicheres!Passwort1'

# DNS-Backend (Samba intern oder BIND9)
--dns-backend=SAMBA_INTERNAL

# Nach Provisioning
systemctl start samba-ad-dc
systemctl enable samba-ad-dc

# Domain prüfen
samba-tool domain level show

Als AD DC übernimmt Samba: LDAP für Verzeichnisdienste, Kerberos für Authentifizierung, DNS für die Domänenauflösung und SMB/CIFS für Dateifreigaben. Windows-Clients können sich dann zur Domäne joinen wie bei einem echten Windows-Server.

MacOS und SMB: Die Apple-Besonderheiten

MacOS unterstützt SMB nativ, hat aber einige Eigenheiten die zu Problemen führen können:

# smb.conf Optimierungen für MacOS-Clients
[global]
   # MacOS bevorzugt diese Settings
   vfs objects = catia fruit streams_xattr
   fruit:metadata = stream
   fruit:model = MacSamba
   fruit:posix_rename = yes
   fruit:veto_appledouble = no
   fruit:wipe_intentionally_left_blank_rfork = yes
   fruit:delete_empty_adfiles = yes

[freigabe]
   path = /srv/samba/daten
   fruit:time machine = yes    # Für Time-Machine-Backups

Das fruit VFS-Modul implementiert das AFP-Protokoll über SMB — für MacOS-Clients transparent, ermöglicht aber korrekte Handhabung von MacOS-spezifischen Metadaten und Time-Machine-Backups.

Recycle Bin: Gelöschte Dateien wiederherstellen

Ein häufiger Wunsch in Büroumgebungen: Einen "Papierkorb" für SMB-Shares. Samba unterstützt das über das recycle-VFS-Modul:

[dokumente]
   path = /srv/samba/dokumente
   vfs objects = recycle
   recycle:repository = .recycle
   recycle:keeptree = yes
   recycle:versions = yes
   recycle:touch = yes
   recycle:directory_mode = 0777
   recycle:exclude = *.tmp *.temp ~$*
   recycle:exclude_dir = .git .svn tmp

Gelöschte Dateien landen im versteckten Ordner .recycle innerhalb der Freigabe statt sofort gelöscht zu werden. Ein Cron-Job räumt den Papierkorb regelmäßig auf:

# Cron: Dateien älter als 30 Tage aus Papierkorb löschen
0 2 * * * find /srv/samba/dokumente/.recycle -mtime +30 -delete

Performance-Analyse mit smbstatus und iotop

# Aktive Verbindungen und offene Dateien anzeigen
smbstatus --shares
smbstatus --processes
smbstatus --locks

# Durchsatz messen (vom Windows-Client)
# Via PowerShell:
$bytes = (Get-Item \server\share	estfile.bin).Length
$time = Measure-Command { Copy-Item \server\share	estfile.bin C:	emp	est.bin }
$throughput = $bytes / $time.TotalSeconds / 1MB
Write-Host "$throughput MB/s"

Sicherheitshärtung: Signing und Encryption

SMB-Signing verhindert Man-in-the-Middle-Angriffe auf SMB-Verbindungen. SMB-Encryption (ab SMB3) verschlüsselt den Datentransfer end-to-end.

[global]
   # SMB-Signing erzwingen
   server signing = mandatory
   client signing = mandatory

   # SMB3-Encryption für sensible Shares
   smb encrypt = required

   # Nur moderne SMB-Versionen
   min protocol = SMB2
   max protocol = SMB3

Wichtig: server signing = mandatory kann die Performance um 10–20% reduzieren, da jedes Paket signiert werden muss. Für Büroumgebungen mit nicht-sensiblen Daten ist auto (Signing wenn der Client es unterstützt) oft der bessere Kompromiss.

Winbind: Windows-Domain-Benutzer auf Linux

Für Umgebungen die sowohl Windows-Domain-Benutzer als auch lokale Linux-Benutzer auf Samba-Shares zulassen wollen, ist Winbind die Lösung. Winbind übersetzt Windows-Domain-Identitäten in Unix-UIDs/GIDs:

# /etc/samba/smb.conf — Winbind-Konfiguration
[global]
   security = ADS
   realm = EXAMPLE.LOCAL
   workgroup = EXAMPLE
   winbind use default domain = yes
   winbind enum users = yes
   winbind enum groups = yes
   template homedir = /home/%U
   template shell = /bin/bash

# Domain beitreten
net ads join -U Administrator

# Winbind starten
systemctl enable --now winbind

# Domain-Benutzer testen
wbinfo -u    # Alle Domain-Benutzer
id "EXAMPLE\john"  # UID/GID eines Domain-Benutzers

Samba mit systemd-Hardening

Samba-Dienste lassen sich unter systemd mit Sandboxing-Optionen absichern. Obwohl Samba keine direkte systemd-Override-Unterstützung für alle Optionen hat, lässt sich die Service-Unit anpassen:

# /etc/systemd/system/smbd.service.d/override.conf
[Service]
# Kein schreibender Zugriff auf /etc und andere kritische Verzeichnisse
ReadOnlyPaths=/etc
# Private temporäre Verzeichnisse
PrivateTmp=yes
# Kein Zugriff auf /proc anderer Prozesse
ProtectProc=invisible
# System-Calls einschränken
SystemCallFilter=@system-service
SystemCallErrorNumber=EPERM

Automatisches Einhängen auf Windows-Clients via GPO

In Unternehmensumgebungen mit Active Directory können SMB-Shares automatisch per Group Policy für alle Domain-Computer eingebunden werden — ohne manuelle Konfiguration auf jedem Client:

# Gruppenrichtlinie: User Configuration
# → Preferences → Windows Settings → Drive Maps
# → New → Mapped Drive
# Location: \serverreigabe
# Drive Letter: Z
# Action: Create (oder Update für bestehende)
# Reconnect: Ja

# Für Samba-Shares: Kerberos-Authentifizierung über AD nutzen
# Keine Passwort-Prompts, nahtlose Integration

Nextcloud vs. SMB: Wann welches?

Eine häufige Frage im Selbsthoster-Kontext: Soll ich SMB/Samba oder Nextcloud für die Dateiablage nutzen? Die Antwort hängt vom Anwendungsfall ab. SMB ist ein Protokoll für lokales Netzwerk-Dateifreigaben — es glänzt bei großen Dateien, direktem Dateisystem-Zugriff und Integration in Windows-Explorer. Nextcloud ist eine Webanwendung mit eigenem Protokoll, die zusätzlich Kalender, Kontakte, Kollaboration und Zugriff von außen (ohne VPN) bietet.

Sinnvolle Kombination: SMB für interne Dateiablage (Videos, Backups, Arbeitsordner), Nextcloud für den selektiven Außenzugriff und Synchronisation mit Smartphones. Nextcloud kann SMB-Shares als externen Speicher einbinden — so hat man einen Browser-/App-Zugang zu SMB-Daten ohne die SMB-Ports ins Internet zu öffnen.

# Nextcloud: SMB-Share als externen Speicher einbinden
# In der Nextcloud Admin-UI:
# Settings → External Storage → Add Storage
# Backend: SMB / CIFS
# Server: 192.168.1.10
# Share: /dokumente
# Username/Password: Samba-Credentials

Samba Audit-Logging

In regulierten Umgebungen (oder wenn man schlicht wissen will wer welche Dateien zugreift) bietet Samba detailliertes Audit-Logging über das full_audit-VFS-Modul:

[dokumente]
   path = /srv/samba/dokumente
   vfs objects = full_audit
   full_audit:prefix = %u|%I|%m
   full_audit:success = open read write mkdir rename unlink rmdir
   full_audit:failure = open
   full_audit:facility = local5
   full_audit:priority = NOTICE

Die Logs gehen an syslog (Facility local5) und können von dort in Graylog oder Elasticsearch aggregiert werden. Das gibt einen vollständigen Audit-Trail: Wer hat wann welche Datei geöffnet, geändert oder gelöscht.

Docker mit Samba: NAS-ähnliche Konfiguration

Wer Samba containerisiert betreiben will (z.B. auf einem Proxmox-LXC-Container mit Docker), sollte auf die Netzwerkkonfiguration achten. Samba nutzt NetBIOS für die Namensauflösung im LAN — das funktioniert in Docker-Bridge-Netzwerken nicht ohne Anpassungen:

# docker-compose.yml für Samba
services:
  samba:
    image: dperson/samba
    network_mode: host  # host-Netzwerk für NetBIOS-Broadcasts
    environment:
      - USERID=1000
      - GROUPID=1000
    volumes:
      - /srv/daten:/daten
    command: >
      -u "sambauser;passwort"
      -s "daten;/daten;yes;no;no;sambauser"
      -S  # Keine Drucker

network_mode: host ist bei Samba wichtig: Ohne Host-Netzwerk sind NetBIOS-Name-Broadcasts nicht möglich, was dazu führt, dass der Server im Windows-Explorer unter "Netzwerk" nicht sichtbar ist. Direkte IP-Verbindungen funktionieren aber auch ohne Host-Netzwerk.

Abschließende Empfehlungen

SMB und Samba sind trotz der beschriebenen Fallstricke ausgereifte, zuverlässige Technologien die ihren Job gut machen. Die meisten Probleme entstehen nicht aus fundamentalen Schwächen des Protokolls, sondern aus unvollständiger Konfiguration oder mangelndem Verständnis der Unterschiede zwischen Unix- und Windows-Sicherheitsmodellen.

Eine regelmäßige Überprüfung der Samba-Konfiguration mit testparm -v (das auch alle Default-Werte anzeigt) und das Lesen der Samba-Release-Notes bei Major-Updates schützt vor überraschenden Verhaltensänderungen. Das Samba-Team ist aktiv und gut dokumentiert — die offizielle Dokumentation unter samba.org ist ausführlicher als die meisten Drittanbieter-Guides.

Wer SMB-Shares in einem Heimnetz oder kleinen Büro betreibt, sollte zumindest SMB1 deaktivieren, SMB-Signing aktivieren und die Samba-Instanz regelmäßig aktualisieren. Das sind die drei Maßnahmen mit dem besten Verhältnis aus Aufwand und Sicherheitsgewinn.

SMB ist nach jahrzehntelanger Entwicklung ein stabiles, gut verstandenes Protokoll. Die Fallstricke die in diesem Artikel beschrieben wurden sind bekannt und lösbar — sie setzen nur voraus, dass man sie kennt. Wer Samba korrekt konfiguriert (SMB1 aus, Signing an, korrektes Berechtigungsmodell, Credential-Cache im Griff) betreibt einen zuverlässigen Dateiserver der Windows und Linux gleichermaßen gut bedient.

Samba-Konfiguration ist einer jener Bereiche der IT, wo Dokumentation lesen und Logs analysieren mehr bringt als Trial-and-Error. Die offizielle Samba-Dokumentation unter samba.org ist umfassend, und testparm -v zeigt jeden aktiven Parameter — ein unverzichtbares Debugging-Werkzeug.

War dieser Beitrag hilfreich?


Alle Beiträge Gregor Krebs · 12. November 2025