# Geschäfts-Samba-Server: Eingeschränkte Freigaben für Abteilungen
*Anleitung zur Einrichtung von Samba-Freigaben mit granularen Rechten für Hans Wurst (Produktion) und Peter Lustig (Verwaltung)*

## 1. Zielbeschreibung
Dieses Projekt zeigt eine saubere, praxisnahe Einrichtung von

* eingeschränkten Freigaben mit Gruppenrechten,
* Homeverzeichnissen,
* einem Netzwerkpapierkorb.​
  
|              | Lesen&#xA;Angebote | Schreiben&#xA;Angebote | Lesen&#xA;Lieferscheine | Schreiben&#xA;Lieferscheine |
| ------------ | ------------------ | ---------------------- | ----------------------- | --------------------------- |
| Hans Wurst   | X                  |                        |                         | X                           |
| Peter Lustig |                    | X                      |                         | X                           |

!!! warning 
    ``Samba`` sollte bereits installiert sein

---

## 2. Benutzer und Gruppen anlegen

### 2.1 Benutzer erstellen
```bash
# Benutzer für Produktion und Verwaltung anlegen
sudo adduser hwurst   # Hans Wurst (Produktion)
sudo adduser plustig  # Peter Lustig (Verwaltung)
```
### 2.2 Gruppen für Rechteverwaltung erstellen
````bash
# Gruppen für Lese-/Schreibrechte
sudo addgroup angebote_r    # Leserechte für Angebote
sudo addgroup angebote_w   # Schreibrechte für Angebote
sudo addgroup lieferscheine_r # Leserechte für Lieferscheine (hier nicht genutzt)
sudo addgroup lieferscheine_w # Schreibrechte für Lieferscheine
````
### 2.3 Benutzer den Gruppen zuweisen
````bash
# Hans Wurst: Darf Angebote lesen und Lieferscheine schreiben
sudo usermod -aG angebote_r hwurst
sudo usermod -aG lieferscheine_w hwurst

# Peter Lustig: Darf Angebote und Lieferscheine schreiben
sudo usermod -aG angebote_w plustig
sudo usermod -aG lieferscheine_w plustig
````

### 2.4 Benutzer in Samba bekannt machen
````bash
# Samba-Passwörter für beide Benutzer setzen
sudo smbpasswd -a hwurst
sudo smbpasswd -a plustig
````
> Passwort im Kurs: "passw0rd#"

## 3. Verzeichnisse erstellen und Rechte setzen
### 3.1 Ordner für Angebote und Lieferscheine anlegen
````bash
sudo mkdir -p /srv/samba/{angebote,lieferscheine}
````
### 3.2 Besitzer und Gruppe setzen
````bash
# Angebote: Besitzer = nobody, Gruppe = angebote_w (Schreibrechte)
sudo chown -R nobody:angebote_w /srv/samba/angebote

# Lieferscheine: Besitzer = nobody, Gruppe = lieferscheine_w (Schreibrechte)
sudo chown -R nobody:lieferscheine_w /srv/samba/lieferscheine
````
### 3.3 Berechtigungen setzen

````bash
sudo chmod -R 0077 /srv/samba/angebote
sudo chmod -R 0077 /srv/samba/lieferscheine
# - 0: Keine Spezialrechte (Sticky Bit/SUID/SGID)
# - 0: Besitzer (nobody) hat keine Rechte (wird durch Samba überschrieben)
# - 7: Gruppe hat Vollzugriff (rwx)
# - 7: Andere haben Vollzugriff (wird durch Samba eingeschränkt)
````
!!! note 
    Die tatsächlichen Rechte werden später durch Samba (````force create mode, valid users````) gesteuert.

## 4. Samba-Freigaben konfigurieren

### 4.1 ````smb.conf```` bearbeiten
````bash
sudo nano /etc/samba/smb.conf
````
### 4.2 Freigaben für Angebote und Lieferscheine
Fügen Sie folgende Abschnitte am Ende der Datei ein:
````ini
[Angebote]
   comment = Angebote an Kunden
   path = /srv/samba/angebote
   guest ok = no
   browseable = yes
   read only = yes  # Standardmäßig schreibgeschützt
   valid users = @angebote_r, @angebote_w  # Nur diese Gruppen dürfen zugreifen
   write list = @angebote_w  # Nur diese Gruppe darf schreiben
   force create mode = 0775  # Neue Dateien: rwxrwxr-x
   force directory mode = 0775 # Neue Ordner: rwxrwxr-x
   force group = angebote_w  # Neue Dateien gehören dieser Gruppe

[Lieferscheine]
   copy = Angebote # Überträgt alle Einstellungen von Angebote, die nicht nachfolgend angepasst werden:
   comment = Lieferscheine von Lieferanten
   path = /srv/samba/lieferscheine
   valid users = @lieferscheine, @lieferscheine_w  # Nur diese Gruppe darf zugreifen
   write list = @lieferscheine_w  # Nur diese Gruppe darf schreiben
   force group = lieferscheine_w
````
## 5. Userverzeichnisse (Home-Freigaben)

Jeder Benutzer kann auf sein eigenes Home-Verzeichnis zugreifen.
Aktivieren Sie die [homes]-Freigabe in ````/etc/samba/smb.conf```` (entkommentieren):
````ini
[homes]
   comment = Privates Verzeichnis
   browseable = no  # Nur für den Benutzer selbst sichtbar
   read only = no    # Benutzer darf schreiben
   create mask = 0700 # Neue Dateien: rwx------
   directory mask = 0700 # Neue Ordner: rwx------
   valid users = %S  # %S = Name des aktuellen Benutzers
````
!!! note 
    ``%S`` wird automatisch durch den Benutzernamen ersetzt (z. B. hwurst).
## 6. Netzwerkpapierkorb
Gelöschte Dateien auf Netzlaufwerken können mit dem **Samba Recycle Bin Modul** gesichert werden.
### 6.1 Konfiguration in ````smb.conf````
Fügen Sie folgende Optionen global (unter [global]) oder pro Freigabe ein:
````ini
    vfs objects = recycle  # Virtuelles Dateisystem für Papierkorb
    recycle:repository = .recyclebin  # Ordner für gelöschte Dateien
    recycle:keeptree = yes   # Pfadstruktur im Papierkorb erhalten
    recycle:versions = yes   # Gleichnamige Dateien nicht überschreiben
    recycle:maxsize = 0      # Keine Größenbegrenzung pro Datei
    recycle:touch = yes      # Zeitstempel anpassen
````
### 6.2 Automatische Bereinigung mit Cron
Fügen Sie einen [Cron-Job](Automatisierung_mit_cron_und_systemd.md) hinzu, um alte Dateien im Papierkorb zu löschen:
````bash
sudo crontab -e
````
Fügen Sie folgende Zeile ein (löscht Dateien älter als 14 Tage):
````bash
0 12 * * * for path in $(grep "path =" /etc/samba/smb.conf | cut -d= -f2 | sed 's/ //g'); do find "${path}/.recyclebin" -mindepth 1 -mtime +14 -exec rm -rf {} ; 2>/dev/null; done
````
!!! note "Erklärung"
    * ````0 12 * * *````: Täglich um 12:00 Uhr.
    * ````grep "path ="````: Sucht alle ````path````-Einträge in ````smb.conf````.
    * ````find ... -mtime +14````: Löscht Dateien älter als 14 Tage im .recyclebin-Ordner.
  
## 7 Häufige Fehler und Lösungen

|Problem                       |Ursache                            |Lösung                                                       |
|------------------------------|-----------------------------------|-------------------------------------------------------------|
|Benutzer kann nicht zugreifen |Falsche Gruppe oder Passwort.      |groups [benutzer] prüfen, smbpasswd -a [benutzer] neu setzen.|
|Schreibrechte fehlgeschlagen  |Benutzer nicht in write list.      |valid users und write list in smb.conf prüfen.               |
|Papierkorb funktioniert nicht |vfs objects = recycle fehlt.       |In smb.conf für die Freigabe oder global ergänzen.           |
|Rechte werden nicht übernommen|force group oder create mask fehlt.|In smb.conf ergänzen und Samba neu starten.                  |
|Linux kann zugreifen, Windows nicht|Protokollversion zu Alt       |In smb.conf ````    server min protocol = SMB2```` und    ````smb encrypt = desired ```` nachtragen| 
















