diff --git a/crumbpage-18-ssh-agent.md b/crumbpage-18-ssh-agent.md new file mode 100644 index 0000000..77af377 --- /dev/null +++ b/crumbpage-18-ssh-agent.md @@ -0,0 +1,154 @@ +# 🔐 Crumbpage 18: Der Schlüsselmeister (SSH Agent) + +**Subtitle:** *Nie wieder Passwörter tippen ohne Sicherheit zu verlieren* +**Pfad:** 18 von X +**Schwierigkeit:** ⭐⭐⭐ (3/5) +**Zeit:** ~1 Stunde +**Voraussetzungen:** [SSH Keys](crumbpage-08-ssh-keys.md), [Workstation](crumbpage-17-workstation.md) + +> *"Ein guter Diener hält dir die Schlüssel bereit, aber gibt sie niemandem sonst."* 🗝️ + +--- + +## 📋 Was du in diesem Pfad lernst + +``` +✓ Was macht der ssh-agent? +✓ ssh-add (Schlüssel hinzufügen) +✓ Agent Forwarding (Der magische Sprung) +✓ Keychain Integration (Mac/Linux) +✓ Die Gefahren von Forwarding +``` + +--- + +## 🎯 Lernziele + +Nach diesem Pfad kannst du: + +- [ ] Den `ssh-agent` starten und nutzen +- [ ] Verstehen, warum dein Private Key dein Gerät nie verlassen sollte +- [ ] Durch einen Bastion-Host "durchspringen" (Agent Forwarding) +- [ ] Den Agent sicher beenden oder sperren + +--- + +## 🗝️ Das Problem: Passphrases nerven + +Du hast deine Keys (wie in Pfad 8 gelernt) mit einer **Passphrase** gesichert. Gut! +Aber jetzt musst du bei jedem `git push` oder `ssh server` das Passwort tippen. +Das nervt. Und was nervt, wird abgeschaltet (Passwörter entfernt). **Böse!** 🛑 + +**Die Lösung: Der SSH Agent.** +Er ist ein kleiner Prozess im Hintergrund, der deine *entschlüsselten* Keys im RAM hält. +Du tippst das Passwort **einmal** (beim Start oder ersten Nutzen), und der Agent erledigt den Rest für dich. + +--- + +## 🛠️ Die Basics + +### 1. Lebt der Agent? + +```bash +$ env | grep SSH_AUTH_SOCK +# Wenn hier nichts kommt, läuft kein Agent. +``` + +### 2. Starten (Manuell) + +```bash +$ eval "$(ssh-agent -s)" +Agent pid 12345 +``` + +### 3. Schlüssel hinzufügen (`ssh-add`) + +```bash +$ ssh-add ~/.ssh/id_ed25519 +Enter passphrase for /home/bmt/.ssh/id_ed25519: ********* +Identity added: /home/bmt/.ssh/id_ed25519 (bmt@workstation) +``` +Ab jetzt fragt SSH nicht mehr nach dem Passwort, solange der Agent läuft! + +### 4. Was ist geladen? + +```bash +$ ssh-add -l +256 SHA256:abcd... bmt@workstation (ED25519) +``` + +### 5. Alles vergessen (Lockdown) + +```bash +$ ssh-add -D +All identities removed. +``` + +--- + +## 🚀 Advanced: Agent Forwarding + +Stell dir vor: +`Workstation` → `Gateway-Server` → `Git-Server (GitHub)` + +Du bist auf dem `Gateway` und willst `git clone` machen. +Dein Key liegt aber auf der `Workstation`. +**NIEMALS** kopierst du deinen Private Key auf den Gateway Server! + +Stattdessen erlaubst du dem Gateway, deinen Agent auf der Workstation zu "fragen". + +**Config (`~/.ssh/config`):** +```ssh +Host gateway + HostName gateway.crumbforest.de + ForwardAgent yes +``` + +Jetzt kannst du auf dem Gateway `git clone` machen, und die Authentifizierung "tunnelt" zurück zu deinem Laptop. Magie! ✨ + +### ⚠️ Die Gefahr (Security Warning) +Wenn du Forwarding aktivierst (`-A` oder `ForwardAgent yes`) und der Admin des Ziel-Servers böse ist (root), kann er deinen lokalen Agenten kapern, solange du verbunden bist. +**Regel:** Nutze Forwarding NUR zu Servern, denen du vertraust! + +--- + +## 🍏 & 🐧 Komfort-Integration + +### macOS +Der Mac macht das automatisch via Keychain. +Config (`~/.ssh/config`): +```ssh +Host * + UseKeychain yes + AddKeysToAgent yes +``` + +### Linux (Gnome/Keyring) +Moderne Distros (Ubuntu, Debian mit Gnome/MATE) starten oft einen Keyring-Daemon, der sich wie ein SSH-Agent verhält. + +Wenn du es "pur" willst (in `.bashrc`): +```bash +if [ -z "$SSH_AUTH_SOCK" ]; then + eval "$(ssh-agent -s)" + ssh-add +fi +``` + +--- + +## 🦉 Crystal Owl's Weisheit + +> *"Der Schlüssel gehört dem Meister, nicht dem Torwächter."* + +Niemals Private Keys verteilen. Lass den Agenten die Arbeit machen. Und wenn du gehst, nimm die Schlüssel mit (`ssh-add -D` oder Logout). + +--- + +**Version:** 1.0 +**Status:** Draft +**Tags:** #SSH #Security #Agent #Workflow + +--- + +**Navigation:** +[← Zurück: Workstation](crumbpage-17-workstation.md) | [Weiter: Zero Trust Agent →](crumbpage-19-agent-lockdown.md) diff --git a/crumbpage-19-agent-lockdown.md b/crumbpage-19-agent-lockdown.md new file mode 100644 index 0000000..6029f7a --- /dev/null +++ b/crumbpage-19-agent-lockdown.md @@ -0,0 +1,137 @@ +# 🔐 Crumbpage 19: The Zero Trust Agent (Paranoid Mode) + +**Subtitle:** *Vertraue nichts, was du nicht gerade berührst* +**Pfad:** 19 von X +**Schwierigkeit:** ⭐⭐⭐⭐ (4/5) +**Zeit:** ~2 Stunden +**Voraussetzungen:** [SSH Agent](crumbpage-18-ssh-agent.md), [Bash Scripting](crumbpage-14-environment.md) + +> *"Ein unbewachter Schlüssel ist ein verlorener Schlüssel."* 🕵️‍♂️ + +--- + +## 📋 Das Szenario + +Du sitzt im Café. Dein Laptop ist entsperrt, dein `ssh-agent` hat alle Keys im RAM. +Ein Dieb reißt dir den offenen Laptop aus der Hand ("Snatch & Run"). +**Er hat jetzt Zugriff auf alle deine Server.** 😱 + +Oder: Du gehst kurz weg, Screen Lock geht an. Jemand errät dein (schwaches?) Laptop-Passwort oder nutzt einen Exploit am Lockscreen. +Sobald er drin ist: **Vollzugriff via SSH.** + +**Die Lösung:** +Der Agent muss seine Schlüssel **vergessen**, sobald du den Platz verlässt (Screen Lock). +Und er muss **sofort nach der Passphrase fragen**, wenn du wiederkommst (Unlock). + +--- + +## 🛡️ Level 1: Das Zeit-Limit (TTL) + +Der einfachste Schutz. Schlüssel vergessen sich selbst nach X Minuten. + +```bash +# Füge Key hinzu, aber vergiss ihn nach 5 Minuten (300 Sekunden) +$ ssh-add -t 300 ~/.ssh/id_ed25519 +``` + +**Pro:** Funktioniert überall (Mac/Linux). +**Contra:** Wenn du arbeitest, läuft es manchmal "unter den Fingern" ab. + +--- + +## 🛡️ Level 2: Der "Nuke" Button + +Gewöhne dir an, nicht nur den Screen zu sperren, sondern den Agent zu leeren. + +**In deiner `.bashrc`:** +```bash +# Sperren UND Schlüssel wegwerfen +alias away='ssh-add -D && loginctl lock-session' +``` +*(Auf Mac: `ssh-add -D && pmset displaysleepnow`)* + +**Benutzung:** Wenn du aufstehst, tippe `away`. Laptop sperrt, Keys sind weg. + +--- + +## 🛡️ Level 3: Automatische Amnesie (Der Watchdog) + +Du willst, dass das **automatisch** passiert, wenn der Bildschirmschoner angeht? +Das erfordert ein Script, das auf den Lock-Status "hört". + +### Konzept (Linux/DBus): + +Wir bauen einen **Wächter**, der auf `org.gnome.ScreenSaver` lauscht. + +**Das Script (`~/.local/bin/agent-watchdog.sh`):** + +```bash +#!/bin/bash +# Lauscht auf Screen-Lock Events via DBus + +dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \ +while read x; do + case "$x" in + *"boolean true"*) + # LOCK EVENT! + echo "🔒 Screen locked. Burning keys." + ssh-add -D + ;; + *"boolean false"*) + # UNLOCK EVENT! + echo "🔓 Screen unlocked." + # Optional: Terminal öffnen für Re-Auth + # gnome-terminal -- ssh-add + ;; + esac +done +``` + +**Erklärung:** +1. Wenn Screen **Locked** (`true`) -> `ssh-add -D` (Alle Keys löschen). Sicherheit hergestellt. +2. Wenn Screen **Unlocked** (`false`) -> Du musst beim nächsten `git push` oder `ssh` dein Passwort neu eingeben (oder wir triggern ein Prompt). + +--- + +## 🛡️ Level 4: Re-Spawn on Unlock (Die User-Anfrage) + +Du willst direkt nach dem Entsperren nach dem Passwort gefragt werden? + +Das ist tricky, weil der Prozess im Hintergrund läuft. Aber wir können deine `.bashrc` tunen: + +**In deiner `.bashrc`:** + +```bash +# Check beim Öffnen eines Terminals: +# Sind Keys geladen? Wenn nein -> Fragen! + +if [ -z "$(ssh-add -l | grep SHA)" ]; then + echo "🕵️‍♂️ Zero Trust Mode: Agent is empty." + ssh-add +fi +``` + +**Der Flow:** +1. Screen Lock -> Watchdog löscht Keys (Level 3). +2. Du entsperrst, öffnest ein Terminal (oder nutzt ein offenes). +3. Sobald du Enter drückst (neues Prompt) oder ein neues Tab öffnest -> `ssh-add` fragt dich sofort. + +--- + +## 🦉 Crystal Owl's Weisheit + +> *"Sicherheit ist kein Zustand, sondern ein Prozess. Manchmal ein nerviger."* + +Level 1 (`-t 300`) ist oft der beste Kompromiss aus Paranoia und Usability. +Level 3+4 ist für Admins, die "Snowden-Level" Sicherheit im Café brauchen. + +--- + +**Version:** 1.0 +**Status:** Draft +**Tags:** #Security #Paranoid #Automation #ZeroTrust + +--- + +**Navigation:** +[← Zurück: SSH Agent](crumbpage-18-ssh-agent.md) | [Admin-Vektor Übersicht](crumbforest-admin-vektor.md)