From 4dd8fd02bf2806f7f7e928ef17aad73018db6f23 Mon Sep 17 00:00:00 2001 From: Torkalis Date: Sun, 7 Dec 2025 13:56:14 +0100 Subject: [PATCH] Nauauflage mit Zielgruppe Ahnungsloser --- .../Automatisierung mit cron und systemd.md | 10 +- .../docs/basics/Windows-Freigabe mit Samba.md | 48 +- ...Windows_Freigaben_fuer_Linux-Einsteiger.md | 612 ++++++++++++++++++ mkdocs/mkdocs.yml | 2 +- mkdoks-complete.sh | 57 ++ rebuild-all.sh | 76 +++ 6 files changed, 782 insertions(+), 23 deletions(-) create mode 100644 mkdocs/docs/basics/Windows_Freigaben_fuer_Linux-Einsteiger.md create mode 100644 mkdoks-complete.sh create mode 100644 rebuild-all.sh diff --git a/mkdocs/docs/basics/Automatisierung mit cron und systemd.md b/mkdocs/docs/basics/Automatisierung mit cron und systemd.md index 15c280c..f0f20c4 100644 --- a/mkdocs/docs/basics/Automatisierung mit cron und systemd.md +++ b/mkdocs/docs/basics/Automatisierung mit cron und systemd.md @@ -27,7 +27,11 @@ Fügen Sie folgende Zeile hinzu: * * * * * /usr/bin/touch /tmp/heartbeat.txt ``` -Jetzt wird jede Minute die Datei /tmp/heartbeat.txt neu angelegt oder ihr Zeitstempel aktualisiert. +Jetzt wird jede Minute die Datei /tmp/heartbeat.txt neu angelegt oder ihr Zeitstempel aktualisiert. Prüfen Sie das ergebnis, indem Sie sich den Zeitstempel der neuen Datei anschauen: + +```bash +ls -lah /tmp/heartbeat.txt +``` \newpage @@ -59,10 +63,10 @@ Jetzt wird jede Minute die Datei /tmp/heartbeat.txt neu angelegt oder ihr Zeit * jeden Tag um Mitternacht ``` -1/5 * * * * /usr/bin/touch /tmp/every5min.txt +*/5 * * * * /usr/bin/touch /tmp/every5min.txt ``` -*  alle 5 Minuten beginnend 5 Minuten nach 1 also 6,11,16,... +*  alle 5 Minuten beginnend 5 Minuten # systemd-Unit: Datei beim Systemstart aktualisieren diff --git a/mkdocs/docs/basics/Windows-Freigabe mit Samba.md b/mkdocs/docs/basics/Windows-Freigabe mit Samba.md index 28cca96..66cbe61 100644 --- a/mkdocs/docs/basics/Windows-Freigabe mit Samba.md +++ b/mkdocs/docs/basics/Windows-Freigabe mit Samba.md @@ -22,7 +22,9 @@ sudo apt install samba Nach der Installation des Dienstes kann dieser über die Konfigurationsdatei /etc/samba/smb.conf bearbeitet werden. Die von Ubuntu vorkonfigurierte Version ist nahezu vollständig selbsterklärend und mit entsprechenden Beispielen versehen. -## smb.conf +## /etc/samba/smb.conf + +Hier soll der Aufbau der Datei mit ihren Default werten erkärt werden. Schauen Sie sich parallel ihre Datei auf ihrem System an. ```ini [global] @@ -39,21 +41,6 @@ server string = %h server (Samba, Ubuntu) Die Beschreibung des Servers (mouse-over) wobei für %h für der hostname des Servers eingesetzt wird. -```ini -wins support = no -wins server = w.x.y.z -``` - -Kann geändert werden zu - -```ini -wins support = yes -# wins server = w.x.y.z -``` - -Damit übernimmt der Samba-Server die [WINS](https://de.wikipedia.org/wiki/Windows_Internet_Naming_Service)-Aufgaben. - -**In einem Netzwerk sollte immer nur ein WINS-Server aktiv laufen.** ```ini dns proxy = no @@ -167,7 +154,7 @@ sudo adduser hwurst sudo adduser plustig sudo addgroup angebote_l sudo addgroup angebote_ae -sudo addgrouo lieferscheine_l +sudo addgroup lieferscheine_l sudo addgroup lieferscheine_ae sudo usermod -aG angebote_l hwurst sudo usermod -aG lieferscheine_ae hwurst @@ -186,13 +173,36 @@ Erstellen der Verzeichnisse: ```bash sudo mkdir /srv/samba/angebote -sudo mkdir /srv/samba/lieferscheine sudo chown -R nobody:angebote_ae /srv/samba/angebote -sudo chown -R nobody:lieferscheine_ae /srv/samba/lieferscheine sudo chmod -R 0077 /srv/samba/angebote +sudo mkdir /srv/samba/lieferscheine +sudo chown -R nobody:lieferscheine_ae /srv/samba/lieferscheine sudo chmod -R 0077 /srv/samba/lieferscheine sudo nano /etc/samba/smb.conf ``` +Erklärung: +```bash +chown Rekursive USER:GRUPPE Pfad +chmod Rekurisv OKTALMODE-RECHTE (Siehe Tabelle) Pfad +``` +Die Zahlenfolge 0077 Steht für die Rechte im Ordner: +* 0 Spezialrechte (Sticky bit damit Dateiersteller Dateieigentümer bleiben, für Samba besser auf 0) +* 0 Eigentümer (vorher auf nobody gesetzt) +* 7 Gruppe (vorher auf angebote_ae gesetzt) +* 7 Andere (sonstige user im System ohne Samba) + +| Oktal | Binär | Rechte (rwx) | Typische Nutzung | +| ----- | ----- | ------------ | ------------------------------------------------- | +| 0 | 000 | --- | Kein Zugriff | +| 1 | 001 | --x | Nur Ausführen (z. B. Skripte)​ | +| 2 | 010 | -w- | Nur Schreiben | +| 3 | 011 | -wx | Schreiben + Ausführen​ | +| 4 | 100 | r-- | Nur Lesen​ | +| 5 | 101 | r-x | Lesen + Ausführen (Ordner/Dateien)​ | +| 6 | 110 | rw- | Lesen + Schreiben | +| 7 | 111 | rwx | Voller Zugriff (unsicher für Freigaben) ​ | + +In der Datei /etc/samba/smb.conf: ```ini [Angebote] diff --git a/mkdocs/docs/basics/Windows_Freigaben_fuer_Linux-Einsteiger.md b/mkdocs/docs/basics/Windows_Freigaben_fuer_Linux-Einsteiger.md new file mode 100644 index 0000000..d113369 --- /dev/null +++ b/mkdocs/docs/basics/Windows_Freigaben_fuer_Linux-Einsteiger.md @@ -0,0 +1,612 @@ +# 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. Gruppe erstellen:](#1-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) + +--- + +## 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. Gruppe erstellen: +````bash + +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 = + 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 addgroup mitarbeiter +sudo addgroup teamleitung +sudo usermod -aG mitarbeiter felix +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 + +Schritt 5: Samba neu starten +bash + +sudo systemctl restart smbd + + +Schritt-für-Schritt: Neue Freigabe erstellen + + +Ordner anlegen: +bash + +sudo mkdir -p /srv/samba/neue_freigabe + + + +Besitzer und Gruppe setzen: +bash + +sudo chown nobody\:mitarbeiter /srv/samba/neue_freigabe + + + +Rechte setzen: +bash + +sudo chmod 770 /srv/samba/neue_freigabe + + + +Freigabe in 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 + + + +Konfiguration testen: +bash + +sudo testparm + + + +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 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 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 + + diff --git a/mkdocs/mkdocs.yml b/mkdocs/mkdocs.yml index da58a5b..a084eba 100644 --- a/mkdocs/mkdocs.yml +++ b/mkdocs/mkdocs.yml @@ -4,8 +4,8 @@ nav: - Grundlagen: - Einstieg in Linux-Desktop: basics/Einstieg in Linux-Desktop.md - Grundlagen der Konsole: basics/Grundlagen der Konsole.md + - Automatisierung mit cron und systemd: basics/Automatisierung mit cron und systemd.m - Windows-Freigabe mit Samba: basics/Windows-Freigabe mit Samba.md - - Automatisierung mit cron und systemd: basics/Automatisierung mit cron und systemd.md - Linux im Unternehmen: - Ubuntu Servr als Active Directory Domain Controller: Linux_Unternehmen/ubuntu-ad-dc.md - Linux als Client in Active Directory: Linux_Unternehmen/linux-als-ad-client.md diff --git a/mkdoks-complete.sh b/mkdoks-complete.sh new file mode 100644 index 0000000..9ab5422 --- /dev/null +++ b/mkdoks-complete.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +MKDOCS_DIR="mkdocs/docs" + +find "$MKDOCS_DIR" -name "*.md" | while read -r md_file; do + # Überspringe index.md + if [[ "$(basename "$md_file")" == "index.md" ]]; then + echo "Überspringe: $md_file" + continue + fi + + echo "Verarbeite: $md_file" + + base_name=$(basename "$md_file" .md | tr ' ' '_') + dir_name=$(dirname "$md_file") + + pdf_path="${dir_name}/${base_name}.pdf" + pdf_link="\n\n[PDF herunterladen](${base_name}.pdf){ .md-button }" + + # PDF immer neu erzeugen + rm -f "$pdf_path" + + # Temp MD nur für MkDocs-Syntax bereinigen + temp_md="${dir_name}/temp_${base_name}.md" + sed 's/{[^}]*}//g; s/^[ \t]*{[^}]*}$//gm' "$md_file" > "$temp_md" + + # **Working directory = Markdown-Verzeichnis** für korrekte Bildpfade! + md_dir=$(dirname "$md_file") + + docker run --rm \ + --volume "$(pwd)":/data \ + --user $(id -u):$(id -g) \ + --workdir "/data/$md_dir" \ + pandoc/extra \ + "./$(basename "$md_file")" \ + -o "./${base_name}.pdf" \ + --template /data/eisvogel.latex \ + --syntax-highlighting=idiomatic + + # Temp Dateien löschen + rm -f "$temp_md" + + echo " → PDF erstellt: $pdf_path" + + # PDF-Link nur einmal hinzufügen + if ! tail -n 10 "$md_file" | grep -q "PDF herunterladen"; then + echo -e "$pdf_link" >> "$md_file" + echo " → PDF-Link hinzugefügt" + else + echo " → PDF-Link bereits vorhanden" + fi +done + +# MkDocs neu bauen +docker compose -f ./docker-compose.yml run --rm mkdocs build +docker compose -f ./docker-compose.yml restart mkdocs +echo "Fertig: mkdocs neu gebaut." diff --git a/rebuild-all.sh b/rebuild-all.sh new file mode 100644 index 0000000..37802a5 --- /dev/null +++ b/rebuild-all.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +MKDOCS_DIR="mkdocs/docs" + +# Funktion für die Verarbeitung (DRY-Prinzip) +process_file() { + local md_file="$1" + echo "Verarbeite: $md_file" + + local base_name=$(basename "$md_file" .md | tr ' ' '_') + local dir_name=$(dirname "$md_file") + local pdf_path="${dir_name}/${base_name}.pdf" + local pdf_link="\n\n[PDF herunterladen](${base_name}.pdf){ .md-button }" + + # PDF neu erzeugen + rm -f "$pdf_path" + + # Temp MD nur für MkDocs-Syntax bereinigen (LaTeX behalten) + local temp_md="${dir_name}/temp_${base_name}.md" + sed 's/{[^}]*}//g; s/^[ \t]*{[^}]*}$//gm' "$md_file" > "$temp_md" + + local md_dir=$(dirname "$md_file") + + docker run --rm \ + --volume "$(pwd)":/data \ + --user $(id -u):$(id -g) \ + --workdir "/data/$md_dir" \ + pandoc/extra \ + "./temp_${base_name}.md" \ + -o "./${base_name}.pdf" \ + --template /data/eisvogel.latex \ + --syntax-highlighting=idiomatic + + # Temp Datei löschen + rm -f "$temp_md" + + echo " → PDF erstellt: $pdf_path" + + # PDF-Link nur einmal hinzufügen (ändert Markdown!) + if ! tail -n 10 "$md_file" | grep -q "PDF herunterladen"; then + echo -e "$pdf_link" >> "$md_file" + echo " → PDF-Link hinzugefügt" + else + echo " → PDF-Link bereits vorhanden" + fi + echo "" +} + +# Wenn keine Parameter → alle Dateien verarbeiten +if [ $# -eq 0 ]; then + echo "Keine Dateien angegeben → Verarbeite ALLE Markdown-Dateien" + find "$MKDOCS_DIR" -name "*.md" | while read -r md_file; do + # Überspringe index.md + if [[ "$(basename "$md_file")" == "index.md" ]]; then + echo "Überspringe: $md_file" + continue + fi + process_file "$md_file" + done +else + # Einzelne Dateien verarbeiten + for param in "$@"; do + md_file="$MKDOCS_DIR/$param" + if [[ ! -f "$md_file" ]]; then + echo "Fehler: $md_file nicht gefunden!" + continue + fi + process_file "$md_file" + done +fi + +# **IMMER MkDocs neu bauen** (Markdown + PDF-Links ändern sich) +echo "MkDocs wird neu gebaut (wegen Markdown-Änderungen)..." +docker compose -f ./docker-compose.yml run --rm mkdocs build +docker compose -f ./docker-compose.yml restart mkdocs +echo "Fertig: mkdocs neu gebaut."