Files
mkdocs-etz/mkdocs/docs/Windows_Freigaben_fuer_Linux-Einsteiger.md

15 KiB
Raw Blame History

# Samba-Konfiguration für Linux-Einsteiger
![enter image description here](https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Samba_logo_2010.svg/330px-Samba_logo_2010.svg.png)
## 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.
````
#### Anpassungen an Windows 11
Fügen sie unterhalb dieser Einstellungen im noch im Bereich [Global] :
````ini
    # 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
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 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:
````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.|

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 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:
````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: ````\\<IP-des-Servers>\\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.      |