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

398 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
`````markdown
# 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. |
`````