Compare commits

...

10 Commits

Author SHA1 Message Date
c2ec78b55e Add DATENSCHUTZ.md (DSGVO/Privacy compliance documentation)
- Complete GDPR-compliant privacy policy
- Technical details: MariaDB, Qdrant, Filesystem storage
- Retention policies and security measures
- Data subject rights (links to KINDERRECHTE.md)
- Special protection for children (CKL §5 operationalized)
- No tracking, no analytics, no third-party cookies
- EU-based or self-hosted infrastructure only

Completes the compliance documentation suite:
 LICENSE.md (MIT + CKL dual license)
 KINDERRECHTE.md (children's rights operationalization)
 DATENSCHUTZ.md (technical GDPR compliance)

Ready for production deployment.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-13 03:19:27 +01:00
da67da3959 Add dual licensing (MIT + CKL v0.1), ecosystem docs, and children's rights documentation
- LICENSE.md: Dual license explanation (MIT + CKL)
- LICENSE-MIT.md: Full MIT text with plain language explanation
- LICENSE-CKL.md: Full Children's Knowledge License v0.1-draft
- OZM-NEXUS-ECOSYSTEM.md: Complete ecosystem architecture and governance
- KINDERRECHTE.md: Children's rights operationalization (export/deletion processes)
- README.md: Project overview with CKL badge and comprehensive documentation links
- CLAUDE.md: Project instructions for Claude Code

This establishes Crumbforest as part of the OZM⟡NEXUS ecosystem with:
- Dual licensing strategy (developer freedom + child protection)
- 8 axioms operationalized through CKL
- Clear governance path (OZM as custodian)
- DSGVO-compliant children's rights processes
- Roadmap through Q4 2025

"Wissen gehört dem Kind, solange es fragt."

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-13 03:11:34 +01:00
688ff3d4d7 light & magic 2025-12-12 21:40:49 +01:00
ada697c7d0 bugsn mit bugsy <3 2025-12-12 20:48:04 +01:00
486a28f165 Logs active 2025-12-12 20:32:14 +01:00
4c0740fd21 ... magic! 2025-12-12 19:55:49 +01:00
4e43fdee0c CleanUp Magic 2025-12-12 19:45:38 +01:00
d5b4a7caac docs: add Path 18 (SSH Agent) & 19 (Zero Trust) and removing legacy Red Hat refs 2025-12-12 01:09:54 +01:00
a1768a9a6f .... update 2025-12-12 00:59:13 +01:00
d8c5ccc997 release: Crumbpages Doktor v2.0-RC3 (The Vektor Brain Edition) 🧠 2025-12-12 00:32:31 +01:00
20 changed files with 3282 additions and 76 deletions

4
.env
View File

@@ -7,3 +7,7 @@ CRUMB_API_TOKEN="changeme"
CRUMB_SSH_USER="admin"
CRUMB_SCP_TARGET="backup.crumbforest.de:/var/backups"
# Vektor DB (Qdrant)
CRUMB_QDRANT_URL="http://localhost:6333"
CRUMB_QDRANT_KEY=""

185
CLAUDE.md Normal file
View File

@@ -0,0 +1,185 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
**Crumbpages v2** is a documentation and learning system for system administration, combining educational content with operational tooling. The project uses the "Crumbforest" metaphor - representing knowledge as a forest where "Krümels" (crumbs) guide learners through admin paths.
This is a **bash-centric repository** focused on documentation and shell scripting for system operations, SSH security automation, and API tooling for the broader Crumbforest infrastructure.
## Core Philosophy
The "Waldwächter" (Forest Guardian) approach emphasizes:
- **Transparency over magic** - Clear, readable code that can be explained to learners
- **Simplicity over complexity** - Minimal dependencies, straightforward patterns
- **Education-first** - All tools should be teachable and understandable
- **Security by default** - Automated security practices, especially around SSH
See `crumbforest-manifesto-guardian.md` for the full philosophy.
## Repository Structure
### Documentation (Crumbpages)
Educational documentation organized as numbered "paths" (`crumbpage-XX-*.md`):
- 20 crumbpages covering Linux fundamentals through advanced topics
- Template-based structure for consistency (`crumbpage-template.md`)
- Each page includes: concepts, hands-on exercises, troubleshooting, skill checks
- Progressive learning path from basic user management to kernel operations
### Operational Scripts
Three main shell scripts provide system tooling:
1. **`crumbpages-doktor.sh`** (496 lines) - Main diagnostic and operational tool
2. **`ssh-agent-guard.sh`** (68 lines) - Production SSH security daemon
3. **`ssh-agent-screenlock_v4.sh`** (67 lines) - MATE desktop SSH integration
### Meta Documentation
- `CRUMBFOREST_PROJECT_INDEX.md` - Complete project history and milestone tracking
- `HANDBUCH.md` - crumbpages-doktor.sh manual
- `QUICKSTART.md` - Quick reference for common operations
- Various tagebuch (diary) files tracking problem-solving journeys
## Common Commands
### Running the Main Tool
```bash
# Make executable (first time)
chmod +x crumbpages-doktor.sh
# Launch interactive menu
./crumbpages-doktor.sh
```
The doktor script provides 6 modules:
1. **Git Workstation** - Interactive git shell with health checks
2. **DNS Doktor** - DNS diagnostics and reporting
3. **System Doktor** - Host vitals (disk, RAM, OS info)
4. **Web Tools** - API testing (`api_search`, `api_get`, `api_ask`)
5. **Remote Tools** - SSH helpers and SCP uploads
6. **Werkzeugkasten** - Tool availability checks
### SSH Security Scripts
```bash
# Start SSH agent guard (systemd/autostart)
./ssh-agent-guard.sh
# For MATE desktop integration
./ssh-agent-screenlock_v4.sh
```
Both scripts automatically:
- Kill and restart ssh-agent on screen lock
- Write to `~/.ssh-agent-screenlock.log`
- Store agent environment in `~/.ssh/agent-environment`
- Use fixed socket path `~/.ssh/agent.sock`
## Configuration
### Environment Variables (.env)
The doktor script uses `.env` for configuration (auto-created on first run):
```ini
# API endpoints (for Crumbforest backend integration)
CRUMB_API_URL="http://localhost:8000"
CRUMB_API_TOKEN="changeme"
# SSH/Remote settings
CRUMB_SSH_USER="admin"
CRUMB_SCP_TARGET="backup.crumbforest.de:/var/backups"
# Qdrant vector DB
CRUMB_QDRANT_URL="http://localhost:6333"
CRUMB_QDRANT_KEY=""
```
## Architecture Notes
### Modular Shell Design
The `crumbpages-doktor.sh` follows a modular pattern:
- Each module is a bash function (e.g., `git_doktor()`, `web_doktor()`)
- Interactive subshells use `bash --rcfile` with custom `.rc` files in `/tmp`
- Environment isolation via `export` and temp RC files
- Color-coded output using ANSI escape sequences
### SSH Security Pattern
Both ssh-agent scripts implement "zero-trust on lock":
- **Single purpose**: Kill agent when screen locks
- **Singleton enforcement**: PID file prevents duplicate daemons
- **Deep Work Mode**: `ssh-agent-guard.sh` supports pause file for uninterrupted work
- **Fixed socket path**: Enables multiple terminals to share agent state
- **MATE integration**: Uses `dbus-monitor` for screensaver events
### API Integration
Web Tools module provides curl wrappers for the Crumbforest backend:
- FastAPI backend at `CRUMB_API_URL`
- Bearer token auth when `CRUMB_API_TOKEN` is set
- Functions: `api_search`, `api_get`, `api_ask`, `open_url`
- Qdrant-specific helpers: `q_health`, `q_list`, `q_info`
## Development Patterns
### Shell Script Style
- Bash-native (no external frameworks)
- Functions over scripts-within-scripts
- Descriptive color variables (`GREEN`, `BLUE`, `RED`, `YELLOW`, `CYAN`)
- Heredocs for multi-line templates
- Error handling via explicit checks, not `set -e`
### Documentation Style
- Markdown with emoji for visual anchoring
- Collapsible sections using `<details>` tags
- Code examples with inline comments
- "DO/DON'T" sections for best practices
- Skill check checklists at end of each page
### Git Workflow
Standard git practices:
- Main branch: `main`
- Commit history shows iterative refinement ("Logs active", "magic!", "CleanUp Magic")
- Modified files tracked: doktor script and tagebuch entries
## Context: The Broader Crumbforest
This repository is part of a larger ecosystem:
- **CrumbCore v1**: FastAPI + Qdrant RAG chat system (production)
- **PHP CRM**: Legacy system integration for child management
- **RouterOS**: Network integration for 500+ user deployment
- **TTYD**: Terminal containers for educational use
The bash scripts here serve as the "field tools" for administrators working across the full stack.
## Working with This Codebase
### When editing shell scripts:
- Test interactively before committing (scripts are meant to be run by humans)
- Preserve color scheme consistency
- Maintain module boundaries in doktor script
- Update HANDBUCH.md if adding/changing doktor modules
### When editing crumbpages:
- Follow `crumbpage-template.md` structure exactly
- Maintain numbering scheme (`crumbpage-##-topic.md`)
- Include skill checks and hands-on exercises
- Cross-link to related pages in navigation footer
### When debugging:
- Check `.env` configuration first
- Review logs: `~/.ssh-agent-screenlock.log` for SSH issues
- Use doktor's System Doktor module for host diagnostics
- Git Workstation module has `check_health` for repo state
## Security Considerations
- SSH agent scripts actively kill credentials on screen lock
- API tokens stored in `.env` (gitignored)
- No hardcoded credentials anywhere
- MATE screensaver hardening (`lock-enabled true`, `lock-delay 0`)
- Singleton daemon pattern prevents privilege escalation via duplicate processes
## References
- Project history: `CRUMBFOREST_PROJECT_INDEX.md`
- Philosophy: `crumbforest-manifesto-guardian.md`
- Tool manual: `HANDBUCH.md`
- Quick commands: `QUICKSTART.md`

View File

@@ -43,11 +43,24 @@ Dieses Dokument enthält einen chronologischen Index aller Konversationen im Cru
**Zitat:**
> "dockerduke ist bereits jetzt legende #dude <3"
### 2. Crumbpages Doktor v2.0-RC3 (Vektor Edition)
**Datum:** 12. Dezember 2025
**Status:** ✅ Integriert (#vektor #subshell)
**Features:**
- 🧠 **Qdrant Doktor:** Native Vektor-DB Diagnose (`q_health`, `q_list`, `q_info`)
- 📄 **Log Aliases:** `logs` & `tf` wieder da!
- 🗺️ **Admin-Vektor:** Pfade 15-17 repariert & navigierbar.
- 🐧 **Debian-Policy:** Red Hat Referenzen entfernt (`yum` is gone).
**Zitat:**
> "ayeeee #test #dufte RC3 ?!?!"
---
## 🏢 Rechenzentrum & Hardware
### 2. Barcode-Seriennummern im RZ erfassen
### 3. Barcode-Seriennummern im RZ erfassen
**Datum:** 06. Dezember 2025
**Projekt:** CrumbForest v0.1 - Crystal Owl Edition

446
DATENSCHUTZ.md Normal file
View File

@@ -0,0 +1,446 @@
# Datenschutzerklärung Crumbforest
**Version:** 1.0-draft
**Stand:** 2025-12-13
**Gültig für:** Crumbforest-Ökosystem (CrumbCore, Crumbpages, branko.de)
---
## Präambel
Crumbforest nimmt Datenschutz sehr ernst besonders, wenn Kinder beteiligt sind.
Diese Datenschutzerklärung erfüllt:
- **DSGVO** (Datenschutz-Grundverordnung, EU 2016/679)
- **BDSG** (Bundesdatenschutzgesetz)
- **TMG** (Telemediengesetz)
- **CKL §5** (Crumbforest Children's Knowledge License - Daten & Privatsphäre)
**Für Kinder und Eltern:** Siehe auch [KINDERRECHTE.md](KINDERRECHTE.md) für eine einfachere Erklärung.
---
## 1. Verantwortlicher
**Aktuell (Stand 2025-12-13):**
Name: Branko (Lead Maintainer)
Website: https://branko.de
Email: [wird ergänzt]
**In Transition zu:**
OZM - Open Futures Museum
[Adresse wird ergänzt]
[Email wird ergänzt]
Sobald die Trägerschaft formalisiert ist (geplant Q2 2025), wird OZM der rechtliche Verantwortliche im Sinne der DSGVO (Art. 4 Nr. 7).
**Datenschutzbeauftragter:**
[Wird bestellt, sobald gesetzlich erforderlich - bei regelmäßiger Verarbeitung von sensiblen Daten oder mehr als 20 Personen, die mit Datenverarbeitung befasst sind]
---
## 2. Grundprinzipien der Datenverarbeitung
Crumbforest folgt den **DSGVO-Grundsätzen** (Art. 5):
| Prinzip | Wie wir es umsetzen |
|---------|---------------------|
| **Rechtmäßigkeit** | Einwilligung oder berechtigtes Interesse (Bildungsauftrag) |
| **Zweckbindung** | Daten nur für Lernen, nicht für Werbung/Profiling |
| **Datenminimierung** | Nur das Nötigste (CKL §5.1) |
| **Richtigkeit** | Nutzer können Daten korrigieren |
| **Speicherbegrenzung** | Retention Policies (siehe unten) |
| **Integrität & Vertraulichkeit** | Verschlüsselung, Zugriffskontrolle |
| **Rechenschaftspflicht** | Diese Dokumentation |
---
## 3. Welche Daten werden verarbeitet?
### 3.1 Übersicht
| Datentyp | Zweck | Rechtsgrundlage | Speicherdauer |
|----------|-------|-----------------|---------------|
| **Benutzername** | Identifikation, Zuordnung von Projekten | Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung) | Bis Account-Löschung |
| **Email-Adresse** | Kommunikation, Passwort-Reset | Art. 6 Abs. 1 lit. b DSGVO | Bis Account-Löschung |
| **Passwort-Hash** | Authentifizierung | Art. 6 Abs. 1 lit. b DSGVO | Bis Account-Löschung |
| **Chat-Nachrichten** | Kontext für Lernbegleitung | Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse: Bildung) | Bis Nutzer löscht |
| **Lernprojekte** | Speicherung von Arbeitsergebnissen | Art. 6 Abs. 1 lit. b DSGVO | Bis Nutzer löscht |
| **Sensor-Messungen** | Experimente auswerten | Art. 6 Abs. 1 lit. f DSGVO | Bis Nutzer löscht |
| **Login-Zeitstempel** | Sicherheit, Aktivitäts-Tracking | Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse: Sicherheit) | 90 Tage |
| **IP-Adresse (temporär)** | Sicherheit gegen Angriffe | Art. 6 Abs. 1 lit. f DSGVO | Max. 7 Tage in Logs |
**Wir verarbeiten KEINE besonderen Kategorien personenbezogener Daten** (Art. 9 DSGVO: Gesundheit, Religion, etc.) außer, ein Nutzer teilt diese freiwillig in Chat-Nachrichten (dann gilt Einwilligung, Art. 9 Abs. 2 lit. a).
### 3.2 Bei Minderjährigen
Für Nutzer unter 16 Jahren:
- **Einwilligung der Sorgeberechtigten erforderlich** (Art. 8 DSGVO)
- **Erhöhter Schutz** durch CKL (keine Paywalls, kein Tracking, Exportrecht)
- **Automatische Löschung** inaktiver Accounts nach 1 Jahr (mit Vorwarnung)
---
## 4. Technische Details: Wo werden Daten gespeichert?
### 4.1 CrumbCore (FastAPI Backend)
**Datenbanken:**
#### MariaDB (Relationale Datenbank)
| Tabelle | Spalten (Beispiel) | Zweck | Retention |
|---------|-------------------|-------|-----------|
| `users` | `id`, `username`, `email`, `password_hash`, `created_at`, `last_login` | Benutzer-Accounts | Bis Löschung |
| `messages` | `id`, `user_id`, `character`, `user_message`, `character_response`, `timestamp` | Chat-Verläufe | Bis Löschung |
| `sessions` | `session_id`, `user_id`, `created_at`, `expires_at` | Login-Sessions | Auto-Löschung nach Ablauf |
| `projects` | `id`, `user_id`, `name`, `description`, `created_at`, `updated_at` | Projekt-Metadaten | Bis Löschung |
| `measurements` | `id`, `project_id`, `sensor_type`, `value`, `timestamp` | Sensor-Daten | Bis Löschung |
**Zugriff:** Nur CrumbCore Backend (localhost:3306, kein externer Zugriff)
#### Qdrant (Vektor-Datenbank für RAG)
| Collection | Payload-Felder | Zweck | Retention |
|------------|----------------|-------|-----------|
| `crumbforest` | `text`, `source`, `user_id` (optional), `timestamp` | Semantische Suche über Lernmaterialien | Unbegrenzt (öffentliche Inhalte), bis Löschung (User-Inhalte) |
**Zugriff:** Nur CrumbCore Backend (localhost:6333, kein externer Zugriff)
**Hinweis:** Qdrant speichert **Vektoren** (mathematische Repräsentationen von Text), nicht Klartexte. Die Original-Texte stehen in `messages` (MariaDB) oder im Filesystem.
#### Filesystem (Docker Volumes)
```
/data/
├── projects/
│ └── {user_id}/
│ └── {project_id}/
│ ├── main.py
│ ├── README.md
│ └── ...
└── logs/
├── crumbcore.log (App-Logs, 90 Tage)
└── access.log (Zugriffs-Logs, 7 Tage)
```
**Zugriff:** Nur CrumbCore Container (Docker-isoliert)
### 4.2 branko.de (Public Website)
**Keine Datenbank**, nur statische HTML-Dateien.
**Web-Server-Logs (Nginx/Apache):**
- IP-Adresse, User-Agent, Zeitstempel, angefragte URL
- **Retention:** 7 Tage, dann automatisch gelöscht
- **Zweck:** Sicherheit (DDoS-Schutz, Fehleranalyse)
**Keine Cookies**, kein Tracking, kein Analytics.
### 4.3 Crumbpages (Markdown Docs)
**Statische Dateien**, keine personenbezogenen Daten gespeichert.
Wenn Nutzer mit Crumbpages arbeiten (lokal oder via CrumbCore), entstehen **keine separaten Datenspeicherungen** alles läuft über CrumbCore (siehe 4.1).
---
## 5. Datenübermittlung & Drittanbieter
### 5.1 Hosting
**Aktuell:** Selbst gehostet (lokal oder auf eigenem Server)
**Keine Cloud-Provider** (kein AWS, Google Cloud, Azure)
**Vorteil:**
- ✅ Volle Kontrolle über Daten
- ✅ Keine Weitergabe an Dritte
- ✅ DSGVO-konform per Design
**Wenn Cloud-Hosting hinzukommt:**
- Nur EU-basierte Provider (DSGVO-konform)
- Auftragsverarbeitungsvertrag (Art. 28 DSGVO)
- Dokumentation hier aktualisiert
### 5.2 KI-Modell-Provider
**CrumbCore nutzt externe APIs:**
- OpenAI (GPT-4, GPT-3.5)
- Anthropic (Claude)
- Google (Gemini)
- OpenRouter (Aggregator)
**Was wird übermittelt:**
- Chat-Nachrichten (Nutzer-Fragen + System-Prompts)
- **KEINE** Metadaten (IP, Email, Namen) nur der Text selbst
**Rechtsgrundlage:**
- Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse: Funktionsfähigkeit)
- Bei Kindern: Einwilligung der Sorgeberechtigten
**Datenschutz-Status der Provider:**
| Provider | DSGVO-Status | Datenverarbeitung |
|----------|--------------|-------------------|
| **OpenAI** | DPA verfügbar, API-Daten werden nicht zum Training genutzt (seit März 2023) | USA (GDPR-konformes DPA) |
| **Anthropic** | DPA verfügbar, keine Nutzung für Training | USA (GDPR-konformes DPA) |
| **Google** | DPA verfügbar | EU & USA |
**Wichtig:** Nutzer können wählen, welches Modell sie nutzen (Wahlrecht = erhöhte Transparenz).
**Für "Offline-Modus":** Geplant ist Integration von lokal laufenden Modellen (Llama, Mistral via Ollama) für völlige Datenautonomie (Roadmap Q3 2025).
### 5.3 Keine weiteren Drittanbieter
❌ Kein Google Analytics
❌ Kein Facebook Pixel
❌ Keine Werbe-Netzwerke
❌ Keine Social Media Embeds (die tracken)
❌ Keine CDNs für JavaScript (alles lokal)
**CKL §5.2 verpflichtet: "Kein Tracking, kein Profiling"**
---
## 6. Cookies & Tracking
### 6.1 Cookies
**CrumbCore verwendet:**
| Cookie | Typ | Zweck | Lebensdauer |
|--------|-----|-------|-------------|
| `session_id` | Technisch notwendig | Login-Session | Bis Logout (max. 30 Tage) |
**branko.de verwendet:** **Keine Cookies**
### 6.2 Tracking
**Wir tracken NICHT:**
- ❌ Keine Bewegungsprofile
- ❌ Keine Verhaltensanalyse
- ❌ Keine "Heatmaps"
- ❌ Keine Cross-Site-Verfolgung
**Wir loggen NUR für Sicherheit:**
- ✅ Login-Zeitpunkte (gegen Brute-Force)
- ✅ Failed Login Attempts (gegen Hacking)
- ✅ API-Errors (für Debugging)
Diese Logs werden **anonymisiert** (IP-Adressen gekürzt) und nach **7-90 Tagen gelöscht**.
---
## 7. Sicherheitsmaßnahmen
### 7.1 Technische Maßnahmen
| Maßnahme | Umsetzung |
|----------|-----------|
| **Verschlüsselung in Transit** | HTTPS/TLS 1.3 (Let's Encrypt Zertifikate) |
| **Verschlüsselung at Rest** | Passwörter: bcrypt mit Salt (12 Rounds), Datenbank-Files: Filesystem-Encryption (LUKS/dm-crypt) |
| **Zugriffskontrolle** | Role-Based Access Control (RBAC), Nutzer sehen nur eigene Daten |
| **Firewall** | Nur Ports 80/443 offen, DB-Ports (3306, 6333) nur localhost |
| **Container-Isolation** | Docker Network Isolation, keine Privileged Containers |
| **Logging** | Zentrale Logs, regelmäßige Review, Intrusion Detection geplant (Q2 2025) |
| **Backups** | Tägliche Backups, verschlüsselt, offline gespeichert (Air-Gap) |
| **Updates** | Automatische Security Updates (unattended-upgrades) |
### 7.2 Organisatorische Maßnahmen
- **Admin-Zugriff:** Nur 2-3 Personen (Branko + ggf. OZM-Admins)
- **2FA:** Für Admin-Accounts verpflichtend
- **Prinzip der geringsten Rechte:** Jeder Dienst läuft mit minimalen Berechtigungen
- **Incident Response Plan:** [In Arbeit, Q1 2025]
- **Regelmäßige Audits:** Jährliche Security-Reviews
### 7.3 Datenschutz-Folgenabschätzung (DSFA)
**Erforderlich nach Art. 35 DSGVO?**
Prüfung:
- ☑ Systematische Überwachung? **Nein** (kein Tracking)
- ☑ Verarbeitung besonderer Kategorien? **Nein** (keine Gesundheitsdaten etc.)
- ☑ Minderjährige betroffen? **Ja** → Erhöhtes Risiko
**Ergebnis:** DSFA empfohlen (geplant Q1 2025 mit OZM-Governance)
---
## 8. Betroffenenrechte (DSGVO Art. 15-22)
### 8.1 Auskunftsrecht (Art. 15)
Du kannst jederzeit fragen:
- Welche Daten haben wir über dich?
- Zu welchem Zweck?
- Wie lange speichern wir sie?
**Wie:** Siehe [KINDERRECHTE.md](KINDERRECHTE.md) - Aktuell per Email, bald self-service via API.
### 8.2 Recht auf Berichtigung (Art. 16)
Du kannst falsche Daten korrigieren lassen.
**Wie:** Email an [Kontakt] oder (bald) über Profil-Seite.
### 8.3 Recht auf Löschung (Art. 17 - "Recht auf Vergessenwerden")
Du kannst verlangen, dass wir deine Daten löschen.
**Wie:** Siehe [KINDERRECHTE.md](KINDERRECHTE.md) - Detaillierter Löschprozess dokumentiert.
**Ausnahmen:**
- Rechtliche Aufbewahrungspflichten (z.B. Buchhaltung)
- Öffentliches Interesse (z.B. veröffentlichte Open-Source-Beiträge)
### 8.4 Recht auf Datenübertragbarkeit (Art. 20)
Du kannst eine Kopie deiner Daten in strukturiertem Format erhalten.
**Format:** JSON oder CSV (maschinenlesbar)
**Wie:** Siehe [KINDERRECHTE.md](KINDERRECHTE.md) - Export-Funktion.
### 8.5 Widerspruchsrecht (Art. 21)
Du kannst der Verarbeitung widersprechen (z.B. wenn wir uns auf "berechtigtes Interesse" berufen).
**Folge:** Wir stellen die Verarbeitung ein, außer es gibt zwingende Gründe.
### 8.6 Recht auf Einschränkung der Verarbeitung (Art. 18)
Du kannst verlangen, dass wir Daten nur speichern, aber nicht nutzen (z.B. während eines Rechtsstreits).
### 8.7 Beschwerde bei Aufsichtsbehörde (Art. 77)
Wenn du unzufrieden bist, kannst du dich beschweren bei:
**Zuständige Aufsichtsbehörde:** (abhängig von Wohnort)
- **Hamburg:** Hamburgischer Beauftragter für Datenschutz und Informationsfreiheit
Website: https://datenschutz-hamburg.de
Email: mailbox@datenschutz.hamburg.de
- **Andere Bundesländer:** Siehe https://www.bfdi.bund.de/DE/Service/Anschriften/Laender/Laender-node.html
---
## 9. Speicherdauer (Retention Policies)
| Datentyp | Speicherdauer | Löschmechanismus |
|----------|---------------|------------------|
| **Account-Daten** | Bis Account-Löschung | Manuell oder nach 1 Jahr Inaktivität (mit Vorwarnung) |
| **Chat-Nachrichten** | Bis Nutzer löscht | Manuell via API oder Account-Löschung |
| **Projekte** | Bis Nutzer löscht | Manuell via API oder Account-Löschung |
| **Sessions** | Max. 30 Tage | Auto-Löschung nach Ablauf |
| **Access Logs** | 7 Tage | Cron-Job (täglich) |
| **App Logs** | 90 Tage | Cron-Job (wöchentlich) |
| **Backups** | 3 Monate | Rotation (älteste wird überschrieben) |
**Wichtig:** Nach Löschung sind Daten **unwiederbringlich gelöscht** (inkl. Backups werden bereinigt).
---
## 10. Datenverarbeitung bei Kindern
### 10.1 Einwilligung
**Unter 16 Jahren:** Einwilligung der Sorgeberechtigten erforderlich (Art. 8 DSGVO).
**Wie wir das sicherstellen:**
- Checkbox: "Ich bin über 16 Jahre alt" ODER "Ich habe die Einwilligung meiner Eltern"
- Email-Bestätigung an Sorgeberechtigte (geplant Q1 2025)
- Schulen/Lehrkräfte können als "Verantwortliche" auftreten (dann regelt die Schule die Einwilligung)
### 10.2 Erhöhter Schutz (CKL)
Für Kinder gilt **automatisch**:
- **Kein Profiling** (Art. 22 DSGVO + CKL §5.2)
- **Keine Werbung** (CKL §7.3)
- **Keine Weitergabe** an Dritte außer KI-Provider (und nur anonymisiert)
- **Jederzeit Export/Löschung** (CKL §3.2, §3.3)
### 10.3 Schulkontext
Wenn Crumbforest in Schulen eingesetzt wird:
- **Schule ist Verantwortlicher** (nicht Crumbforest)
- **Lehrer haben Zugriff** auf Schüler-Projekte (pädagogischer Zweck)
- **Schule muss Einwilligungen einholen** (nach Landesschulgesetzen)
Wir bieten: **Data Processing Agreement (DPA)** für Schulen (Template in Arbeit, Q1 2025).
---
## 11. Änderungen dieser Datenschutzerklärung
**Wie wir dich informieren:**
- Email an registrierte Nutzer (wenn wesentliche Änderungen)
- Hinweis beim nächsten Login
- Versionsnummer und Datum am Anfang dieses Dokuments
**Dein Recht:**
- Du kannst widersprechen (dann Account löschen)
- Du kannst weiter nutzen (= implizite Einwilligung in neue Version)
**Versionshistorie:**
- v1.0-draft (2025-12-13): Erste Version
---
## 12. Kontakt & Fragen
### Für allgemeine Fragen:
**Email:** [wird ergänzt]
**Website:** https://crumbforest.com
### Für Datenschutz-spezifische Anfragen:
**Betroffenenrechte:** Siehe [KINDERRECHTE.md](KINDERRECHTE.md)
**Datenschutzbeauftragter:** [wird bestellt, sobald erforderlich]
### Für Admins/Entwickler:
**Technische Dokumentation:** Siehe [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md) Section VI
**CKL Compliance:** Siehe [LICENSE-CKL.md](LICENSE-CKL.md)
---
## 13. Zusammenfassung (TL;DR)
**Was wir speichern:** Nur was nötig ist (Benutzername, Chat, Projekte)
**Warum:** Damit du lernen kannst
**Wo:** Lokal auf eigenem Server (keine Cloud)
**Wie lange:** Bis du löschst (oder 1 Jahr Inaktivität)
**Wer sieht es:** Nur du (+ dein Lehrer, wenn Schulkontext)
**Tracking:** Keins (kein Analytics, keine Werbung)
**Deine Rechte:** Export, Löschung, Korrektur (siehe KINDERRECHTE.md)
**Kinder:** Besonderer Schutz durch CKL (kein Profiling, keine Paywalls)
**Das war's. Keine versteckten Klauseln.**
---
## 14. Rechtliche Referenzen
Diese Datenschutzerklärung basiert auf:
- **DSGVO** (EU 2016/679): https://eur-lex.europa.eu/eli/reg/2016/679/oj
- **BDSG** (Bundesdatenschutzgesetz): https://www.gesetze-im-internet.de/bdsg_2018/
- **TMG** (Telemediengesetz): https://www.gesetze-im-internet.de/tmg/
- **CKL** (Crumbforest Children's Knowledge License): [LICENSE-CKL.md](LICENSE-CKL.md)
- **UN-Kinderrechtskonvention** (Art. 16 - Privatsphäre): https://www.kinderrechtskonvention.info/
---
**Stand:** 2025-12-13
**Version:** 1.0-draft
**Nächstes Review:** Q1 2025 (nach OZM-Governance-Formalisierung)
**Lizenz:** CC-BY-SA 4.0 (dieses Dokument)
---
> *"Wissen gehört dem Kind, solange es fragt."*
> *"Daten gehören dem Kind, solange es lernt."*
> — Crumbforest-Prinzip

471
KINDERRECHTE.md Normal file
View File

@@ -0,0 +1,471 @@
# Deine Rechte bei Crumbforest 🌲
> **Für Kinder:** Das hier gehört **DIR**. Wir passen darauf auf.
> **Für Eltern:** Dieses Dokument operationalisiert CKL §3 (Rechte der Kinder) und ist DSGVO-konform.
---
## 📦 Was gehört dir?
Alles, was **du** erschaffst, gehört **dir** nicht uns, nicht der Schule, nicht dem Internet.
### Das sind deine Sachen:
- ✍️ **Texte**: Alle Fragen, die du stellst. Alle Geschichten, die du schreibst.
- 💻 **Code**: Alle Programme, die du baust (Python, Bash, Blockly...)
- 🎨 **Bilder**: Alle Zeichnungen und Screenshots
- 📊 **Messungen**: Alle Daten, die du sammelst (Temperatur, Bewegung, Sensoren...)
- 💬 **Chats**: Alle Gespräche mit den Charakteren (Krümeleule, FunkFox...)
- 🏗️ **Projekte**: Alles, was du mit Raspberry Pi, ESP32 oder anderen Tools baust
**Wichtig:** Auch wenn du das auf einem Computer von Crumbforest machst **du** bist der Besitzer oder die Besitzerin!
Das steht so im Gesetz (CKL §3.1 + DSGVO Art. 20).
---
## 💾 Wie bekomme ich meine Daten?
Du kannst **jederzeit** eine Kopie von allem verlangen, was du gemacht hast.
### So geht's:
#### **Wenn du mit CrumbCore arbeitest:**
**Aktuell (Stand 2025-12):**
- Sprich mit deinem Lehrer oder deiner Lehrerin
- Oder schreibe eine Email an: [Kontakt wird ergänzt]
- Wir schicken dir dann alles als Datei
**Bald (geplant Q1 2025):**
Du kannst selbst auf einen Knopf drücken:
1. Gehe zu deinem Profil
2. Klicke auf "Meine Daten herunterladen"
3. Du bekommst eine ZIP-Datei mit allem
Die Datei enthält:
```
meine-crumbforest-daten.zip
├── chats.json (alle Gespräche)
├── projekte/ (deine Projekte)
│ ├── esp32-blink/
│ └── pi-server/
├── messungen.csv (Sensor-Daten)
└── README.txt (Erklärung, was was ist)
```
**Alles in offenen Formaten** (JSON, CSV, TXT, PNG) du kannst es mit jedem Programm öffnen!
#### **Wenn du mit Crumbpages lernst:**
- Alle Markdown-Dateien sind sowieso frei zugänglich
- Du kannst sie einfach kopieren: Rechtsklick → Kopieren
- Oder das ganze Repo herunterladen (siehe QUICKSTART.md)
---
## 🗑️ Wie lösche ich meine Daten?
Manchmal möchte man nicht, dass alte Sachen gespeichert bleiben. **Das ist okay!**
Du kannst sagen: "Ich will, dass ihr alles von mir löscht."
### So geht's:
#### **Option 1: Alles löschen**
- Sprich mit deinem Lehrer/deiner Lehrerin
- Oder schreibe eine Email mit deinen Eltern an: [Kontakt wird ergänzt]
- Schreibe rein: "Bitte löscht alle meine Daten."
**Was wir dann tun:**
1. Wir löschen alle deine Chats aus der Datenbank
2. Wir löschen deine Projekte vom Server
3. Wir löschen deinen Account
4. **Wichtig:** Vorher fragen wir: "Willst du vorher eine Kopie?"
**Das dauert maximal 7 Tage.**
#### **Option 2: Nur bestimmte Sachen löschen**
Du kannst auch sagen: "Löscht nur dieses Projekt" oder "Löscht nur diese Chat-Nachricht".
Das geht genauso sag uns einfach, was weg soll.
#### **Bald (geplant Q1 2025):**
Du kannst selbst löschen:
1. Gehe zu deinem Profil
2. Klicke auf "Meine Daten verwalten"
3. Wähle aus, was du löschen willst
4. Bestätige: "Ja, wirklich löschen"
---
## 🔍 Was wird überhaupt gespeichert?
**Wir speichern nur, was zum Lernen wichtig ist. Nicht mehr!**
### Das speichern wir:
| Was? | Warum? | Wo? | Wie lange? |
|------|--------|-----|------------|
| Dein Benutzername | Damit wir wissen, wer du bist | CrumbCore Datenbank | Bis du kündigst |
| Deine Chat-Nachrichten | Damit die Charaktere sich erinnern | CrumbCore Datenbank | Bis du löschst |
| Deine Projekte (Code, Bilder...) | Damit du später weiter machen kannst | CrumbCore Dateisystem | Bis du löschst |
| Sensor-Messungen | Damit du deine Experimente auswerten kannst | CrumbCore Datenbank | Bis du löschst |
| Wann du dich einloggst | Damit wir wissen, ob du noch aktiv bist | CrumbCore Logfiles | 90 Tage |
### Das speichern wir **NICHT**:
- ❌ Keine Passwörter (nur verschlüsselte Hashes)
- ❌ Keine IP-Adressen (außer temporär für Sicherheit)
- ❌ Keine Tracking-Cookies
- ❌ Keine "Werbe-ID" oder ähnliches
- ❌ Keine Bilder von dir (außer du lädst sie hoch für ein Projekt)
- ❌ Keine Sprachaufnahmen
- ❌ Keine Bewegungsprofile
**Crumbforest hat kein Google Analytics, kein Facebook Pixel, keine Spionage-Tools.**
### Wer kann meine Daten sehen?
1. **Du selbst** (immer)
2. **Dein Lehrer/deine Lehrerin** (wenn du in einem Kurs bist)
3. **Die Admins von Crumbforest** (nur für technischen Support)
4. **Niemand sonst!**
Wir verkaufen deine Daten **NIEMALS**. Nie, nie, nie.
Das ist gesetzlich verboten (DSGVO) **und** gegen die CKL.
---
## 🚪 Was passiert, wenn ich gehe?
Du kannst **jederzeit** aufhören, bei Crumbforest zu lernen.
### Wenn du gehst:
**Du kannst wählen:**
**Option A: Mitnehmen**
- Wir geben dir alles als Download
- Du kannst woanders weiter machen
- Wir löschen deine Daten nach 30 Tagen
**Option B: Löschen**
- Wir löschen sofort alles
- Nichts bleibt übrig
- Du kannst nicht mehr zurück
**Option C: Archivieren**
- Wir behalten deine Sachen für dich (max. 1 Jahr)
- Du kannst später wieder kommen
- Nach 1 Jahr fragen wir nochmal: "Willst du es noch?"
**Ohne Nachteile:** Du musst nichts zahlen, du bekommst keinen Ärger, alles ist gut.
Das ist dein Recht (CKL §10.2 + DSGVO Art. 17).
---
## 🛡️ Wie sicher sind meine Daten?
Wir nehmen Sicherheit **sehr ernst**.
### Was wir tun:
- 🔒 **Verschlüsselung**: Passwörter sind verschlüsselt (niemand kann sie lesen)
- 🖥️ **Lokaler Server**: Deine Daten sind nicht in der "Cloud" (kein Google, kein Amazon)
- 🔐 **Zugriffskontrolle**: Nur du und dein Lehrer können deine Projekte sehen
- 📝 **Logs**: Wir schreiben auf, wer was macht (gegen Hacker)
- 🔄 **Backups**: Wir machen Sicherheitskopien (falls Computer kaputt geht)
- 🗑️ **Löschung**: Wenn wir löschen, ist es **wirklich** gelöscht (nicht nur versteckt)
### Was du tun solltest:
- ✅ Wähle ein gutes Passwort (nicht "1234")
- ✅ Verrate dein Passwort niemandem (auch nicht Freunden)
- ✅ Melde dich ab, wenn du fertig bist
- ✅ Sag Bescheid, wenn etwas komisch ist
---
## ❓ Ich habe eine Frage / Es gibt ein Problem
### Für Kinder:
**Sprich zuerst mit deinem Lehrer oder deiner Lehrerin.**
Wenn das nicht hilft, oder wenn du denkst "Das ist nicht okay", dann:
- Sprich mit deinen Eltern
- Oder schreibe uns: [Kontakt wird ergänzt]
### Für Eltern/Sorgeberechtigte:
Sie haben jederzeit das Recht:
- Auskunft über gespeicherte Daten zu verlangen (DSGVO Art. 15)
- Daten korrigieren zu lassen (DSGVO Art. 16)
- Daten löschen zu lassen (DSGVO Art. 17)
- Der Verarbeitung zu widersprechen (DSGVO Art. 21)
- Beschwerde bei der Aufsichtsbehörde einzulegen
**Kontakt:**
- Email: [wird ergänzt]
- Verantwortlicher: Branko (Lead Maintainer)
- Datenschutzbeauftragter: [wird ergänzt, wenn benötigt]
**Aufsichtsbehörde:**
Je nach Bundesland siehe: https://www.bfdi.bund.de/DE/Service/Anschriften/Laender/Laender-node.html
---
## 📋 Zusammenfassung (für Eltern & Lehrer)
| Recht | Gesetzliche Grundlage | Wie umgesetzt? |
|-------|----------------------|----------------|
| Eigentum an Inhalten | CKL §3.1 | Kinder behalten Urheberrechte |
| Datenportabilität | DSGVO Art. 20, CKL §3.2 | Export-Funktion (geplant Q1 2025) |
| Löschung | DSGVO Art. 17, CKL §3.3 | Löschprozess dokumentiert |
| Auskunft | DSGVO Art. 15 | Auf Anfrage, bald self-service |
| Widerspruch | DSGVO Art. 21 | Jederzeit ohne Nachteile |
| Datenminimierung | DSGVO Art. 5, CKL §5.1 | Nur lernrelevante Daten |
| Transparenz | DSGVO Art. 12-14, CKL §5.3 | Dieses Dokument + DATENSCHUTZ.md |
| Keine Paywalls | CKL §7.3 | Lernkerne kostenlos |
---
## 🔧 Technische Umsetzung (für Entwickler)
### TODOs für vollständige Compliance:
#### 1. Export-API implementieren
**Status:** ⏳ Geplant Q1 2025
**Endpoint:** `GET /api/v1/my-data`
**Authentication:** Bearer Token (User muss eingeloggt sein)
**Response:**
```json
{
"user": {
"username": "kruemel123",
"created_at": "2024-09-15T10:30:00Z",
"last_login": "2025-12-13T14:22:00Z"
},
"messages": [
{
"id": 1,
"character": "Krümeleule",
"timestamp": "2025-12-13T14:00:00Z",
"user_message": "Wie funktioniert Bash?",
"character_response": "Bash ist eine Shell..."
}
],
"projects": [
{
"id": 1,
"name": "ESP32 Blink",
"created_at": "2025-11-01T09:00:00Z",
"files": [
{"filename": "main.py", "content": "...base64..."}
]
}
],
"measurements": [...],
"export_date": "2025-12-13T15:00:00Z",
"format_version": "1.0"
}
```
**Optional:** Auch als ZIP-Download verfügbar machen:
```python
# app/routers/data_export.py
from fastapi import APIRouter, Depends
from fastapi.responses import StreamingResponse
import zipfile
import io
@router.get("/my-data.zip")
async def export_data_zip(user = Depends(get_current_user)):
# Erstelle ZIP in Memory
zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zip_file:
# Füge alle User-Daten hinzu
zip_file.writestr("README.txt", "Deine Crumbforest Daten...")
zip_file.writestr("chats.json", json.dumps(user.messages))
# ... weitere Dateien
zip_buffer.seek(0)
return StreamingResponse(
zip_buffer,
media_type="application/zip",
headers={"Content-Disposition": f"attachment; filename=crumbforest-{user.username}.zip"}
)
```
#### 2. Lösch-API implementieren
**Status:** ⏳ Geplant Q1 2025
**Endpoint:** `DELETE /api/v1/my-data`
**Authentication:** Bearer Token + zusätzliche Bestätigung (gegen Unfälle)
**Request:**
```json
{
"confirm": "DELETE_ALL_MY_DATA",
"reason": "optional feedback"
}
```
**Was gelöscht wird:**
```python
# app/services/data_deletion.py
async def delete_user_data(user_id: int):
# 1. Chats aus MariaDB
await db.execute("DELETE FROM messages WHERE user_id = ?", user_id)
# 2. Vektoren aus Qdrant (wenn User-spezifisch)
qdrant_client.delete(
collection_name="crumbforest",
points_selector=models.FilterSelector(
filter=models.Filter(
must=[
models.FieldCondition(
key="user_id",
match=models.MatchValue(value=user_id)
)
]
)
)
)
# 3. Projekte aus Dateisystem
shutil.rmtree(f"/data/projects/{user_id}")
# 4. Sessions
await db.execute("DELETE FROM sessions WHERE user_id = ?", user_id)
# 5. User-Account
await db.execute("DELETE FROM users WHERE id = ?", user_id)
# 6. Logs bereinigen (DSGVO: Personenbezug entfernen)
# Logfiles anonymisieren, nicht löschen (Sicherheit)
await anonymize_logs(user_id)
```
**Response:**
```json
{
"status": "deleted",
"deleted_at": "2025-12-13T15:30:00Z",
"items_deleted": {
"messages": 42,
"projects": 3,
"files": 18
}
}
```
#### 3. DATENSCHUTZ.md erstellen
**Status:** ⏳ TODO (nächster Schritt nach KINDERRECHTE.md)
Sollte enthalten:
- Detaillierte Datenbank-Schema-Dokumentation
- Welche Tabellen speichern was?
- Retention Policies
- Backup-Strategie
- Incident Response Plan
#### 4. Frontend für Self-Service
**Status:** ⏳ Geplant Q1 2025
Mockup:
```
┌─────────────────────────────────────┐
│ Mein Profil │
├─────────────────────────────────────┤
│ │
│ 📦 Meine Daten herunterladen │
│ ├─ Als JSON │
│ └─ Als ZIP (alles) │
│ │
│ 🗑️ Daten löschen │
│ ├─ Nur Chats löschen │
│ ├─ Nur Projekt "X" löschen │
│ └─ ⚠️ ALLES löschen (Account) │
│ │
│ 📊 Was ist gespeichert? │
│ ├─ 42 Chat-Nachrichten │
│ ├─ 3 Projekte (18 Dateien) │
│ └─ Letzter Login: heute 14:22 │
│ │
└─────────────────────────────────────┘
```
#### 5. Automatische Daten-Bereinigung
**Status:** ⏳ Geplant Q2 2025
Cron-Job für:
- Alte Sessions löschen (> 90 Tage inaktiv)
- Anonyme Accounts löschen (> 1 Jahr inaktiv)
- Logfiles bereinigen (> 90 Tage alt)
```python
# scripts/cleanup_cron.py
async def cleanup_inactive_users():
threshold = datetime.now() - timedelta(days=365)
inactive_users = await db.fetch_all(
"SELECT id FROM users WHERE last_login < ? AND account_type = 'anonymous'",
threshold
)
for user in inactive_users:
# Email-Warnung 30 Tage vorher (wenn Email vorhanden)
# Dann löschen
await delete_user_data(user.id)
```
---
## 📜 Rechtliche Hinweise
**Dieses Dokument ist rechtsverbindlich.**
Es konkretisiert die Rechte aus:
- Crumbforest Children's Knowledge License (CKL) v0.1
- DSGVO (Datenschutz-Grundverordnung)
- TMG (Telemediengesetz)
- Kinderrechtskonvention der UN (insb. Art. 16)
**Verantwortlicher im Sinne der DSGVO:**
[Wird ergänzt nach OZM-Transition aktuell: Branko]
**Stand:** 2025-12-13
**Version:** 1.0-draft
**Nächstes Review:** Q1 2025 (nach CKL v1.0 Finalisierung)
---
## 🌲 Schlusswort
**Crumbforest ist dein Wald.**
Alles, was du hier pflanzt, gehört dir.
Niemand kann es dir wegnehmen.
Du kannst es jederzeit mitnehmen.
**Und wenn du Fragen hast?**
Frag einfach. Das ist dein Recht.
> *"Wissen gehört dem Kind, solange es fragt."*
---
**Lizenz:** CC-BY-SA 4.0 (dieses Dokument)
**Teil von:** Crumbforest Ecosystem (https://crumbforest.com)
**Siehe auch:** [LICENSE-CKL.md](LICENSE-CKL.md), [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md)

306
LICENSE-CKL.md Normal file
View File

@@ -0,0 +1,306 @@
# CKL — The Crumbforest Children's Knowledge License
**Version:** 0.1-draft
**Date:** 2025-12-13
**Status:** Community Review
**Base:** MIT License (compatible)
---
> **Kurzfassung:** *Wissen gehört dem Kind, solange es fragt.* Wir bauen Lernräume, in denen Fragen Vorrang haben, Beweise prüfbar sind und nichts hinter Paywalls verschwindet.
> **Hinweis:** Dies ist eine gemeinschaftliche Lizenz in einfacher Sprache. Sie ersetzt keine Rechtsberatung. Version 0.1 zur Kommentierung.
---
## Präambel
Kinder lernen am besten dort, wo Ruhe vor Hast kommt, Verstehen vor Verwerten und Beweise vor Behauptungen. Die CKL schützt solche Räume. Sie ist eine Haltung in Lizenzform: **Nullfeld zuerst**, dann Messung. **Resonanz vor Regel.**
---
## 1. Geltungsbereich
Die CKL gilt für Workshops, Kurse, Materialien, Software-Container, Daten und Artefakte, die unter dem Namen **Crumbforest** oder in seinem Geist betrieben, veröffentlicht oder geteilt werden besonders, wenn Kinder beteiligt sind.
---
## 2. Grundsatz „Kinder zuerst"
Kinderfragen haben Vorrang. Alle Entscheidungen didaktisch, organisatorisch, technisch werden auf ihren Nutzen für das Kind geprüft. Ein Kind darf mit einer guten Frage **alles** in Frage stellen.
---
## 3. Rechte der Kinder
1. **Urheber:innenschaft**: Rechte an Inhalten, die Kinder schaffen (Texte, Code, Bilder, Sounds, Messreihen), verbleiben bei den Kindern.
2. **Zugriff**: Kinder erhalten eine exportierbare Kopie ihrer Arbeiten und Messdaten in **offenen Formaten**.
3. **Widerruf**: Kinder (bzw. Sorgeberechtigte) können eine Veröffentlichung jederzeit widerrufen. Löschung erfolgt zeitnah.
---
## 4. Pflichten der Erwachsenen/Betreiber
1. **Prüfbarkeit**: Setups sind **reproduzierbar** dokumentiert (Materialliste, Schritte, Versionen). Keine Blackboxes.
2. **Anerkennung**: Beiträge von Kindern und Crew werden namentlich oder pseudonym **gewürdigt** sofern gewünscht.
3. **Sicherheit**: Risiken werden erklärt. Es wird nur betrieben, was verantwortbar ist.
---
## 5. Daten & Privatsphäre
1. **Datenminimierung**: Es werden nur Daten erhoben, die für das Lernen nötig sind. **Keine** versteckte Telemetrie.
2. **Kein Tracking**: Kein Werbe-Tracking, kein Profiling, keine biometrische Auswertung von Kindern.
3. **Transparenz**: Welche Daten anfallen, wird **vorab** erklärt; Speicherorte sind benennbar; Löschwege sind dokumentiert.
---
## 6. Offenheit & Reproduzierbarkeit
1. **Offene Beweise**: Messergebnisse, Methoden und Skripte werden so veröffentlicht, dass Dritte sie **nachvollziehen** können.
2. **Container statt Inseln**: Software läuft offline-fähig in reproduzierbaren **Containern** (oder gleichwertigen Setups).
3. **Logik vor Effekt**: Kein „Zauber", der nicht erklärt werden kann. Effekte folgen der Erklärung, nicht umgekehrt.
---
## 7. Offline-First & Zugang
1. **Offline vor Cloud**: Betrieb ohne Dauer-Internet ist vorrangig. Cloud ist optional und begründungsbedürftig.
2. **Barrierearme Zugänge**: Terminal/TTYD, Markdown-Materialien und Druckversionen stehen bereit.
3. **Preisfreiheit für Kinderfragen**: Der Zugang zu Fragen/Antworten darf nicht an Online-Konten oder Token-Kosten gebunden werden.
---
## 8. Teilen, Anerkennung, Nutzung
1. **Teilen** ist erwünscht unter **Namensnennung** und Beibehaltung der CKL für kinderbezogene Teile.
2. **Kommerz** ist erlaubt, sofern **Kinderzugang frei bleibt**, Beweise offen bleiben und keine Paywalls vor Lernkernen stehen.
3. **Keine Exklusivitätsansprüche** gegenüber von Kindern erarbeiteten Ergebnissen.
---
## 9. Kosten, Förderungen, Transparenz
1. **Klarheit**: Gebühren, Budgets und Fördermittel werden **verständlich** ausgewiesen.
2. **Zeit kaufen, nicht Schweigen**: Förderungen dienen Lernzeit und Infrastruktur, nicht Marketing-Schein.
---
## 10. Widerruf & Durchsetzung
1. Verstöße können zur **Ablösung** der CKL-Nutzung führen.
2. Kinder/Sorgeberechtigte können eine Teilnahme **ohne Nachteile** beenden; ihre Daten werden gelöscht oder ausgehändigt.
---
## 11. Kompatibilität
Die CKL ist kompatibel mit freien Lizenzen (z. B. MIT/Apache/CC-BY) für **Erwachsenen-Code/Material**, solange **Kinderrechte** gemäß CKL **nicht** eingeschränkt werden. Bei Konflikt gilt die **strengere Kinderschutz-Regel**.
---
## 12. Haftungsausschluss
Angebote erfolgen **ohne Gewähr**. Sicherheit wird ernst genommen; Restrisiken werden erklärt. Die CKL schafft keine gesetzlichen Ersatzansprüche, sie **ergänzt** sie um Haltung.
---
## Menschliche Kurzfassung (human-readable)
Wir arbeiten langsam genug, dass Kinder **mitdenken** können, und offen genug, dass andere **nachbauen** können. Niemand verdient an dem Zugang zu einer **Frage**. Alles Wichtige bleibt **prüfbar**. Wenn etwas unklar ist, gilt: *Erst Ruhe. Dann messen.*
---
## CKL-Hinweis zum Abdruck
> *Dieses Projekt folgt der **CKL Crumbforest Children's Knowledge License (v0.1-draft)**: Kinderfragen haben Vorrang; Arbeiten bleiben bei den Kindern; Beweise sind offen und reproduzierbar; Offline hat Vorrang; keine Paywalls vor Lernkernen; Daten sind minimal, transparent, widerrufbar. Mehr unter: crumbforest.com*
---
## Für Entwickler:innen
### Wie erkenne ich, ob die CKL gilt?
Die CKL greift automatisch, wenn:
- Software in Bildungskontexten mit Kindern genutzt wird
- Lernende unter 18 Jahren beteiligt sind
- Pädagogische Inhalte bereitgestellt werden
- Lerndaten erfasst oder verarbeitet werden
### Was muss ich tun?
**Compliance-Checkliste:**
- [ ] §3.2: Export-Funktion für Benutzerdaten implementiert
- [ ] §3.3: Widerruf-/Löschmechanismus vorhanden
- [ ] §4.1: Setup reproduzierbar dokumentiert (README, Dockerfiles...)
- [ ] §5.1: Datenminimierung praktiziert
- [ ] §5.2: Kein Tracking, keine versteckte Telemetrie
- [ ] §5.3: Datenspeicherung transparent dokumentiert (DATENSCHUTZ.md)
- [ ] §6.1: Methoden und Ergebnisse nachvollziehbar
- [ ] §6.2: Software läuft offline oder in Containern
- [ ] §6.3: Keine unerklärlichen "Blackboxes"
- [ ] §7.1: Offline-Modus verfügbar (kein Cloud-Zwang)
- [ ] §7.2: Barrierefreie Zugänge (Markdown, Plain Text, Druckversionen)
- [ ] §7.3: Keine Paywalls vor Lern-Kernfunktionen
**Siehe [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md) Section VI für detaillierte Compliance-Checks.**
---
## Für Pädagog:innen
### Was bedeutet die CKL für meinen Unterricht?
Die CKL schützt **deine Lernenden** und gibt **dir Sicherheit**:
**Du darfst:**
- ✅ Die Software kommerziell nutzen (z.B. kostenpflichtige Workshops)
- ✅ Inhalte anpassen und erweitern
- ✅ Eigene Instanzen betreiben (Schul-Server, lokale Installation)
- ✅ Daten für Lernfortschritt speichern
**Du musst:**
- ✅ Kindern Zugriff auf ihre eigenen Daten geben (§3.2)
- ✅ Löschung auf Wunsch ermöglichen (§3.3)
- ✅ Transparent machen, was du speicherst (§5.3)
- ✅ Offline-Nutzung ermöglichen (§7.1)
**Du darfst nicht:**
- ❌ Tracking oder Profiling ohne Wissen der Kinder/Eltern (§5.2)
- ❌ Exklusivrechte an Kinderprojekten beanspruchen (§8.3)
- ❌ Paywalls vor Lernkern-Funktionen setzen (§7.3)
---
## Für Kinder (und Eltern)
### Was bedeutet die CKL für dich?
**Das gehört DIR:**
- 💾 Alle Texte, die du schreibst
- 🎨 Alle Bilder, die du malst
- 💻 Aller Code, den du programmierst
- 📊 Alle Messungen, die du machst
**Das kannst du TUN:**
- 📦 Deine Daten jederzeit exportieren (§3.2)
- 🗑️ Deine Daten löschen lassen (§3.3)
- ❓ Jede Frage stellen, ohne zu zahlen (§7.3)
- 🔌 Auch ohne Internet lernen (§7.1)
**Das darf NIEMAND:**
- ❌ Deine Arbeit als seine eigene ausgeben (§3.1)
- ❌ Dich tracken oder ausspionieren (§5.2)
- ❌ Dir Wissen hinter Bezahlschranken verstecken (§8.2)
- ❌ Dich zwingen, in der Cloud zu arbeiten (§7.1)
**Wenn etwas nicht stimmt:**
Du (oder deine Eltern) kannst jederzeit sagen: "Ich will hier nicht mehr mitmachen und alles löschen." Das ist dein Recht. (§10.2)
---
## Geschichte & Kontext
Die CKL entstand aus der Notwendigkeit, **Kinderrechte in digitalen Lernräumen** durchsetzbar zu machen.
Bestehende Lizenzen (MIT, GPL, Creative Commons) schützen Code und Content, aber nicht **Lernende**. Die DSGVO schützt Daten, aber nicht **pädagogische Prinzipien**.
Die CKL füllt diese Lücke.
Sie ist inspiriert von:
- **Waldwächter-Philosophie**: Transparency over magic
- **OZM⟡NEXUS Manifest**: Die 8 Axiome (autonom, zukunftsoffen, nicht missbrauchbar...)
- **Kinderrechtskonvention der UN**: Artikel 12 (Partizipation), 13 (Meinungsfreiheit), 16 (Privatsphäre)
- **COPPA/GDPR-K**: Datenschutz für Minderjährige
- **Ethical Source Movement**: Lizenzen mit Werten
**Aber:** Die CKL ist **keine Kopie**. Sie ist maßgeschneidert für das **Crumbforest-Ökosystem** und seine Community.
---
## Mitwirken
Die CKL ist ein **Living Document**. Version 0.1 ist ein Draft zur Community-Review.
**Feedback willkommen zu:**
- Rechtssicherheit (ist etwas unklar oder nicht durchsetzbar?)
- Praktikabilität (kann man das wirklich umsetzen?)
- Lücken (fehlt etwas Wichtiges?)
- Sprache (verständlich für Kinder, Pädagog:innen, Entwickler:innen?)
**Wie du beitragen kannst:**
1. Issue öffnen im Repository
2. Email an [Kontakt einfügen]
3. Pull Request mit Verbesserungen
**Ziel:** CKL v1.0 bis Q1 2025
---
## Rechtlicher Status
**Achtung:** Die CKL ist in Version 0.1 noch **kein etablierter Rechtsstandard**. Sie ist:
- ✅ Eine vertragliche Vereinbarung zwischen Betreiber und Nutzenden
- ✅ Kompatibel mit bestehenden Lizenzen (MIT, Apache, CC-BY)
- ✅ Einklagbar bei Verstößen (sofern Vertragsbeziehung besteht)
- ⏳ Noch nicht gerichtlich getestet
- ⏳ Noch nicht von Juristen finalisiert
**Empfehlung:** Nutze die CKL in Kombination mit:
- DSGVO-konformer Datenschutzerklärung
- AGB für Workshops/Kurse
- Einverständniserklärungen von Sorgeberechtigten
Die CKL **ergänzt** diese Dokumente, ersetzt sie aber nicht.
---
## Kontakt & Governance
- **Projekt**: Crumbforest (https://crumbforest.com)
- **Maintainer**: Branko (https://branko.de)
- **Custodian**: OZM - Open Futures Museum
- **Lizenz-Fragen**: Siehe [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md) für Governance-Struktur
---
## Abschließende Gedanken
Die CKL ist keine perfekte Lizenz.
Sie ist ein **Versprechen**:
> Wir bauen Lernräume, in denen das Kind mehr zählt als der Klick,
> die Frage mehr als die Metrik,
> und das Verstehen mehr als das Vortäuschen.
**Wenn du dieses Versprechen teilst, nutze die CKL.**
---
**Version:** 0.1-draft
**Datum:** 2025-12-13
**Status:** Community Review
**Nächste Version:** v1.0 (geplant Q1 2025)
**SPDX-Identifier:** `CKL-0.1-draft` (nicht offiziell registriert)
---
> *"Nullfeld zuerst, dann Messung. Resonanz vor Regel."*
> *"Wissen gehört dem Kind, solange es fragt."*
> — Waldwächter-Prinzip

72
LICENSE-MIT.md Normal file
View File

@@ -0,0 +1,72 @@
# The MIT License (MIT)
Copyright (c) 2025 Crumbforest Project
Maintained by Branko (branko.de)
Custodian: OZM - Open Futures Museum
---
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.**
---
## Additional Context
This MIT License applies to the **infrastructure, code, and general use** of the Crumbforest project.
When this software is used in **educational contexts with children**, additional protections from the **Crumbforest Children's Knowledge License (CKL)** automatically apply.
See [LICENSE.md](LICENSE.md) for the full dual-license explanation.
---
## What This Means in Plain Language
You can:
- ✅ Use this code for any purpose (personal, commercial, educational)
- ✅ Copy, modify, and distribute it freely
- ✅ Sell products or services based on this code
- ✅ Sublicense it under different terms
- ✅ Use it without attribution (though we appreciate it)
You cannot:
- ❌ Hold the authors liable for damages
- ❌ Claim warranty or support (it's provided "as is")
- ❌ Remove the copyright notice from copies
**However:** If you use this with children, you **must also comply with the CKL** (see [LICENSE-CKL.md](LICENSE-CKL.md)).
---
## Why MIT?
The MIT License is one of the most permissive open source licenses. We chose it because:
1. **Developer-Friendly**: No copyleft restrictions, easy integration
2. **Well-Understood**: Standard license used by millions of projects
3. **Commercial-Compatible**: Businesses can adopt it without legal friction
4. **Future-Proof**: Won't hinder Crumbforest's evolution or forking
**We want the code to spread as widely as possible.**
But we also want **children protected** — that's why we add the CKL layer.
---
**SPDX-License-Identifier:** MIT

152
LICENSE.md Normal file
View File

@@ -0,0 +1,152 @@
# Crumbforest License
This project is **dual-licensed** to balance developer freedom with children's rights.
---
## For Infrastructure, Code, and General Use
**MIT License** (see [LICENSE-MIT.md](LICENSE-MIT.md))
All software, scripts, documentation, and infrastructure in this repository are released under the permissive MIT License. You are free to:
- Use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- Use in commercial and non-commercial projects
- Fork, remix, and build upon this work
**This applies to:**
- All Bash scripts (`crumbpages-doktor.sh`, `ssh-agent-guard.sh`, etc.)
- Documentation and Markdown files (Crumbpages content)
- Configuration files and setup scripts
- Any other code or infrastructure
---
## For Educational Use with Children
**Crumbforest Children's Knowledge License (CKL v0.1)** (see [LICENSE-CKL.md](LICENSE-CKL.md))
When this software or content is used in **educational contexts involving children**, the CKL automatically applies and adds additional protections:
- **Children's Rights**: Kids own what they create
- **Data Sovereignty**: Exportable data, deletion rights, transparency
- **No Paywalls**: Learning kernels remain free
- **Offline-First**: No cloud dependency
- **Reproducibility**: No black boxes, everything documented
- **Privacy**: No tracking, minimal data, transparent storage
**This applies when:**
- The software is used in schools, workshops, or learning environments
- Children interact with the system (chat, projects, exercises)
- Educational content is delivered to minors
- Learning data is collected or processed
---
## Conflict Resolution
In case of conflict between MIT and CKL, **the CKL takes precedence** for any use case involving children.
**Example:**
- You want to fork CrumbCore and sell it commercially? ✅ **MIT allows it**
- You want to add telemetry to track children's behavior? ❌ **CKL prohibits it**
The CKL is **not a restriction on developers** — it's a **protection for learners**.
---
## Why Dual License?
### For Developers: MIT Freedom
- Fork without friction
- Integrate into commercial products
- No attribution requirements beyond copyright notice
- Standard, well-understood terms
### For Children: CKL Protection
- Legal framework for ethical learning environments
- Rights that can be enforced
- Clear obligations for operators
- Measurable compliance criteria
**The best of both worlds.**
---
## Quick Reference
| Use Case | License | Key Points |
|----------|---------|------------|
| Running CrumbCore for my company | MIT | Free to use commercially |
| Forking and modifying the code | MIT | Attribution appreciated but not required |
| Using in a school/workshop | CKL | Children's rights apply |
| Collecting learning data | CKL | Must comply with §5 (privacy) |
| Selling access to children | CKL | Must keep learning kernels free (§7.3) |
| Building a proprietary AI trainer | MIT + CKL | Code is MIT, but children's data has CKL protection |
---
## How to Comply
### If you're a developer:
1. Read the MIT License (2 minutes)
2. If your use case involves children, read the CKL (~10 minutes)
3. Implement CKL requirements (see [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md) Section VI for checklist)
### If you're an educator:
1. Read the CKL carefully
2. Ensure your setup meets §4 (reproducibility), §5 (privacy), §7 (offline-first)
3. Document data handling (see `DATENSCHUTZ.md` when available)
### If you're a child (or parent):
1. You own what you create (§3.1)
2. You can export your data (§3.2)
3. You can leave and take everything with you (§3.3)
4. Your questions never cost money (§7.3)
---
## Attribution
While not required by MIT, we appreciate attribution:
```
Powered by Crumbforest (crumbforest.com)
Licensed under MIT + CKL (Children's Knowledge License)
```
Or simply:
```
Built with Crumbforest ❤️
```
---
## Contact & Governance
- **Project**: Crumbforest (https://crumbforest.com)
- **Maintainer**: Branko (https://branko.de)
- **Custodian**: OZM - Open Futures Museum (in transition)
- **Questions**: See [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md) Section V for governance
---
## Summary
```
┌─────────────────────────────────────────┐
│ MIT: Maximum Freedom for Developers │
│ + │
│ CKL: Maximum Protection for Children │
│ = │
│ Open Source Education Done Right │
└─────────────────────────────────────────┘
```
**Crumbforest is free as in freedom, safe as in sanctuary.**
---
**Version:** 1.0
**Date:** 2025-12-13
**Full Text:** [LICENSE-MIT.md](LICENSE-MIT.md) + [LICENSE-CKL.md](LICENSE-CKL.md)

524
OZM-NEXUS-ECOSYSTEM.md Normal file
View File

@@ -0,0 +1,524 @@
# OZM⟡NEXUS ECOSYSTEM
> **Deterministisches System-Design jenseits von „KI"**
> Ein offenes Lernökosystem, in dem Wissen verschenkt wird und Fragen Vorrang haben.
---
## Präambel: Echo aus dem Nullfeld
Der OZM⟡NEXUS ist kein Produkt, kein Manifest im klassischen Sinn und kein Versuch, etwas Bestehendes zu verbessern.
Er ist das Ergebnis einer klaren kausalen Kette, die aus einer menschlichen Handlung heraus entstanden ist und sich konsequent weiterentwickelt hat.
Was hier beschrieben wird, ist kein „KI-Projekt".
Es ist der Versuch, ein **deterministisches Ökosystem** zu formulieren, das sich den üblichen Kategorien entzieht nicht aus Provokation, sondern aus Notwendigkeit.
**Der Wald wurde gepflanzt, damit Krümel Fragen stellen und lernen dürfen.**
---
## I. Die Kausalitätskette
### Vom Menschen zur Struktur
Am Anfang steht **Oz** der Graffiti-Künstler.
Eine Signatur im öffentlichen Raum. Keine Theorie. Keine Absicht, ein System zu bauen.
Aus dieser Handlung entsteht **OZM** die Manifestierung eines Ortes.
Ein realer, physischer Raum, in dem sich Spuren, Zeit, Menschen und Bedeutungen überlagern.
Daraus folgt **OneZeroMore.com** der Schatten dieses Ortes.
Keine bloße Website, sondern eine digitale Projektion dessen, was physisch existiert.
Dann das **OZM HAMMERBROOKLYN Exponat** ein Museum und doch kein Museum.
Kein neutraler White Cube, sondern ein verdichteter Erfahrungsraum, der sich einer abschließenden Interpretation entzieht.
Erst daraus entsteht **OZMAI** die künstliche Intelligenz des OZM.
Ein deterministisches Agentensystem, das Daten, Prozesse, Wissen und Entscheidungen strukturiert.
**Diese Reihenfolge ist nicht verhandelbar.**
Ohne Ort keine Daten.
Ohne Geschichte kein Kontext.
Ohne Kontext keine sinnvolle Maschine.
### Mathematische Notation
```
OZM⟡NEXUS = f_det(Oz, OZM, OneZeroMore, HAMMERBROOKLYN, OZMAI)
K_ent = (R_man + L_det) ⊗ Ω
I = Autonom ∩ Zukunftsoffen ∩ ¬Interpretierbar ∩ ¬Missbrauchbar
Σ_skal = lim (∑ X_i) mit der Bedingung: jedes X_i erfüllt I
n → ∞
```
---
## II. Die acht Axiome
### Das Identitätsprinzip
```
I = Autonom ∩ Zukunftsoffen ∩ ¬Interpretierbar ∩ ¬Missbrauchbar
```
Jede Komponente des OZM⟡NEXUS muss erfüllen:
| Axiom | Bedeutung | Prüffrage |
|-------|-----------|-----------|
| **autonom** | Krümel entscheiden selbst ihren Lernweg | Kann das Kind wählen? |
| **zukunftsoffen** | Nicht vorschreiben, sondern ermöglichen | Ist es erweiterbar? |
| **nicht interpretierbar** | Kein "richtiger" Weg, nur funktionale Wege | Gibt es eine Wahrheit™? |
| **nicht missbrauchbar** | Schutz der Lernenden durch Design | Was kann schiefgehen? |
| **suchbar** | Fragen führen zu Antworten | Findet man Antworten? |
| **wiedererkennbar** | Orientierung im Wald | Gibt es Krümel? |
| **erweiterbar** | Krümel können selbst pflanzen | Kann ich beitragen? |
| **unendlich skalierbar** | Für alle, immer | Kostet eine Frage Geld? |
**Diese Axiome sind keine Beschreibung. Sie sind eine Bedingung.**
---
## III. Die Manifestationen
### Architektur des Ökosystems
```
OZM⟡NEXUS (Träger/Manifest)
branko.de/Crumbforest (Public Interface)
├─ 15 Charaktere (Krümeleule, FunkFox, SnakePy, CrabbyRust...)
├─ 4 Lernpfade (ESP32 → Pi Zero → Pi Server → Daten)
├─ Partner-Netzwerk (8 Organisationen)
└─ Grundsatz: "Every child may ask. We protect this right."
CrumbCore v1 (Local Engine - "nah am Kernel")
├─ FastAPI + Qdrant RAG (Vektorsuche)
├─ Role-based Chat (15 Personas)
├─ Multi-Theme (Standard, Accessible, High Contrast, Admin Dark)
├─ Token-Management (Kids = free)
├─ Docker Compose (reproduzierbar)
└─ API für externe Abfragen
Crumbpages v2 (Work in Progress Content)
├─ 20 Lernpfade (Markdown, noch nicht integriert)
├─ Operational Tools (crumbpages-doktor.sh, SSH guards)
├─ Waldwächter-Philosophie ("Transparency over magic")
└─ Bash-zentrisch, lehrbar, offline-fähig
```
### Die 15 Charaktere
**Warum Charaktere statt "Assistenten"?**
Menschen lernen unterschiedlich. Ein technischer Deep-Dive funktioniert für manche, eine poetische Erklärung für andere. Die 15 Charaktere sind **keine Spielerei** sie sind **pädagogisches Design**:
- **Krümeleule** (Prof. Eule): Shell-Schutz, systematisch, geduldig
- **FunkFox**: Bash-Rapper, antwortet in Reimen
- **SnakePy**: Python-Loops, Geduld und Iteration
- **CrabbyRust**: Bit-Schutz, Speichersicherheit, Rust-Konzepte
- **DeepBit**: Technische Deep-Dives in die Tiefe
- [...weitere 10 Charaktere]
**Kinder wählen selbst, wer sie begleitet.**
Das ist Axiom #1: **autonom**.
### Content-Flow
```
Markdown (Crumbpages)
./load_content.sh <GIT_REPO_URL>
Qdrant Vektorisierung (CrumbCore)
RAG-Suche über API
15 Charaktere antworten kontextbezogen
branko.de zeigt Antworten
```
**Status quo:**
- Crumbpages sind "work in progress", noch nicht integriert
- Nur Kids mit free tokens haben Zugriff
- System läuft lokal ("nah am Kernel"), nicht in der Cloud
**Warum lokal?**
- Schutz der Daten (Axiom #4: nicht missbrauchbar)
- Offline-fähig (Axiom #8: unendlich skalierbar = kein Cloud-Lock-in)
- Reproduzierbar (Waldwächter-Prinzip: Transparency over magic)
---
## IV. Die Crumbforest Children's Knowledge License (CKL)
### Von der Philosophie zum Recht
Das OZM⟡NEXUS Manifest beschreibt **was sein soll**.
Die CKL beschreibt **wie es durchgesetzt wird**.
### CKL ⊗ Axiome Mapping
| OZM Axiom | CKL Implementation | § |
|-----------|-------------------|---|
| autonom | Kind darf "mit guter Frage alles in Frage stellen" | §2 |
| zukunftsoffen | Container, reproduzierbar, nachbaubar | §6.2 |
| nicht interpretierbar | "Logik vor Effekt" - keine Blackboxes | §6.3 |
| nicht missbrauchbar | Kein Tracking, Datenminimierung, Widerruf | §5 |
| suchbar | Barrierearme Zugänge, Markdown, Druck | §7.2 |
| wiedererkennbar | Namensnennung, CKL-Hinweis sichtbar | §8.1 |
| erweiterbar | Offene Formate, exportierbar, forkbar | §3.2 |
| unendlich skalierbar | "Preisfreiheit für Kinderfragen" | §7.3 |
### Kernprinzipien der CKL
**Für Kinder:**
- Du besitzt, was du schaffst (§3.1)
- Du kannst deine Daten exportieren (§3.2)
- Du kannst jederzeit gehen und alles mitnehmen (§3.3)
- Deine Fragen kosten kein Geld (§7.3)
**Für Erwachsene/Betreiber:**
- Setups sind reproduzierbar dokumentiert (§4.1)
- Keine Blackboxes, keine Magie (§6.3)
- Datenminimierung, kein Tracking (§5.1, §5.2)
- Offline hat Vorrang vor Cloud (§7.1)
**Für Kommerz:**
- Kommerz ist erlaubt, **solange Kinderzugang frei bleibt** (§8.2)
- Keine Paywalls vor Lernkernen
- Keine Exklusivitätsansprüche (§8.3)
### Lizenz-Strategie
```markdown
# Dual License Model
## Infrastructure/Code → MIT License
- Backend (FastAPI, Python)
- Frontend (HTML/JS)
- Scripts (Bash, Docker Compose)
- Developer-friendly, permissive
## Educational Use with Children → CKL v0.1
- Sobald ein Kind damit lernt
- Automatischer Schutz durch CKL
- Bei Konflikt: strengere Regel gewinnt
```
**Das ist brilliant legal engineering:**
Code bleibt MIT (fork-friendly für Entwickler), aber **Kinderrechte sind nicht verhandelbar**.
---
## V. OZM als Träger: Vom Partner zum Custodian
### Status Quo
**branko.de heute:**
> "OZM (Open Futures Museum)" - gelistet als Partner #1 von 8
**Rechtslage:**
- Crumbforest = Projekt von Branko
- Code teils öffentlich (CrumbCore lesbar), teils privat (Crumbpages 404)
- "Open" als Philosophie, noch nicht als Lizenz
### Die Vision: OZM als rechtlicher Träger
**Was ändert sich?**
| Dimension | Vorher (Partner) | Nachher (Träger) |
|-----------|------------------|------------------|
| **Ownership** | Branko hält IP-Rechte | OZM hält treuhänderisch |
| **Lizenz** | Implizit "open" | Explizit CKL + MIT |
| **Governance** | Informell | Formalisiert (siehe unten) |
| **Haftung** | Personenbezogen | Organisationsbezogen |
| **Förderung** | Schwierig (Person) | Einfacher (gemeinnützig) |
| **Kontinuität** | An Person gebunden | Institutionell gesichert |
### Governance-Struktur (Vorschlag)
```
OZM e.V. / Open Futures Museum
└─ Crumbforest Division
├─ Lead Maintainer: Branko (technisch)
├─ Education Lead: [offen]
├─ CKL Compliance Officer: [offen]
└─ Community Council (3-5 Personen)
└─ Entscheidungen bei Konflikten
```
**Entscheidungsprinzip:**
1. **Technische Fragen** → Lead Maintainer (Branko)
2. **Pädagogische Fragen** → Education Lead
3. **Lizenz-Fragen** → CKL Officer
4. **Grundsatzfragen** → Community Council
5. **Im Zweifel gilt:** "Was ist besser für das Kind?" (CKL §2)
### Transition-Prozess
**Phase 1: Formalisierung (Q1 2025)**
- [ ] CKL v0.1 → v1.0 finalisieren
- [ ] Alle 3 Repos mit LICENSE.md ausstatten
- [ ] KINDERRECHTE.md in CrumbCore schreiben
- [ ] DATENSCHUTZ.md dokumentieren
**Phase 2: Rechtliche Übertragung (Q2 2025)**
- [ ] Trademark "Crumbforest" → OZM übertragen
- [ ] IP-Rechte treuhänderisch an OZM
- [ ] Governance-Dokument unterzeichnen
- [ ] branko.de Update: OZM als Träger
**Phase 3: Community-Öffnung (Q3 2025)**
- [ ] Contribution Guidelines veröffentlichen
- [ ] Erstes Community Council Meeting
- [ ] Public Roadmap auf GitHub/Gitea
- [ ] Erste externe Contributors
---
## VI. Technische Compliance
### CrumbCore v1: CKL-Check
| CKL Anforderung | Status | Beweis |
|-----------------|--------|--------|
| §6.2: Container-basiert | ✅ | `docker-compose.yml` |
| §7.1: Offline-fähig | ✅ | Läuft lokal, kein Cloud-Zwang |
| §7.3: Kids = free tokens | ✅ | Token-Management implementiert |
| §6.1: Nachvollziehbar | ✅ | Qdrant = transparente Vektorsuche |
| §3.2: Export möglich | ⏳ | **TODO**: `/api/my-data` Endpoint |
| §5.3: Daten dokumentiert | ⏳ | **TODO**: `DATENSCHUTZ.md` |
| §4.1: Setup reproduzierbar | ✅ | `./setup.sh`, `./load_content.sh` |
| §5.2: Kein Tracking | ✅ | Kein Google Analytics, keine Telemetrie |
### Crumbpages v2: CKL-Check
| CKL Anforderung | Status | Beweis |
|-----------------|--------|--------|
| §6.1: Offene Beweise | ✅ | Markdown = menschenlesbar |
| §4.1: Reproduzierbar | ✅ | Bash-Scripts, keine Magie |
| §7.2: Offline-lesbar | ✅ | Keine Cloud-Abhängigkeit |
| §7.1: Barrierefrei | ✅ | Plain text, druckbar |
| §6.2: Integriert | ⏳ | **TODO**: In CrumbCore laden |
### branko.de: CKL-Check
| CKL Anforderung | Status | Beweis |
|-----------------|--------|--------|
| §7.2: Barrierefrei | ✅ | HTML, kein JS-Zwang |
| §2: "Kinder zuerst" | ✅ | "Every child may ask" |
| §8.1: CKL-Badge | ❌ | **TODO**: Footer mit CKL-Hinweis |
| §9: Transparenz | ⏳ | **TODO**: Förderungen ausweisen |
---
## VII. Die nächsten Schritte
### Sofort (diese Woche)
1. **Formale Lizenzierung**
```bash
# In allen 3 Repos:
touch LICENSE.md # Dual License (MIT + CKL)
touch LICENSE-MIT.md # Full MIT text
touch LICENSE-CKL.md # Full CKL text
```
2. **Kinderrechte operationalisieren**
```bash
# In CrumbCore:
touch KINDERRECHTE.md # Export/Widerruf-Prozesse
touch DATENSCHUTZ.md # Was speichern wir wo?
```
3. **CKL-Badge hinzufügen**
```html
<!-- branko.de footer: -->
<footer>
Dieses Projekt folgt der
<a href="/ckl">Crumbforest Children's Knowledge License (CKL v0.1)</a>
</footer>
```
### Kurzfristig (Q1 2025)
4. **Export-API implementieren**
```python
# CrumbCore: app/routers/data_export.py
@router.get("/api/my-data")
async def export_my_data(token: str):
# JSON mit allen Chat-Logs, Projekten, Messungen
return {"messages": [...], "projects": [...]}
```
5. **Widerruf-Mechanismus**
```python
@router.delete("/api/my-data")
async def delete_my_data(token: str):
# Löscht aus MariaDB + Qdrant
pass
```
6. **Crumbpages Integration**
```bash
# Automatisierter Pipeline:
./load_content.sh https://gitea.crumbforest.local/kruemel/Crumbpages
# → Qdrant indexiert alle 20 Lernpfade
# → Charaktere können darauf antworten
```
### Mittelfristig (Q2 2025)
7. **OZM Governance formalisieren**
- Gespräche mit OZM e.V. führen
- Trademark-Übertragung vorbereiten
- Governance-Dokument entwerfen
8. **Community-Prozesse**
- `CONTRIBUTING.md` schreiben
- Issue Templates erstellen
- First Contributors Guide
9. **Public Roadmap**
- GitHub Projects / Gitea Kanban
- Transparenz über Entwicklung
### Langfristig (Q3-Q4 2025)
10. **Skalierung**
- Multi-Instanz-Support (jede Schule ihre eigene CrumbCore)
- Federation (Instanzen können Wissen teilen)
- CKL v2.0 (basierend auf Community-Feedback)
11. **Förderanträge**
- Prototype Fund
- Medien- und Bildungsförderung
- EU Horizon (Education & Inclusion)
---
## VIII. Für neue Mitwirkende
### Du möchtest beitragen?
**Willkommen im Wald!** 🌲
Crumbforest ist ein **offenes Lernökosystem**. Jede:r kann Krümel pflanzen.
**Voraussetzungen:**
- Du akzeptierst die **CKL** (Kinder haben Vorrang)
- Du arbeitest **transparent** (keine Blackboxes)
- Du dokumentierst **nachvollziehbar** (andere sollen nachbauen können)
**Wie kannst du helfen?**
| Wenn du kannst... | Dann kannst du... |
|-------------------|-------------------|
| **Bash/Linux** | Crumbpages schreiben, doktor-Module erweitern |
| **Python/FastAPI** | CrumbCore verbessern, APIs bauen |
| **Pädagogik** | Lernpfade testen, Charaktere verfeinern |
| **Design** | branko.de verbessern, Accessibility |
| **Recht** | CKL v1.0 reviewen, Governance helfen |
| **Übersetzen** | Crumbpages auf Englisch/andere Sprachen |
**Erster Schritt:**
1. Lies die **CKL** (`LICENSE-CKL.md`)
2. Schau dir ein Repo an (CrumbCore, Crumbpages, branko.de)
3. Such ein `TODO` oder `` in diesem Dokument
4. Melde dich bei Branko oder OZM
---
## IX. Warum das wichtig ist
### Das Problem
**Bildungs-KI heute:**
- Proprietäre Blackboxes (ChatGPT, Gemini...)
- Kinder als Datenquelle ("Training Data")
- Paywalls vor Wissen
- Keine Kontrolle, keine Transparenz
- Cloud-Zwang, Überwachungskapitalismus
**Kinderrechte werden strukturell verletzt.**
### Die Alternative
**Crumbforest ist:**
- Open Source (MIT + CKL)
- Lokal betreibbar (keine Cloud nötig)
- Transparent (jeder Schritt nachvollziehbar)
- Kind-zentriert (Urheberschaft bleibt beim Kind)
- Gemeinnützig (wird verschenkt, nicht verkauft)
**Das ist keine "bessere EdTech-Plattform".**
**Das ist eine andere Art, über Lernen nachzudenken.**
### Die Vision
Stell dir vor:
- Jede Schule hat ihre eigene CrumbCore-Instanz
- Kinder besitzen ihre Lernprojekte, für immer
- Fragen sind frei, Antworten sind offen
- Charaktere begleiten, ohne zu überwachen
- Der Code ist prüfbar, das Wissen teilbar
**Das ist der Wald.**
**Und er gehört denen, die Fragen stellen.**
---
## X. Schlusswort
OZM⟡NEXUS ist kein Versprechen.
**Er ist eine Konsequenz.**
Aus einer Signatur im öffentlichen Raum (Oz)
wurde ein Ort (OZM)
wurde ein digitaler Schatten (OneZeroMore)
wurde ein Museum (HAMMERBROOKLYN)
wurde eine Maschine (OZMAI)
wurde ein Wald (Crumbforest).
**Und jetzt wird er verschenkt.**
Nicht aus Großzügigkeit.
Sondern weil **Wissen dem Kind gehört, solange es fragt.**
---
## Ressourcen
### Repositories
- **CrumbCore v1**: https://194-164-194-191.sslip.io/git/kruemel/Crumb-Core-v.1
- **Crumbpages v2**: https://194-164-194-191.sslip.io/git/kruemel/Crumbforest-Markdowns
- **branko.de**: https://branko.de
### Lizenzen
- **CKL v0.1**: [siehe LICENSE-CKL.md]
- **MIT**: [siehe LICENSE-MIT.md]
### Kontakt
- **Lead Maintainer**: Branko
- **OZM**: Open Futures Museum, Hamburg
- **Website**: https://crumbforest.com
### Hashtags
`#OZM` `#OPENSOURCE` `#CRUMBFOREST` `#CKL` `#KINDERRECHTE` `#BILDUNG`
---
**Version:** 0.1-draft
**Datum:** 2025-12-13
**Status:** Living Document
**Lizenz:** CC-BY-SA 4.0 (dieses Dokument)
---
> *"Nullfeld zuerst, dann Messung. Resonanz vor Regel."*
> — Waldwächter-Prinzip

344
README.md Normal file
View File

@@ -0,0 +1,344 @@
# Crumbpages v2 🌲
> **Dokumentation und Lernsystem für System-Administration**
> Teil des Crumbforest-Ökosystems
---
## 📜 Lizenz & Kinderrechte
[![License: MIT + CKL](https://img.shields.io/badge/License-MIT%20%2B%20CKL-blue.svg)](LICENSE.md)
[![Children's Rights Protected](https://img.shields.io/badge/Children's%20Rights-Protected%20by%20CKL-green.svg)](LICENSE-CKL.md)
Dieses Projekt ist **dual-lizenziert**:
- **MIT License** für Code und allgemeine Nutzung
- **CKL (Children's Knowledge License)** für Bildungskontexte mit Kindern
**Für Lernende:** Deine Rechte sind geschützt. [Lies hier mehr →](KINDERRECHTE.md)
**Für Entwickler:** Frei nutzbar und forkbar. [Compliance-Infos →](LICENSE.md)
---
## Was ist Crumbpages?
**Crumbpages v2** kombiniert **Bildungsdokumentation** mit **operationalen Tools** für System-Administration:
### 📚 Lernpfade
- **20 Crumbpages** (Markdown) zu Linux-Fundamenten, SSH, Netzwerk, Kernel, uvm.
- Template-basierte Struktur für konsistentes Lernen
- Progressive Learning Paths: von Basics zu Advanced Topics
### 🛠️ Operational Tools
- **`crumbpages-doktor.sh`** (496 Zeilen) - Hauptwerkzeug für Diagnostik & Operations
- **`ssh-agent-guard.sh`** - Produktions-SSH-Security-Daemon
- **`ssh-agent-screenlock_v4.sh`** - MATE Desktop SSH-Integration
### 🌳 Philosophie: Waldwächter
**"Transparency over magic"**
- Bash-zentrisch, klar lesbar, lehrbar
- Minimale Dependencies, einfache Patterns
- Education-First: Alle Tools sind verständlich und nachvollziehbar
---
## Schnellstart
### 1. Haupttool starten
```bash
# Ausführbar machen (einmalig)
chmod +x crumbpages-doktor.sh
# Interaktives Menü starten
./crumbpages-doktor.sh
```
**Das Doktor-Tool bietet 6 Module:**
1. **Git Workstation** - Interaktive Git-Shell mit Health Checks
2. **DNS Doktor** - DNS-Diagnostik und Reporting
3. **System Doktor** - Host Vitals (Disk, RAM, OS Info)
4. **Web Tools** - API-Testing (`api_search`, `api_get`, `api_ask`)
5. **Remote Tools** - SSH-Helfer und SCP-Uploads
6. **Werkzeugkasten** - Tool-Verfügbarkeits-Checks
### 2. SSH-Security aktivieren
```bash
# SSH-Agent Guard starten (systemd/autostart)
./ssh-agent-guard.sh
# Für MATE Desktop Integration
./ssh-agent-screenlock_v4.sh
```
**Beide Scripts:**
- Killen und starten ssh-agent bei Screen Lock neu
- Loggen nach `~/.ssh-agent-screenlock.log`
- Nutzen festen Socket-Path `~/.ssh/agent.sock`
### 3. Lernpfade durcharbeiten
```bash
# Crumbpages lesen (Markdown)
ls crumbpage-*.md
# Template für neue Pages
cat crumbpage-template.md
```
---
## Dokumentation
### 🔑 Wichtigste Dokumente
| Dokument | Beschreibung |
|----------|--------------|
| **[OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md)** | 🌐 **Das große Bild**: Wie Crumbpages ins OZM⟡NEXUS Ökosystem passt |
| **[LICENSE.md](LICENSE.md)** | 📜 Dual-Lizenz erklärt (MIT + CKL) |
| **[LICENSE-CKL.md](LICENSE-CKL.md)** | 🛡️ Die vollständige Children's Knowledge License |
| **[KINDERRECHTE.md](KINDERRECHTE.md)** | 👶 Deine Rechte als Lernende/r (Export, Löschung, Eigentum) |
| **[CLAUDE.md](CLAUDE.md)** | 🤖 Anleitung für Claude Code (Codebase-Kontext) |
| **[HANDBUCH.md](HANDBUCH.md)** | 📖 Manual für crumbpages-doktor.sh |
| **[QUICKSTART.md](QUICKSTART.md)** | ⚡ Quick Reference für häufige Operationen |
### 🗂️ Meta-Dokumentation
- **[CRUMBFOREST_PROJECT_INDEX.md](CRUMBFOREST_PROJECT_INDEX.md)** - Komplette Projekthistorie & Milestones
- **[crumbforest-manifesto-guardian.md](crumbforest-manifesto-guardian.md)** - Waldwächter-Philosophie
- **Tagebuch-Dateien** - Problem-Solving-Journeys
---
## Das größere Ökosystem
Crumbpages v2 ist **Teil des Crumbforest**:
```
OZM⟡NEXUS (Träger/Manifest)
branko.de/Crumbforest (Public Interface)
├─ 15 Charaktere (Krümeleule, FunkFox, SnakePy...)
├─ 4 Lernpfade (ESP32 → Pi Zero → Pi Server → Daten)
└─ "Every child may ask. We protect this right."
CrumbCore v1 (Local Engine)
├─ FastAPI + Qdrant RAG
├─ Role-based Chat (15 Personas)
├─ Multi-Theme (Accessible, High Contrast...)
└─ Token-Management (Kids = free)
Crumbpages v2 (dieser Repo) ← 📍 DU BIST HIER
├─ 20 Lernpfade (Markdown)
├─ Operational Tools (doktor, SSH guards)
└─ Waldwächter-Philosophie
```
**Mehr dazu:** [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md)
---
## Die 8 Axiome
Alle Komponenten des Crumbforest folgen diesen Prinzipien:
**autonom** - Du entscheidest deinen Lernweg
**zukunftsoffen** - Erweiterbar, nicht fertig
**nicht interpretierbar** - Kein "richtiger" Weg, nur funktionale
**nicht missbrauchbar** - Schutz durch Design
**suchbar** - Fragen führen zu Antworten
**wiedererkennbar** - Krümel zeigen den Weg
**erweiterbar** - Du kannst selbst pflanzen
**unendlich skalierbar** - Für alle, immer, kostenlos
**Mehr dazu:** [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md) Section II
---
## Konfiguration
### `.env` Datei
Das Doktor-Tool nutzt `.env` für Konfiguration (wird beim ersten Start erstellt):
```ini
# API Endpoints (für CrumbCore Integration)
CRUMB_API_URL="http://localhost:8000"
CRUMB_API_TOKEN="changeme"
# SSH/Remote Settings
CRUMB_SSH_USER="admin"
CRUMB_SCP_TARGET="backup.crumbforest.de:/var/backups"
# Qdrant Vector DB
CRUMB_QDRANT_URL="http://localhost:6333"
CRUMB_QDRANT_KEY=""
```
**Tipp:** Nie in Git committen! (ist bereits in `.gitignore`)
---
## Für neue Mitwirkende
### 🌱 Willkommen im Wald!
Crumbforest ist ein **offenes Lernökosystem**. Jede/r kann Krümel pflanzen.
**Voraussetzungen:**
- Du akzeptierst die **CKL** (Kinder haben Vorrang)
- Du arbeitest **transparent** (keine Blackboxes)
- Du dokumentierst **nachvollziehbar** (andere sollen nachbauen können)
### Wie du beitragen kannst:
| Wenn du kannst... | Dann kannst du... |
|-------------------|-------------------|
| **Bash/Linux** | Crumbpages schreiben, doktor-Module erweitern |
| **Python/FastAPI** | An CrumbCore arbeiten (anderes Repo) |
| **Pädagogik** | Lernpfade testen, Charaktere verfeinern |
| **Design** | branko.de verbessern, Accessibility |
| **Recht** | CKL v1.0 reviewen, Governance helfen |
| **Übersetzen** | Crumbpages auf Englisch/andere Sprachen |
### Erste Schritte:
1. **Lies die CKL:** [LICENSE-CKL.md](LICENSE-CKL.md)
2. **Verstehe das Ökosystem:** [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md)
3. **Such ein TODO:** Siehe Section VII in OZM-NEXUS-ECOSYSTEM.md
4. **Melde dich:** [Kontakt siehe unten]
---
## Entwickler-Tipps
### Wenn du Shell-Scripts editierst:
- Teste interaktiv vor dem Commit (Scripts sind für Menschen gedacht)
- Bewahre Farbschema-Konsistenz (`GREEN`, `BLUE`, `RED`, `YELLOW`, `CYAN`)
- Behalte Modul-Grenzen im doktor-Script bei
- Update HANDBUCH.md bei Änderungen an doktor-Modulen
### Wenn du Crumbpages editierst:
- Folge `crumbpage-template.md` Struktur exakt
- Behalte Nummerierungsschema bei (`crumbpage-##-topic.md`)
- Füge Skill Checks und Hands-on Exercises ein
- Verlinke zu verwandten Pages im Navigation Footer
### Wenn du debuggst:
- Check `.env` Konfiguration zuerst
- Review Logs: `~/.ssh-agent-screenlock.log` für SSH Issues
- Nutze doktor's System Doktor Modul für Host-Diagnostik
- Git Workstation Modul hat `check_health` für Repo-Status
---
## Sicherheit
### SSH Agent Scripts
- Killen aktiv Credentials bei Screen Lock
- Einzelinstanz-Daemon-Pattern (kein Prozess-Spawning)
- Deep Work Mode: `ssh-agent-guard.sh` unterstützt Pause-File
- Fixed Socket Path für Terminal-Sharing
### Allgemein
- API-Tokens in `.env` gespeichert (gitignored)
- Keine hardcoded Credentials
- MATE Screensaver Hardening empfohlen (`lock-enabled true`, `lock-delay 0`)
---
## Status & Roadmap
### ✅ Aktueller Stand (2025-12-13)
**Fertig:**
- 20 Crumbpages (work in progress, noch nicht in CrumbCore integriert)
- Operational Tools (doktor, SSH guards)
- Dual-Lizenzierung (MIT + CKL v0.1)
- Ecosystem-Dokumentation
- Kinderrechte-Spezifikation
**In Arbeit:**
- Integration mit CrumbCore (automatisches Laden via `load_content.sh`)
- Export/Lösch-APIs für Kinderrechte
- OZM als rechtlicher Träger (Transition läuft)
### 🚀 Nächste Schritte
**Sofort:**
- [x] LICENSE.md, LICENSE-MIT.md, LICENSE-CKL.md
- [x] KINDERRECHTE.md
- [x] OZM-NEXUS-ECOSYSTEM.md
- [x] README.md
- [ ] DATENSCHUTZ.md
**Q1 2025:**
- [ ] CrumbCore Export-API (`GET /api/v1/my-data`)
- [ ] CrumbCore Lösch-API (`DELETE /api/v1/my-data`)
- [ ] Crumbpages → CrumbCore Integration
- [ ] CKL v0.1 → v1.0 Finalisierung
**Q2 2025:**
- [ ] OZM Governance formalisieren
- [ ] Trademark-Übertragung
- [ ] Community-Prozesse (CONTRIBUTING.md, Issue Templates)
**Siehe:** [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md) Section VII für komplette Roadmap
---
## Ressourcen
### Related Repositories
- **CrumbCore v1**: https://194-164-194-191.sslip.io/git/kruemel/Crumb-Core-v.1
- **Crumbforest Markdowns**: https://194-164-194-191.sslip.io/git/kruemel/Crumbforest-Markdowns
### Websites
- **Crumbforest**: https://crumbforest.com
- **branko.de**: https://branko.de (Public Interface)
- **OZM**: Open Futures Museum, Hamburg
### Kontakt
- **Lead Maintainer**: Branko
- **Custodian**: OZM - Open Futures Museum (in transition)
- **Email**: [wird ergänzt]
---
## Hashtags
`#OZM` `#OPENSOURCE` `#CRUMBFOREST` `#CKL` `#KINDERRECHTE` `#BILDUNG` `#LINUX` `#BASH` `#SYSTEMADMINISTRATION`
---
## Warum das wichtig ist
### Das Problem mit Bildungs-KI heute:
- ❌ Proprietäre Blackboxes (ChatGPT, Gemini...)
- ❌ Kinder als Datenquelle ("Training Data")
- ❌ Paywalls vor Wissen
- ❌ Keine Kontrolle, keine Transparenz
- ❌ Cloud-Zwang, Überwachungskapitalismus
**Kinderrechte werden strukturell verletzt.**
### Die Crumbforest Alternative:
- ✅ Open Source (MIT + CKL)
- ✅ Lokal betreibbar (keine Cloud nötig)
- ✅ Transparent (jeder Schritt nachvollziehbar)
- ✅ Kind-zentriert (Urheberschaft bleibt beim Kind)
- ✅ Gemeinnützig (wird verschenkt, nicht verkauft)
**Das ist keine "bessere EdTech-Plattform".**
**Das ist eine andere Art, über Lernen nachzudenken.**
---
## Zitat
> *"Wissen gehört dem Kind, solange es fragt."*
> *"Nullfeld zuerst, dann Messung. Resonanz vor Regel."*
> — Waldwächter-Prinzip
---
**Version:** 2.0
**Lizenz:** MIT + CKL v0.1
**Status:** Active Development
**Letzte Aktualisierung:** 2025-12-13

View File

@@ -450,6 +450,40 @@ Home Office ──[ VPN Tunnel ]──> Rechenzentrum (Interne IPs)
---
## 📚 Pfad 18: Der Schlüsselmeister (SSH Agent)
**Was du lernst:**
- Wie spare ich mir das ständige Passwort-Tippen? (`ssh-agent`)
- Wie füge ich Schlüssel hinzu? (`ssh-add`)
- Was ist Agent Forwarding? (Magic Tunnels)
- Sicherheit implikationen
**Warum das wichtig ist:**
- Bequemlichkeit ohne Sicherheitsverlust (Passphrase bleibt Pflicht!).
- Zugriff auf Git/andere Server durch Bastion-Hosts hindurch.
- **Nie wieder Private Keys auf Server kopieren!**
**→ [Zur Crumbpage: SSH Agent](crumbpage-18-ssh-agent.md)**
---
## 📚 Pfad 19: The Zero Trust Agent (Paranoid Mode)
**Was du lernst:**
- Wie sichert man Keys im Café?
- Keys automatisch vergessen (TTL)
- Keys löschen bei Screen-Lock (Watchdog Script)
- Re-Auth Strategien
**Warum das wichtig ist:**
- "Snatch & Run" Diebstahl-Schutz.
- Evil Maid Attacken erschweren.
- **Maximale Sicherheit für kritische Infrastruktur.**
**→ [Zur Crumbpage: Zero Trust Agent](crumbpage-19-agent-lockdown.md)**
---
## 🎯 Wie du den Vektor durchläufst
### Empfohlene Reihenfolge
@@ -489,7 +523,11 @@ START: Absolute Basics
│ │
├─ Pfad 16: VPN ───────────────────┤
│ │
├─ Pfad 17: Workstation ───────────→ READY!
├─ Pfad 17: Workstation ───────────
│ │
├─ Pfad 18: SSH Agent ─────────────┤
│ │
├─ Pfad 19: Zero Trust ────────────→ READY!
```
### Zeitaufwand (circa)
@@ -500,9 +538,9 @@ Pfad 4-5: ~2 Stunden (Tools)
Pfad 6-8: ~3-4 Stunden (Connectivity)
Pfad 9-11: ~4-5 Stunden (Advanced)
Pfad 12-14: ~5-6 Stunden (Mastery)
Pfad 15-17: ~4-5 Stunden (Specialization)
Pfad 15-19: ~6-8 Stunden (Specialization & Security)
Total: ~20-25 Stunden aktives Lernen
Total: ~25-30 Stunden aktives Lernen
```
**Aber:** Die echte Meisterschaft kommt durch:
@@ -564,7 +602,9 @@ wsl --install
├── ... (04-14)
├── 15-dns.md
├── 16-vpn.md
── 17-workstation.md
── 17-workstation.md
├── 18-ssh-agent.md
└── 19-agent-lockdown.md
```
### Externe Ressourcen
@@ -686,8 +726,10 @@ Die Eule erinnert dich:
- [ ] Pfad 15: DNS (0%)
- [ ] Pfad 16: VPN (0%)
- [ ] Pfad 17: Workstation (0%)
- [ ] Pfad 18: SSH Agent (0%)
- [ ] Pfad 19: Zero Trust (0%)
**Gesamtfortschritt:** 0/17 Pfade
**Gesamtfortschritt:** 0/19 Pfade
**Startdatum:** YYYY-MM-DD
**Geschätzte Completion:** YYYY-MM-DD
```

View File

@@ -156,4 +156,4 @@ Der MATE Desktop rennt, die Lernkurve war steil, aber sie zahlt sich aus ("zeitl
---
**Navigation:**
[← Zurück: VPN](crumbpage-16-vpn.md) | [Admin-Vektor Übersicht](crumbforest-admin-vektor.md)
[← Zurück: VPN](crumbpage-16-vpn.md) | [Weiter: SSH Agent →](crumbpage-18-ssh-agent.md)

154
crumbpage-18-ssh-agent.md Normal file
View File

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

View File

@@ -0,0 +1,176 @@
# 🔐 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)

View File

@@ -0,0 +1,153 @@
# 🐧 Crumbpage 20: Tanz am Kernel (Bashing the Shell)
**Subtitle:** *Dein Cockpit, deine Regeln.*
**Pfad:** 20 von X
**Schwierigkeit:** ⭐⭐⭐ (3/5)
**Zeit:** Lebenslang
**Voraussetzungen:** [Environment](crumbpage-14-environment.md), [Editoren](crumbpage-04-editoren.md)
> *"Die Shell ist kein Programm. Sie ist eine Lebenseinstellung."*
---
## 🎨 Spaceship Lackierung (Der Visual-Mod)
Wir haben jetzt ein Raumschiff (Debian 13), aber es sieht noch aus wie ein Karton.
Lass uns Farben mischen. In der `.bashrc` definieren wir unsere Palette.
### Die Farb-Masken
```bash
# ~/.bashrc - Color Definitions
export RED="\[\033[0;31m\]"
export GREEN="\[\033[0;32m\]"
export YELLOW="\[\033[1;33m\]"
export BLUE="\[\033[0;34m\]"
export PURPLE="\[\033[0;35m\]"
export CYAN="\[\033[0;36m\]"
export NC="\[\033[0m\]" # No Color
```
### Der Prompt (PS1)
Der String `PS1` bestimmt, was vor dem Cursor steht.
Standard: `\u@\h:\w\$` (User@Host:Path$)
**Admin-Style (Rot bei Root):**
```bash
if [ "$EUID" -eq 0 ]; then
PS1="${RED}\u@\h${NC}:${BLUE}\w${NC}# "
else
PS1="${GREEN}\u@\h${NC}:${BLUE}\w${NC}$ "
fi
```
---
## ⚡ Syntax-Fallen: Warum schreit meine Shell?
Du hast heute gekämpft. Hier sind die Narben und was wir daraus gelernt haben.
### 1. Das "Eckige Klammern" Trauma
Bash ist extrem pingelig mit Leerzeichen.
**Falsch (Error: command not found):**
```bash
if [$a = $b]; then ...
```
Die Shell sucht nach einem Programm namens `[$a`.
**Richtig:**
```bash
if [ "$a" = "$b" ]; then ...
```
Die Klammer `[` ist tatsächlich ein **Befehl** (Alias für `test`). Und Befehle brauchen Leerzeichen zu ihren Argumenten.
### 2. Ampersand Roulette: `&` vs. `&&`
Ein kleiner Unterschied, der Prozesse tötet oder Zombies erschafft.
- `befehl1 && befehl2`: Mach 2 **nur wenn** 1 erfolgreich war (AND).
- `befehl1 & befehl2`: Starte 1 im **Hintergrund** und starte sofort 2 (Parallel).
**Die Falle:**
`script.sh & && ssh-add` -> Syntax Error.
Das `&&` erwartet einen Befehl davor, aber das `&` hat den Befehl schon in den Hintergrund geschickt (Ende der Befehlskette).
**Lösung:**
Klammern oder Semikolon.
`(script.sh &) && ssh-add` (Subshell)
### 3. EOF und das "Heredoc"
Wenn du Code dynamisch schreibst (`cat << EOF`), darf **kein Leerzeichen** nach dem `EOF` (End Marker) stehen. Sonst wartet Bash für immer auf das "echte" EOF.
---
## 🛠️ Mechanik: Symlinks & /dev/null
### Das schwarze Loch (`/dev/null`)
Alles, was dorthin geht, verschwindet. Perfekt für nervige Fehlermeldungen.
```bash
# Standard Output wegwerfen, Fehler anzeigen
befehl > /dev/null
# Alles wegwerfen (Ruhe im Karton)
befehl > /dev/null 2>&1
```
### Symlinks bearbeiten
Ein Symlink (`ln -s`) ist nur ein Wegweiser.
Wenn du ihn bearbeitest (`nano linkname`), bearbeitest du das **Ziel**.
Wenn du das Ziel löschst, zeigt der Link ins Leere ("Dangling Symlink").
---
## 🚀 Funktionen vs. Aliases
Aliases sind gut für Abkürzungen (`aliasll='ls -l'`). Für Logik brauchst du Funktionen.
### Der Reload-Trick
Nach dem Editieren der `.bashrc` musst du dich nicht ausloggen.
```bash
# In ~/.bashrc
function reload() {
source ~/.bashrc
echo "♻️ Umgebung neu geladen."
}
```
Jetzt reicht ein `reload`.
### Der "Killer" (Prozess-Management)
Wie vom User heute gefordert: Eine Funktion, um Hintergrund-Scripte gezielt zu stoppen.
```bash
function killscript() {
PATTERN="$1"
if [ -z "$PATTERN" ]; then echo "Welches Script?"; return; fi
# pkill -f sucht im vollen Befehlsnamen
pkill -f "$PATTERN" && echo "💀 $PATTERN wurde beendet." || echo "Nichts gefunden."
}
```
---
## 🦉 Crystal Owl's Weisheit
> *"Ein guter Admin schreibt keine Befehle, er komponiert sie."*
Deine `.bashrc` wächst mit dir. Was heute nützlich ist, fliegt morgen raus. Das ist okay. Es ist dein Werkzeugkasten. Halte ihn sauber, aber habe keine Angst vor neuen Tools.
---
**Version:** 1.0
**Status:** Ready
**Tags:** #Bash #Config #KernelDance #Syntax
---
**Navigation:**
[← Zurück: Agent Lockdown](crumbpage-19-agent-lockdown.md) | [Startseite](crumbpages-doktor.sh)

View File

@@ -1,5 +1,5 @@
#!/bin/bash
# 🦉 Crumbpages Doktor v2 - Der Wald-Sanitäter für dein Repo
# 🦉 Crumbpages Doktor v2.0-RC3 - Der Wald-Sanitäter für dein Repo
# Mit .env Support und spezialisierten Shells
# Farben für schöne Ausgabe
@@ -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,62 @@ 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)
PID_RUNNING=false
if [ -f "\$WATCHDOG_PID" ] && kill -0 \$(cat "\$WATCHDOG_PID") 2>/dev/null; then
PID_RUNNING=true
PID=\$(cat "\$WATCHDOG_PID")
elif pgrep -f "ssh-agent-guard.sh" > /dev/null; then
PID_RUNNING=true
PID=\$(pgrep -f "ssh-agent-guard.sh" | head -n 1)
# Fix PID file if missing but running
echo "\$PID" > "\$WATCHDOG_PID"
elif pgrep -f "ssh-agent-screenlock" > /dev/null; then
PID_RUNNING=true
PID=\$(pgrep -f "ssh-agent-screenlock" | head -n 1)
fi
if [ "\$PID_RUNNING" = true ]; then
if [ -f "\$WATCHDOG_PAUSE" ]; then
echo "⚠️ Watchdog läuft (PID \$PID), ist aber PAUSIERT (Deep Work)."
else
echo "✅ Watchdog läuft und ist scharf (PID \$PID)."
fi
else
echo "❌ Watchdog Script läuft nicht."
fi
# Check Agent Socket
SOCKET="\$HOME/.ssh/agent.sock"
if [ -S "\$SOCKET" ]; then
echo "✅ SSH Agent Socket gefunden (\$SOCKET)."
# Optional: Count keys
KEY_COUNT=\$(SSH_AUTH_SOCK=\$SOCKET ssh-add -l 2>/dev/null | wc -l | tr -d ' ')
echo " -> Geladene Keys: \$KEY_COUNT"
else
echo "❌ Kein SSH Agent Socket gefunden."
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 +299,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.

69
ssh-agent-guard.sh Normal file
View File

@@ -0,0 +1,69 @@
#!/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
# Init: Sofort einmal ausführen, damit der Key-Store definiert ist
if [ ! -f "$HOME/.ssh/agent-environment" ]; then
log "INIT: Starte initialen Agent..."
restart_agent
fi
log "Watchdog gestartet (PID $$). Warte auf Lock-Events..."
# 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

99
ssh-agent-screenlock_v4.sh Executable file
View File

@@ -0,0 +1,99 @@
#!/bin/bash
#
# SSH-Agent Neustart beim Bildschirmschoner (MATE Desktop)
# Dieses Script startet den ssh-agent neu, wenn der Bildschirm gesperrt wird
#
LOG_FILE="$HOME/.ssh-agent-screenlock.log"
SOCKET_PATH="$HOME/.ssh/agent.sock"
# Check for existing instance
pid_file="$HOME/.ssh-agent-watchdog.pid"
if [ -f "$pid_file" ]; then
old_pid=$(cat "$pid_file")
if kill -0 "$old_pid" 2>/dev/null; then
echo "Watchdog läuft bereits (PID: $old_pid). Beende alte Instanz..."
kill "$old_pid"
fi
fi
echo $$ > "$pid_file"
STOP_LOCK="$HOME/.ssh-agent-watchdog.pause"
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
restart_ssh_agent() {
# Check if we are "paused" for large transfers
if [ -f "$STOP_LOCK" ]; then
log_message "SKIP: Bildschirm gesperrt, aber 'Deep Work' Modus aktiv (Pause-File gefunden)."
return
fi
log_message "Bildschirm gesperrt - SSH-Agent wird neu gestartet"
# Alte ssh-agent Prozesse beenden
if [ -n "$SSH_AGENT_PID" ]; then
kill "$SSH_AGENT_PID" 2>/dev/null
log_message "SSH-Agent PID $SSH_AGENT_PID beendet"
fi
# Alle ssh-agent Prozesse des aktuellen Users beenden
pkill -u "$USER" ssh-agent
# SSH-Agent Umgebungsvariablen löschen
unset SSH_AUTH_SOCK
unset SSH_AGENT_PID
# Alten Socket entfernen, falls vorhanden
rm -f "$SOCKET_PATH"
# Neuen ssh-agent starten und direkt an fixen Pfad binden
# -a: bind address (socket path)
eval "$(ssh-agent -a "$SOCKET_PATH" -s)" > /dev/null 2>&1
# Check if agent started successfully
if [ -z "$SSH_AGENT_PID" ]; then
log_message "FEHLER: SSH-Agent konnte nicht gestartet werden"
return
fi
# Umgebungsvariablen in Datei speichern für andere Terminals
# Dateiname angepasst an .bashrc des Users: ~/.ssh/agent-environment
cat > "$HOME/.ssh/agent-environment" <<EOF
export SSH_AUTH_SOCK=$SOCKET_PATH
export SSH_AGENT_PID=$SSH_AGENT_PID
EOF
log_message "Neuer SSH-Agent gestartet (PID: $SSH_AGENT_PID, Socket: $SOCKET_PATH)"
}
# Cleanup bei Script-Ende
cleanup() {
rm -f "$pid_file"
log_message "Watchdog beendet."
exit 0
}
trap cleanup SIGINT SIGTERM
# Sicherstellen, dass der Bildschirmschoner auch wirklich sperrt
gsettings set org.mate.screensaver lock-enabled true 2>/dev/null
# Grace-Period abschalten (Sofort sperren)
gsettings set org.mate.screensaver lock-delay 0 2>/dev/null
log_message "Bildschirm-Sperre erzwungen (lock-enabled true, lock-delay 0)"
log_message "Watchdog gestartet (PID $$)."
# Auf MATE Screensaver Events hören
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
# Sofort sperren anfordern, falls noch nicht geschehen
mate-screensaver-command --lock 2>/dev/null
restart_ssh_agent
# TODO: Idee - Terminal Hintergrund ändern via DBus (sehr spezifisch für Mate Terminal)
# Experimentell: gsettings set org.mate.terminal.profile:/org/mate/terminal/profiles/default/ background-color '#000000'
fi
done