18 KiB
Samba-Konfiguration für Linux-Einsteiger
Einführung in Samba
Samba ist eine Open-Source-Software, die es Linux-Systemen ermöglicht, Datei- und Druckdienste für Windows-, macOS- und andere Linux-Clients bereitzustellen. Samba implementiert das SMB/CIFS-Protokoll (Server Message Block / Common Internet File System), das in Windows-Netzwerken standardmäßig verwendet wird.
Wichtige Anwendungsfälle:
- Dateifreigaben im lokalen Netzwerk (z. B. für Medien, Dokumente oder Backups).
- Druckerfreigaben für Windows-Clients.
- Zentraler Speicher für mehrere Nutzer (z. B. in kleinen Büros oder Heimnetzwerken).
Voraussetzungen:
- Ein Linux-Server (z. B. Ubuntu, Debian, Raspberry Pi OS).
- Root-Zugriff oder
sudo-Berechtigungen. - Grundkenntnisse in der Linux-Kommandozeile.
Installation von Samba
1. Paketdatenbank aktualisieren
sudo apt update && sudo apt upgrade -y
2. Samba installieren
sudo apt install samba
3. Dienststatus prüfen
sudo systemctl status smbd
Erwarteter Output: active (running). Falls nicht aktiv: sudo systemctl start smbd und sudo systemctl enable smbd.
Zum verlassen q oder strg + c
Die Konfigurationsdatei smb.conf
Die zentrale Konfigurationsdatei /etc/samba/smb.conf steuert das Verhalten des Samba-Servers. Sie ist in zwei Hauptbereiche unterteilt:
[global]: Globale Einstellungen für den gesamten Server. [Freigabename]: Definition einzelner Freigaben (Ordner, Drucker).
Globale Einstellungen [global]
Die globalen Einstellungen gelten für alle Freigaben, sofern sie nicht in einer Freigabe überschrieben werden. Wichtige Optionen für einen Standalone-Server:
[global]
# Netzwerk-Identifikation
workgroup = WORKGROUP # Name der Arbeitsgruppe (wie in Windows)
server string = %h server (Samba, Ubuntu) # Beschreibung des Servers (%h = Hostname)
# Netzwerk-Interfaces
interfaces = 127.0.0.0/8 eth0 # Auf welchen Interfaces soll Samba laufen?
bind interfaces only = yes # Nur auf den genannten Interfaces
# Protokollierung
log file = /var/log/samba/log.%m # Log-Datei pro Client (%m = Client-Name)
max log size = 1000 # Maximale Log-Größe in KB
logging = file # Logs nur in Dateien (nicht syslog)
# Sicherheit
server role = standalone server # Server arbeitet allein (keine Domain)
map to guest = bad user # Unbekannte Nutzer werden als "Gast" behandelt
obey pam restrictions = yes # Nutzer müssen Linux-PAM-Regeln einhalten
unix password sync = yes # Samba-Passwort ändert auch Linux-Passwort
passwd program = /usr/bin/passwd %u # Programm zum Ändern des Passworts
pam password change = yes # PAM für Passwort-Änderungen nutzen
# Nutzerfreigaben
usershare allow guests = yes # Gäste dürfen auf Nutzerfreigaben zugreifen
Hinweise:
; oder #:
; = Deaktivierter Vorschlag (kann aktiviert werden).
# = Standardwert (wird auch ohne Angabe genutzt).
Platzhalter:
%h = Hostname des Servers.
%m = Name des Clients.
%S = Name der aktuellen Freigabe.
Anpassungen an Windows 11
Fügen sie unterhalb dieser Einstellungen im noch im Bereich [Global] :
# Protokolle und Kompatibilität
server min protocol = SMB2
smb encrypt = desired
Freigaben definieren
Freigaben werden in eigenen Abschnitten definiert, z. B. [Musik] oder [Dokumente]. Jede Freigabe hat einen Namen (erscheint im Netzwerk) und Optionen für Zugriffsrechte. Grundlegende Optionen:
| Option | Bedeutung | Beispiel |
|---|---|---|
| comment | Beschreibung der Freigabe (erscheint im Explorer). | comment = Medienarchiv |
| path | Pfad zum freigegebenen Ordner. | path = /srv/samba/musik |
| browseable | yes: Freigabe ist im Netzwerk sichtbar. no: Nur mit direktem Pfad. | browseable = yes |
| read only | yes: Nur Lesezugriff. no: Schreibzugriff erlaubt. | read only = no |
| guest ok | yes: Gäste (ohne Passwort) dürfen zugreifen. | guest ok = yes |
| valid users | Liste der Nutzer/Gruppen, die überhaupt zugreifen dürfen. | valid users = @mitarbeiter |
| write list | Liste der Nutzer/Gruppen, die schreiben dürfen (überschreibt read only). | write list = @teamleitung |
| create mask | Berechtigungen für neue Dateien (oktal). | create mask = 0664 |
| directory mask | Berechtigungen für neue Ordner (oktal). | directory mask = 0775 |
| force group | Neue Dateien/Ordner gehören automatisch zu dieser Gruppe. | force group = mitarbeiter |
Sonderfälle: Home-Verzeichnisse und Drucker
- Nutzer-Home-Verzeichnisse Jeder Nutzer kann automatisch auf sein eigenes Home-Verzeichnis zugreifen:
[homes]
comment = Persönlicher Ordner
browseable = no # Nur der eigene Nutzer sieht die Freigabe
read only = no # Nutzer darf schreiben
valid users = %S # %S = aktueller Nutzer (z. B. "felix")
create mask = 0700 # Neue Dateien: rwx------
directory mask = 0700 # Neue Ordner: rwx------
- Druckerfreigabe Samba kann Drucker für Windows-Clients freigeben:
[printers]
comment = Alle Drucker
path = /var/spool/samba # Spoolfolder für Druckaufträge
browseable = no # Drucker sind nicht im Explorer sichtbar
printable = yes # Erlaubt Druckaufträge
guest ok = no # Nur authentifizierte Nutzer dürfen drucken
[print\$]
comment = Druckertreiber
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
write list = root, @lpadmin # Nur Admins dürfen Treiber hochladen
Rechteverwaltung unter Linux
Die korrekte Vergabe von Datei- und Ordnerrechten ist essenziell für die Sicherheit und Funktionalität von Samba-Freigaben.
chown: Besitzer und Gruppe ändern
Jede Datei/Ordner gehört einem Besitzer (User) und einer Gruppe (Group). Syntax:
sudo chown [BESITZER]:[GRUPPE] [DATEI/ORDNER]
Beispiele:
| Befehl | Wirkung |
|---|---|
| sudo chown felix:mitarbeiter /srv/samba | Besitzer: felix, Gruppe: mitarbeiter. |
| sudo chgrp mitarbeiter /srv/samba | Ändert nur die Gruppe auf mitarbeiter. |
| sudo chown -R nobody:mitarbeiter /srv/samba | Rekursiv: Besitzer: nobody, Gruppe: mitarbeiter für alle Unterordner/Dateien. |
Hinweise:
sudo ist erforderlich, wenn Sie nicht der Besitzer sind. -R (rekursiv): Wendet die Änderung auf alle Unterordner/Dateien an. Samba-Empfehlung: Für Freigaben oft nobody oder root als Besitzer und eine spezifische Gruppe (z. B. mitarbeiter) verwenden.
chmod: Zugriffsrechte setzen
Die Zugriffsrechte werden für drei Kategorien von Nutzern definiert:
Besitzer (User): Der Nutzer, dem die Datei/der Ordner gehört. Gruppe (Group): Die Gruppe, der die Datei/der Ordner zugeordnet ist. Andere (Others): Alle anderen Nutzer.
Jede Kategorie kann drei Rechte haben:
r (Read): Lesen.
w (Write): Schreiben.
x (Execute): Ausführen (bei Ordnern: Betreten).
Symbolische Darstellung:
rwx r-x r--
│ │ │
│ │ └─ Andere (Others): Lesen (r), kein Schreiben (–), kein Ausführen (–)
│ └───── Gruppe (Group): Lesen (r), kein Schreiben (–), Ausführen (x)
└───────── Besitzer (User): Lesen (r), Schreiben (w), Ausführen (x)
Oktal-Darstellung:
Jedes Recht wird durch eine Zahl repräsentiert:
r = 4
w = 2
x = 1
Die Rechte für jede Kategorie werden addiert:
| Rechte | Oktal-Wert | Bedeutung |
|---|---|---|
--- |
0 | Keine Rechte |
--x |
1 | Nur Ausführen |
-w- |
2 | Nur Schreiben |
-wx |
3 | Schreiben + Ausführen |
r-- |
4 | Nur Lesen |
r-x |
5 | Lesen + Ausführen |
rw- |
6 | Lesen + Schreiben |
rwx |
7 | Vollzugriff |
Die Oktal-Modi für alle drei Kategorien werden kombiniert:
755=rwxr-xr-x(Besitzer: Vollzugriff, Gruppe/Andere: Lesen + Ausführen)644=rw-r--r--(Besitzer: Lesen + Schreiben, Gruppe/Andere: Nur Lesen)770=rwxrwx---(Besitzer/Gruppe: Vollzugriff, Andere: Keine Rechte)
Syntax von chmod:
sudo chmod [OPTIONEN] [RECHTE] [DATEI/ORDNER]
-
RECHTE: Symbolisch (z. B.u=rwx,g=rx,o=rx) oder oktal (z. B.755). -
OPTIONEN:-R: Rekursiv (für alle Unterordner/Dateien).
Beispiele:
| Befehl | Wirkung |
|---|---|
| sudo chmod 755 /srv/samba | Besitzer: rwx, Gruppe/Andere: r-x. |
| sudo chmod 644 datei.txt | Besitzer: rw-, Gruppe/Andere: r--. |
| sudo chmod -R 770 /srv/samba | Rekursiv: Besitzer/Gruppe: rwx, Andere: ---. |
| sudo chmod u+x skript.sh | Fügt dem Besitzer das Ausführrecht (x) hinzu. |
| sudo chmod g-w /srv/samba | Entfernt das Schreibrecht für die Gruppe. |
Samba-spezifische Empfehlungen:
Freigabe-Ordner:
775(rwxrwxr-x): Besitzer und Gruppe haben Vollzugriff, Andere dürfen lesen und Ordner betreten.770(rwxrwx---): Nur Besitzer und Gruppe haben Zugriff (empfohlen für sensible Daten).
Dateien in Freigaben:
664(rw-rw-r--): Besitzer und Gruppe dürfen lesen/schreiben, Andere nur lesen.660(rw-rw----): Nur Besitzer und Gruppe dürfen lesen/schreiben.
Gruppenverwaltung
Gruppen ermöglichen die zentrale Steuerung von Zugriffsrechten für mehrere Nutzer.
1. Nutzer und Gruppe erstellen:
sudo adduser felix
sudo addgroup mitarbeiter
2. Nutzer einer Gruppe hinzufügen:
sudo usermod -aG mitarbeiter felix # Fügt "felix" der Gruppe "mitarbeiter" hinzu.
-aG: -a (append) stellt sicher, dass der Nutzer nicht aus anderen Gruppen entfernt wird.
3. Gruppe einer Datei/Ordner zuweisen:
sudo chgrp mitarbeiter /srv/samba/dokumente # Setzt die Gruppe auf "mitarbeiter".
sudo chmod 770 /srv/samba/dokumente # Gruppe erhält Vollzugriff.
4. Gruppe in Samba nutzen:
[Dokumente]
path = /srv/samba/dokumente
valid users = @mitarbeiter # Nur Nutzer der Gruppe "mitarbeiter" dürfen zugreifen.
write list = @teamleitung # Nur Gruppe "teamleitung" darf schreiben.
force group = mitarbeiter # Neue Dateien/Ordner gehören automatisch zur Gruppe "mitarbeiter".
Samba-Freigaben in der Praxis
Beispiel 1: Öffentliche Freigabe
Anwendungsfall: Medienfreigabe für alle Nutzer im Netzwerk (z. B. Musik, Filme). Schritt 1: Ordner erstellen und Rechte setzen
sudo mkdir -p /srv/samba/medien
sudo chown nobody:nogroup /srv/samba/medien # Besitzer: "nobody", Gruppe: "nogroup"
sudo chmod 777 /srv/samba/medien # Temporär volle Rechte (für Test)
Schritt 2: Freigabe in smb.conf definieren
[Medien]
comment = öffentliche Medienfreigabe
path = /srv/samba/medien
browseable = yes
read only = no
guest ok = yes
Schritt 3: Samba neu starten
sudo systemctl restart smbd
Schritt 4: Von Windows aus testen
Im Explorer:
\\<IP-des-Servers>\Medieneingeben.
Beispiel 2: Eingeschränkte Freigabe
Anwendungsfall: Vertrauliche Dokumente für bestimmte Nutzer/Gruppen. Schritt 1: Gruppe und Nutzer anlegen
sudo adduser felix
sudo adduser hans
sudo addgroup mitarbeiter
sudo addgroup teamleitung
sudo usermod -aG mitarbeiter felix
sudo usermod -aG mitarbeiter hans
sudo usermod -aG teamleitung felix
Schritt 2: Ordner erstellen und Rechte setzen
sudo mkdir -p /srv/samba/dokumente
sudo chown nobody:mitarbeiter /srv/samba/dokumente
sudo chmod 770 /srv/samba/dokumente
Schritt 3: Freigabe in smb.conf definieren
[Dokumente]
comment = Vertrauliche Dokumente
path = /srv/samba/dokumente
browseable = yes
read only = no
guest ok = no
valid users = @mitarbeiter # Nur Gruppe "mitarbeiter" darf zugreifen
write list = @teamleitung # Nur Gruppe "teamleitung" darf schreiben
force group = mitarbeiter # Neue Dateien/Ordner gehören zur Gruppe "mitarbeiter"
force create mode = 0660 # Neue Dateien: rw-rw----
force directory mode = 0770 # Neue Ordner: rwxrwx---
Schritt 4: Nutzer zu Samba hinzufügen
sudo smbpasswd -a felix
sudo smbpasswd -a hans
Schritt 5: Samba neu starten
sudo systemctl restart smbd
Schritt-für-Schritt: Neue Freigabe erstellen
1. Ordner anlegen:
sudo mkdir -p /srv/samba/neue_freigabe
2. Besitzer und Gruppe setzen:
sudo chown nobody:mitarbeiter /srv/samba/neue_freigabe
3. Rechte setzen:
sudo chmod 770 /srv/samba/neue_freigabe
4. Freigabe in /etc/samba/smb.conf definieren:
[NeueFreigabe]
comment = Beschreibung der Freigabe
path = /srv/samba/neue_freigabe
browseable = yes
read only = no
guest ok = no
valid users = @mitarbeiter
write list = @teamleitung
5. Konfiguration testen:
sudo samba-tool testparm
6. Samba neu starten:
sudo systemctl restart smbd
Häufige Fehler und Lösungen
| Problem | Ursache | Lösung |
|---|---|---|
| Freigabe nicht sichtbar | browseable = no oder Firewall blockiert Samba. | browseable = yes setzen oder Firewall prüfen (sudo ufw allow samba). |
| Zugriff verweigert | Nutzer nicht in smbpasswd oder falsche Rechte. | sudo smbpasswd -a nutzername ausführen. Rechte mit chmod/chown prüfen. |
| Dateien können nicht gelöscht werden | Nutzer ist nicht Besitzer und hat keine Schreibrechte. | chmod g+w oder chown anpassen. |
| Gruppe wird nicht übernommen | force group fehlt in smb.conf. | force group = gruppenname ergänzen. |
| Neue Dateien haben falsche Rechte | force create mode/force directory mode fehlt. | force create mode = 0660 und force directory mode = 0770 setzen. |
Wichtige Befehle im Überblick
| Befehl | Beschreibung |
|---|---|
sudo apt install samba |
Samba installieren. |
sudo systemctl restart smbd |
Samba-Dienst neu starten. |
sudo samba-tool testparm |
Konfiguration auf Fehler prüfen. |
sudo smbpasswd -a nutzername |
Nutzer zu Samba hinzufügen. |
sudo chown besitzer:gruppe pfad |
Besitzer und Gruppe einer Datei/eines Ordners ändern. |
sudo chmod 755 pfad |
Rechte auf rwxr-xr-x setzen. |
sudo chmod -R 770 pfad |
Rechte rekursiv auf rwxrwx--- setzen. |
sudo adduser nutzername |
Benutzer erstellen. |
sudo addgroup gruppenname |
Gruppe erstellen. |
sudo usermod -aG gruppenname nutzername |
Nutzer einer Gruppe hinzufügen. |
smbclient -L //localhost -U % |
Freigegebene Ordner/Drucker auflisten (lokal). |
Sicherheitshinweise
Minimale Rechte vergeben:
- Vermeiden Sie
chmod 777. Nutzen Sie stattdessen770oder750.
Keine Gastzugriffe für sensible Daten:
- Setzen Sie
guest ok = nofür vertrauliche Freigaben.
Regelmäßige Backups:
- Sichern Sie die
smb.confund wichtige Freigabe-Ordner.
Firewall konfigurieren:
sudo ufw allow samba # Erlaubt Samba-Ports (139, 445).
Logs prüfen:
Fehler finden Sie in /var/log/samba/log.%m.
Anhang: Spezialrechte (Sticky Bit, SUID, SGID)
Für fortgeschrittene Anwendungsfälle können Spezialrechte gesetzt werden:
| Recht | Oktal | Symbolisch | Wirkung |
|---|---|---|---|
| Sticky Bit | 1 | t | Nur der Besitzer darf Dateien in einem Ordner löschen (z. B. /tmp). |
| SUID | 4 | s | Führt eine Datei mit den Rechten des Besitzers aus (z. B. passwd). |
| SGID | 2 | s | Neue Dateien/Ordner erben die Gruppe des Elternordners (nützlich für Samba-Freigaben). |
Beispiele:
| Befehl | Wirkung |
|---|---|
sudo chmod 1777 /tmp |
Setzt das Sticky Bit (nur Besitzer darf Dateien löschen). |
sudo chmod 2775 /srv/samba |
Setzt SGID: Neue Dateien/Ordner erben die Gruppe des Elternordners. |
sudo chmod 4755 /usr/bin/programm |
Setzt SUID: Programm läuft mit Rechten des Besitzers. |
Samba-spezifische Nutzung:
- SGID ist nützlich, um sicherzustellen, dass neue Dateien/Ordner in einer Freigabe automatisch der richtigen Gruppe gehören:
sudo chmod 2770 /srv/samba/dokumente # SGID + Besitzer/Gruppe: rwx