CleanUp Magic

This commit is contained in:
2025-12-12 19:45:38 +01:00
parent d5b4a7caac
commit 4e43fdee0c
4 changed files with 129 additions and 119 deletions

View File

@@ -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)

View File

@@ -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 <file> -> 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

View File

@@ -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.

View File

@@ -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.