Tutorial
Docker-Samba Setup mit Rechteverwaltung für den Raspberry Pi
Ein pragmatisches Docker-Samba-Setup, bei dem Gruppen, Benutzer und Freigaben zentral über die compose.yaml beschrieben werden, damit interne Netzfreigaben sauber und konsistent auf dieselben Host-Verzeichnisse zugreifen können.
Wie ihr wahrscheinlich bereits festgestellt habt, ist ein internes Samba-Setup schnell aufgesetzt, wird aber unübersichtlich, sobald mehrere Freigaben, Benutzer, Gruppen und unterschiedliche Zuständigkeiten zusammenkommen. Genau an diesem Punkt setzt dieses Docker-Samba-Setup an.
Der Unterschied zu vielen einfachen Samba-Containern besteht hier nicht nur darin, dass ein einzelner Share freigegeben wird, sondern dass Gruppen, Benutzer und Freigaben direkt über die Startparameter aufgebaut werden. Dadurch lässt sich die Konfiguration vergleichsweise kompakt halten, auch wenn mehrere Verzeichnisse mit unterschiedlichen Zugriffsregeln eingebunden werden.
Damit das aber nicht nur beim Containerstart funktioniert, sondern auch später bei den eingebundenen Host-Verzeichnissen sauber bleibt, müssen Gruppenrechte, Benutzerzuordnung und Dateirechte stimmig vorbereitet sein. Genau darum geht es in dieser Anleitung.
Das Setup besteht aus:
- einem Samba-Container auf Basis von Raspberry Pi OS / Debian Bookworm
- mehreren gemounteten Host- oder NAS-Verzeichnissen
- Gruppen, Benutzern und Freigaben, die beim Start übergeben werden
- einer compose.yaml, über die die Freigaben zentral beschrieben werden
Der eigentliche Punkt dieses Setups ist nicht nur Docker selbst, sondern die Frage, wie mehrere Freigaben mit passenden Gruppen und Benutzern konsistent auf dieselben Host-Verzeichnisse zugreifen können.
1. compose.yaml vorbereiten
Zuerst in den Samba-Ordner wechseln und die compose.yaml öffnen:
cd samba
nano compose.yaml
2. Host-Verzeichnisse in der compose.yaml anpassen
In der compose.yaml werden die Verzeichnisse definiert, die später im Container als Samba-Freigaben auftauchen. Genau diese Pfade müssen an eure lokale oder NAS-Struktur angepasst werden.
Beispiel:
volumes:
- /mnt/nas/myname-data:/share/myname-data
- /mnt/nas/myname-handy:/share/myname-handy
- /mnt/nas/myname-paperless:/share/myname-paperless
Wichtig ist dabei:
- links steht immer der Pfad auf dem Host
- rechts steht der Zielpfad im Container
- Samba arbeitet später genau auf diesen gemounteten Verzeichnissen
3. Warum Gruppen, Benutzer und Freigaben in diesem Setup der eigentliche Punkt sind
Der eigentliche Vorteil dieses Setups ist nicht nur, dass Samba in Docker läuft, sondern dass Gruppen, Benutzer und Freigaben beim Start zentral beschrieben werden können.
Die komplette Logik hängt dabei an den command-Parametern der compose.yaml:
- -g legt Gruppen an
- -u legt Benutzer an
- -s erzeugt die Freigaben in der Samba-Konfiguration
Dabei ist es wichtig, die Reihenfolge zu beachten: erst Gruppen, dann Benutzer und zum Schluss der Freigabename (= Gruppenname).
3.1. Gruppen über -g definieren
Die Gruppen werden mit Gruppenname und GID übergeben. In deinem Beispiel sieht das so aus:
-g "w-data:4000"
-g "w-handy:4001"
-g "w-paperless:4002"
Dadurch werden beim ersten Start genau diese Gruppen im Container angelegt. Das ist wichtig, weil die Freigaben später gezielt auf diese Gruppen verweisen.
3.2. Benutzer über -u definieren
Die Benutzerdefinition enthält Benutzername, Passwort, UID und Gruppenzugehörigkeit. Für einen öffentlichen Text sollten Passwörter dabei natürlich nicht im Klartext auftauchen, sondern als Platzhalter:
-u "myname:[[PASSWORT_MYNAME]]:4000:w-data,w-handy,w-paperless"
-u "myname-handy:[[PASSWORT_HANDY]]:4001:w-handy"
-u "myname-paperless:[[PASSWORT_PAPERLESS]]:4002:w-paperless"
Die Struktur ist dabei:
benutzer:passwort:uid:gruppen
Beim Start legt der Container diese Benutzer intern an und setzt sie auch direkt für Samba. Für den Anwender ist dabei nur wichtig, dass die Angaben in der compose.yaml vollständig und korrekt sind. Die eigentliche Benutzeranlage läuft intern im Container und muss nicht manuell als Bash-Skript nachgebaut werden.
3.3. Freigaben über -s definieren
Die Freigaben selbst werden ebenfalls über Startparameter beschrieben:
-s "w-data:/share/myname-data:rw:we"
-s "w-handy:/share/myname-handy:rw:wd"
-s "w-paperless:/share/myname-paperless:rw:wd"
Die Struktur ist:
sharename:pfad:rw-oder-ro:we-oder-wd
Dabei bedeutet in diesem Setup:
- rw = die Freigabe ist beschreibbar
- ro = die Freigabe ist nur lesbar
- we = Recycle / Papierkorb wird aktiviert
- wd = kein Papierkorb, normale Freigabe ohne Recycle-VFS
Aus diesen Angaben baut der Container die eigentlichen Freigaben in der Samba-Konfiguration intern selbst auf. Für den Anwender bedeutet das nur:
- jede Freigabe ist an die passende Gruppe gekoppelt
- Schreib- oder Leserechte werden über rw oder ro gesteuert
- neue Dateien und Ordner landen mit den vorgesehenen Rechten in der jeweiligen Freigabe
Die internen Samba-Zeilen muss man dafür nicht selbst schreiben. Entscheidend ist nur, dass Gruppenname, Freigabename und Pfad in der compose.yaml sauber zusammenpassen.
4. Docker Compose starten
Wenn Pfade, Gruppen, Benutzer und Freigaben korrekt gesetzt sind, kann der Container gebaut und gestartet werden:
sudo docker compose up -d --build
Zur Kontrolle:
sudo docker compose ps
sudo docker logs samba
Der Container öffnet in diesem Setup den Port 445:
ports:
- 445:445
Damit ist der Samba-Dienst im lokalen Netz direkt über den Host erreichbar.
5. Wichtiger Hinweis zu Rechten und Startverhalten
Der Container erstellt nicht nur die Konfiguration, sondern prüft danach auch direkt die eingebundenen Verzeichnisse auf dem Host. Genau das ist der Teil, der in der Praxis besonders wichtig ist.
Für jede Freigabe wird geprüft:
- stimmt die Gruppe des Zielverzeichnisses mit dem Share-Namen überein
- haben Dateien und Ordner die erwarteten Rechte
Wenn das nicht passt, zieht der Container die Gruppen- und Rechtezuordnung beim Start automatisch nach. Das ist praktisch, weil Dateien auf dem Host nicht erst später manuell korrigiert werden müssen. Gleichzeitig ist genau das der Teil, der bei großen Dateimengen viel Zeit kosten kann.
Wenn bei einer Freigabe außerdem we gesetzt ist, wird zusätzlich der Papierkorb aktiviert. Gerade bei Netzfreigaben ist das sinnvoll, wenn versehentlich gelöschte Dateien nicht sofort endgültig verschwinden sollen. Wenn stattdessen wd gesetzt ist, läuft die Freigabe ohne diesen zusätzlichen Papierkorb-Mechanismus.
Wichtig zu wissen:
- dieses Setup ist bewusst pragmatisch für interne Freigaben gedacht
- Benutzer und Passwörter werden über Startparameter übergeben
- Rechteanpassungen laufen rekursiv über die eingebundenen Verzeichnisse
Das ist lokal oder intern sehr bequem, aber natürlich kein besonders strenges Sicherheitsmodell.
6. Ergebnis
Wenn alles richtig vorbereitet ist, hat dieses Setup genau den Vorteil, für den es gedacht ist:
- mehrere Samba-Freigaben lassen sich kompakt über Docker starten
- Benutzer, Gruppen und Freigaben werden zentral über die Compose-Datei beschrieben
- die Rechte der eingebundenen Verzeichnisse werden direkt mit geprüft und notfalls angepasst
- ein Raspberry-Pi- oder internes NAS-Setup lässt sich damit vergleichsweise unkompliziert verwalten
Das ist kein universelles Hochsicherheitsmodell, sondern ein bewusst pragmatisches Samba-Setup für interne Freigaben. Gerade für ein eigenes Netz oder einen Raspberry Pi kann genau dieser Kompromiss aber sinnvoll sein.
7. Zusätzliche Informationen
Um die Rechteverwaltung nicht durcheinander zu bringen, sollte immer über die Samba-Freigabe auf die Dateien zugegriffen werden.
smb://myhost