# 🔐 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: The Watchdog (Debian 13 / Mate Edition) *Status: Getestet & Verifiziert auf Debian 13 (Trixie) mit MATE Desktop.* Du willst, dass das **automatisch** passiert, wenn der Bildschirmschoner angeht? Wir nutzen `dbus-monitor`, um direkt auf den Puls des Screensavers zu hören. ### Das Script: `ssh-agent-guard.sh` Dieses Script muss in den Autostart (`System -> Einstellungen -> Startprogramme`). ```bash #!/bin/bash # ~/.local/bin/ssh-agent-guard.sh LOG_FILE="$HOME/.ssh-agent-screenlock.log" SOCKET_PATH="$HOME/.ssh/agent.sock" PID_FILE="$HOME/.ssh-agent-watchdog.pid" PAUSE_FILE="$HOME/.ssh-agent-watchdog.pause" # 1. Singleton Check: Nur ein Wächter erlaubt if [ -f "$PID_FILE" ]; then old_pid=$(cat "$PID_FILE") kill -0 "$old_pid" 2>/dev/null && kill "$old_pid" fi echo $$ > "$PID_FILE" # 2. Cleanup Trap (Aufräumen bei Exit) cleanup() { rm -f "$PID_FILE"; exit 0; } trap cleanup SIGINT SIGTERM log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"; } restart_agent() { # "Deep Work" Check: Darf ich töten? if [ -f "$PAUSE_FILE" ]; then log "SKIP: Deep Work Mode aktiv. Agent überlebt." return fi log "🔒 LOCK: Killing Agent..." # Kill existing agents if [ -n "$SSH_AGENT_PID" ]; then kill "$SSH_AGENT_PID" 2>/dev/null; fi pkill -u "$USER" ssh-agent # Clean Environment unset SSH_AUTH_SOCK SSH_AGENT_PID rm -f "$SOCKET_PATH" # Respawn & Bind to fixed socket eval "$(ssh-agent -a "$SOCKET_PATH" -s)" >/dev/null # Save Environment for others echo "export SSH_AUTH_SOCK=$SOCKET_PATH" > "$HOME/.ssh/agent-environment" echo "export SSH_AGENT_PID=$SSH_AGENT_PID" >> "$HOME/.ssh/agent-environment" log "✨ RESPAWN: Neuer Agent (PID: $SSH_AGENT_PID)" } # 3. MATE Hardening: Sofort sperren, keine Grace-Period gsettings set org.mate.screensaver lock-enabled true gsettings set org.mate.screensaver lock-delay 0 # 4. Der DBus Loop dbus-monitor --session "type='signal',interface='org.mate.ScreenSaver',member='ActiveChanged'" 2>/dev/null | while read -r line; do if echo "$line" | grep -q "boolean true"; then # EVENT: Screen Locked -> Kill Agent mate-screensaver-command --lock 2>/dev/null # Double Tap restart_agent fi done ``` ### Die Integration Damit deine Terminals den neuen Agent immer finden, muss das Environment dynamisch geladen werden. In deiner `.bashrc`: ```bash # Lade Agent-Info, falls vorhanden if [ -f ~/.ssh/agent-environment ]; then source ~/.ssh/agent-environment fi ``` --- ## 🛡️ Level 4: Deep Work & Kontrolle Manchmal **darf** der Agent nicht sterben (z.B. bei einem 50GB Upload über SCP, während du Kaffee holst). Dafür haben wir den **Watchdog-Knochen** (Pause-Funktion). Im `crumbpages-doktor` (Modul Remote) gibt es jetzt Befehle: - `watchdog status`: Läuft der Wächter? - `watchdog off`: **PAUSE**. Der Screensaver tötet den Agent nicht mehr. - `watchdog on`: **SCHARF**. Sicherheit wiederhergestellt. > **Tipp:** Wenn du `exit` im Remote-Doktor tippst, feuert jetzt eine "Paranoid Trap" und löscht die Keys sofort (`ssh-add -D`). Sicher ist sicher. --- ## 🦉 Crystal Owl's Weisheit > *"Ein System ist nur so sicher wie sein schwächstes Glied. Meistens ist das Glied... Bequemlichkeit."* Wir haben die Bequemlichkeit automatisiert. Der Agent stirbt, wenn du weggehst. Er wird wiedergeboren, wenn du wiederkommst – aber ohne Erinnerung (Keys). Du musst das Passwort neu eingeben. Das ist der Preis der Sicherheit. --- **Version:** 2.0 (Debian 13 Verified) **Status:** Final **Tags:** #Security #Debian13 #Mate #DBus #ZeroTrust --- **Navigation:** [← Zurück: Alle Themen](crumbpages-doktor.sh) | [Weiter: Tanz am Kernel (Bash Hacks)](crumbpage-20-tanz-am-kernel.md)