# Samba-Konfiguration für Linux-Einsteiger *Ein vollständiger Leitfaden zur Einrichtung von Samba-Freigaben, Rechteverwaltung und Gruppen auf einem Standalone-Server* --- ## Inhaltsverzeichnis - [Samba-Konfiguration für Linux-Einsteiger](#samba-konfiguration-für-linux-einsteiger) - [Inhaltsverzeichnis](#inhaltsverzeichnis) - [Einführung in Samba](#einführung-in-samba) - [Wichtige Anwendungsfälle:](#wichtige-anwendungsfälle) - [Voraussetzungen:](#voraussetzungen) - [Installation von Samba](#installation-von-samba) - [1. Paketdatenbank aktualisieren](#1-paketdatenbank-aktualisieren) - [2. Samba installieren](#2-samba-installieren) - [3. Dienststatus prüfen](#3-dienststatus-prüfen) - [Die Konfigurationsdatei smb.conf](#die-konfigurationsdatei-smbconf) - [Globale Einstellungen \[global\]](#globale-einstellungen-global) - [Freigaben definieren](#freigaben-definieren) - [Sonderfälle: Home-Verzeichnisse und Drucker](#sonderfälle-home-verzeichnisse-und-drucker) - [1. Nutzer-Home-Verzeichnisse](#1-nutzer-home-verzeichnisse) - [2. Druckerfreigabe](#2-druckerfreigabe) - [Rechteverwaltung unter Linux](#rechteverwaltung-unter-linux) - [````chown````: Besitzer und Gruppe ändern](#chown-besitzer-und-gruppe-ändern) - [````chmod````: Zugriffsrechte setzen](#chmod-zugriffsrechte-setzen) - [Symbolische Darstellung:](#symbolische-darstellung) - [Oktal-Darstellung:](#oktal-darstellung) - [Beispiele:](#beispiele) - [Gruppenverwaltung](#gruppenverwaltung) - [1. Nutzer und Gruppe erstellen:](#1-nutzer-und-gruppe-erstellen) - [2. Nutzer einer Gruppe hinzufügen:](#2-nutzer-einer-gruppe-hinzufügen) - [3. Gruppe einer Datei/Ordner zuweisen:](#3-gruppe-einer-dateiordner-zuweisen) - [4. Gruppe in Samba nutzen:](#4-gruppe-in-samba-nutzen) - [Samba-Freigaben in der Praxis](#samba-freigaben-in-der-praxis) - [Beispiel 1: Öffentliche Freigabe](#beispiel-1-öffentliche-freigabe) - [Beispiel 2: Eingeschränkte Freigabe](#beispiel-2-eingeschränkte-freigabe) - [Schritt-für-Schritt: Neue Freigabe erstellen](#schritt-für-schritt-neue-freigabe-erstellen) - [Häufige Fehler und Lösungen](#häufige-fehler-und-lösungen) - [Wichtige Befehle im Überblick](#wichtige-befehle-im-überblick) - [Sicherheitshinweise](#sicherheitshinweise) - [Anhang: Spezialrechte (Sticky Bit, SUID, SGID)](#anhang-spezialrechte-sticky-bit-suid-sgid) --- ## 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 ```bash sudo apt update && sudo apt upgrade -y ``` ### 2. Samba installieren ````bash sudo apt install samba ```` ### 3. Dienststatus prüfen ````bash 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: ````ini [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. ```` ## 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 ### 1. Nutzer-Home-Verzeichnisse Jeder Nutzer kann automatisch auf sein eigenes Home-Verzeichnis zugreifen: ````ini [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------ ```` ### 2. Druckerfreigabe Samba kann Drucker für Windows-Clients freigeben: ````ini [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: ````bash sudo chown [BESITZER]:[GRUPPE] [DATEI/ORDNER] ```` Beispiele: |Befehl| Wirkung| |-|-| |sudo chown felix:mitarbeiter /srv/samba|Besitzer: felix, Gruppe: mitarbeiter. | |sudo chown :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: ````bash 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: ````bash sudo adduser felix sudo addgroup mitarbeiter ```` #### 2. Nutzer einer Gruppe hinzufügen: ````bash 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: ````bash sudo chown \:mitarbeiter /srv/samba/dokumente # Setzt die Gruppe auf "mitarbeiter". sudo chmod 770 /srv/samba/dokumente # Gruppe erhält Vollzugriff. ```` #### 4. Gruppe in Samba nutzen: ````ini [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** ````bash 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** ````ini [Medien] comment = öffentliche Medienfreigabe path = /srv/samba/medien browseable = yes read only = no guest ok = yes ```` **Schritt 3: Samba neu starten** ````bash sudo systemctl restart smbd ```` **Schritt 4: Von Windows aus testen** > Im Explorer: \\\Medien eingeben. ### Beispiel 2: Eingeschränkte Freigabe Anwendungsfall: Vertrauliche Dokumente für bestimmte Nutzer/Gruppen. **Schritt 1: Gruppe und Nutzer anlegen** ````bash 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** ````bash 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** ````ini [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** ````bash sudo smbpasswd -a felix sudo smbpasswd -a hans ```` **Schritt 5: Samba neu starten** ````bash sudo systemctl restart smbd ```` ## Schritt-für-Schritt: Neue Freigabe erstellen **1. Ordner anlegen:** ````bash sudo mkdir -p /srv/samba/neue_freigabe ```` **2. Besitzer und Gruppe setzen:** ````bash sudo chown nobody\:mitarbeiter /srv/samba/neue_freigabe ```` **3. Rechte setzen:** ````bash sudo chmod 770 /srv/samba/neue_freigabe ```` **4. Freigabe in /etc/samba/smb.conf definieren:** ````ini [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:** ````bash sudo samba-tool testparm ```` **6. Samba neu starten:** ````bash 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 stattdessen ````770```` oder ````750````. **Keine Gastzugriffe für sensible Daten:** * Setzen Sie ````guest ok = no```` für vertrauliche Freigaben. **Regelmäßige Backups:** * Sichern Sie die ````smb.conf```` und wichtige Freigabe-Ordner. **Firewall konfigurieren:** ````bash 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: ````bash sudo chmod 2770 /srv/samba/dokumente # SGID + Besitzer/Gruppe: rwx ````