diff --git a/crumbpage-19-agent-lockdown.md b/crumbpage-19-agent-lockdown.md index 6029f7a..2c63041 100644 --- a/crumbpage-19-agent-lockdown.md +++ b/crumbpage-19-agent-lockdown.md @@ -54,84 +54,123 @@ alias away='ssh-add -D && loginctl lock-session' --- -## 🛡️ Level 3: Automatische Amnesie (Der Watchdog) +## 🛡️ 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? -Das erfordert ein Script, das auf den Lock-Status "hört". +Wir nutzen `dbus-monitor`, um direkt auf den Puls des Screensavers zu hören. -### Konzept (Linux/DBus): +### Das Script: `ssh-agent-guard.sh` -Wir bauen einen **Wächter**, der auf `org.gnome.ScreenSaver` lauscht. - -**Das Script (`~/.local/bin/agent-watchdog.sh`):** +Dieses Script muss in den Autostart (`System -> Einstellungen -> Startprogramme`). ```bash #!/bin/bash -# Lauscht auf Screen-Lock Events via DBus +# ~/.local/bin/ssh-agent-guard.sh -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 +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 ``` -**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). +### Die Integration ---- - -## 🛡️ 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`:** +Damit deine Terminals den neuen Agent immer finden, muss das Environment dynamisch geladen werden. +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 +# Lade Agent-Info, falls vorhanden +if [ -f ~/.ssh/agent-environment ]; then + source ~/.ssh/agent-environment 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. +--- + +## 🛡️ 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 -> *"Sicherheit ist kein Zustand, sondern ein Prozess. Manchmal ein nerviger."* +> *"Ein System ist nur so sicher wie sein schwächstes Glied. Meistens ist das Glied... Bequemlichkeit."* -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. +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:** 1.0 -**Status:** Draft -**Tags:** #Security #Paranoid #Automation #ZeroTrust +**Version:** 2.0 (Debian 13 Verified) +**Status:** Final +**Tags:** #Security #Debian13 #Mate #DBus #ZeroTrust --- **Navigation:** -[← Zurück: SSH Agent](crumbpage-18-ssh-agent.md) | [Admin-Vektor Übersicht](crumbforest-admin-vektor.md) +[← Zurück: Alle Themen](crumbpages-doktor.sh) | [Weiter: Tanz am Kernel (Bash Hacks)](crumbpage-20-tanz-am-kernel.md) diff --git a/crumbpages-doktor.sh b/crumbpages-doktor.sh index e2093a5..58ce8a4 100755 --- a/crumbpages-doktor.sh +++ b/crumbpages-doktor.sh @@ -218,6 +218,13 @@ export PS1="\[\033[0;31m\](🔐 Remote) \u@\h:\w$ \[\033[0m\]" export SSH_USER="$CRUMB_SSH_USER" export SCP_TARGET="$CRUMB_SCP_TARGET" +# Paranoid Mode: Clear keys when this shell exits +trap 'echo "🧹 Cleaning up keys..."; ssh-add -D 2>/dev/null' EXIT + +# Watchdog Control Paths +WATCHDOG_PID="$HOME/.ssh-agent-watchdog.pid" +WATCHDOG_PAUSE="$HOME/.ssh-agent-watchdog.pause" + function remote_help() { echo "User: \$SSH_USER | Target: \$SCP_TARGET" echo "" @@ -225,6 +232,37 @@ function remote_help() { echo " crumbupload -> SCP file to target" echo " my_keys -> List local public keys" echo " ssh_config -> Edit SSH config" + echo " watchdog status -> Check Agent Watchdog" + echo " watchdog off -> Pause Watchdog (for large transfers)" + echo " watchdog on -> Resume Watchdog" +} + +function watchdog() { + CMD="\$1" + case "\$CMD" in + status) + if [ -f "\$WATCHDOG_PID" ] && kill -0 \$(cat "\$WATCHDOG_PID") 2>/dev/null; then + if [ -f "\$WATCHDOG_PAUSE" ]; then + echo "⚠️ Watchdog läuft (PID \$(cat \$WATCHDOG_PID)), ist aber PAUSIERT (Deep Work)." + else + echo "✅ Watchdog läuft und ist scharf (PID \$(cat \$WATCHDOG_PID))." + fi + else + echo "❌ Watchdog läuft nicht." + fi + ;; + off|pause) + touch "\$WATCHDOG_PAUSE" + echo "⏸️ Watchdog pausiert. Bildschirmsperre tötet den Agent jetzt NICHT." + ;; + on|resume) + rm -f "\$WATCHDOG_PAUSE" + echo "▶️ Watchdog wieder aktiv. Zero Trust re-enabled." + ;; + *) + echo "Usage: watchdog {status|off|on}" + ;; + esac } function crumbupload() { @@ -236,6 +274,7 @@ alias my_keys="ls -l ~/.ssh/*.pub" alias ssh_config="nano ~/.ssh/config" echo "" +echo "⚠️ Paranoid Mode: Closing this shell clears ssh-agent keys!" remote_help EOF diff --git a/dns_report_branko.de_2025-12-10_19-53.txt b/dns_report_branko.de_2025-12-10_19-53.txt deleted file mode 100644 index 25759a5..0000000 --- a/dns_report_branko.de_2025-12-10_19-53.txt +++ /dev/null @@ -1,32 +0,0 @@ -DNS Report für branko.de (2025-12-10_19-53) -======================================== -A Records: -81.169.145.93 ---- -A Records: -81.169.145.93 ---- -MX Records: -5 smtpin.rzone.de. ---- -SOA Records: -docks17.rzone.de. hostmaster.strato-rz.de. 2022062321 86400 7200 604800 300 ---- -TXT Records: LEER ---- -TRACE: -NS a.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS b.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS c.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS d.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS e.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS f.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS g.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS h.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS i.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS j.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS k.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS l.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -NS m.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -RRSIG NS 8 0 518400 20251223050000 20251210040000 61809 . Ro3x6l136NQLdoU5tLg1c6mHOjs10+HJkx4dnDxjWQ+2GbXQ/6gGL4i0 Y7cpha7GB9/RnVFOHvzvv+rrlAWwSc7/dVzOWao36XC/QWlameyY9Umi rbUdYmE8R1OEYFKIsnConMQzYhyPjJGi7E878r7UTyuuxKYQ6XGCAPGz E/ZGSAX7NXCcqYVwfOCBXPc+NPQuCnLuXEXNBsbYbp3HB6lOIORKptCY AzqIgc763uE1Xk5uE2j2oSg2qaOG8JMAXBp7uDdDscLdZBvYJfFuiDRg mQhbGZnlxq9/9JAqfwSAF6u9ccFja/pWLSDHw9mB0zZ2kaMbTjeL0r5A n0uiIw== from server fe80::2eea:dcff:fecd:194a%7 in 5 ms. -A 81.169.145.93 from server 2607:f1c0:fe:53:185:132:34:143 in 12 ms. diff --git a/dns_report_gmail.de_2025-12-10_19-53.txt b/dns_report_gmail.de_2025-12-10_19-53.txt deleted file mode 100644 index 368efea..0000000 --- a/dns_report_gmail.de_2025-12-10_19-53.txt +++ /dev/null @@ -1,36 +0,0 @@ -DNS Report für gmail.de (2025-12-10_19-53) -======================================== -A Records: -142.250.185.229 ---- -A Records: -142.251.39.229 ---- -MX Records: -0 . ---- -SOA Records: -ns1.google.com. dns-admin.google.com. 842151538 900 900 1800 60 ---- -TXT Records: -"v=spf1 -all" ---- -TRACE: -NS b.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS c.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS d.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS e.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS f.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS g.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS h.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS i.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS j.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS k.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS l.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS m.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -NS a.root-servers.net. from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -RRSIG NS 8 0 518400 20251223050000 20251210040000 61809 . Ro3x6l136NQLdoU5tLg1c6mHOjs10+HJkx4dnDxjWQ+2GbXQ/6gGL4i0 Y7cpha7GB9/RnVFOHvzvv+rrlAWwSc7/dVzOWao36XC/QWlameyY9Umi rbUdYmE8R1OEYFKIsnConMQzYhyPjJGi7E878r7UTyuuxKYQ6XGCAPGz E/ZGSAX7NXCcqYVwfOCBXPc+NPQuCnLuXEXNBsbYbp3HB6lOIORKptCY AzqIgc763uE1Xk5uE2j2oSg2qaOG8JMAXBp7uDdDscLdZBvYJfFuiDRg mQhbGZnlxq9/9JAqfwSAF6u9ccFja/pWLSDHw9mB0zZ2kaMbTjeL0r5A n0uiIw== from server fe80::2eea:dcff:fecd:194a%7 in 4 ms. -A 108.177.119.19 from server 2001:4860:4802:34::a in 26 ms. -A 108.177.119.83 from server 2001:4860:4802:34::a in 26 ms. -A 108.177.119.17 from server 2001:4860:4802:34::a in 26 ms. -A 108.177.119.18 from server 2001:4860:4802:34::a in 26 ms.