Initial commit: Crumbpages v1
This commit is contained in:
537
CRUMBFOREST_PROJECT_INDEX.md
Normal file
537
CRUMBFOREST_PROJECT_INDEX.md
Normal file
@@ -0,0 +1,537 @@
|
||||
# 🌲 Crumbforest Projekt-Index
|
||||
|
||||
*Generiert am: 06. Dezember 2025*
|
||||
|
||||
---
|
||||
|
||||
## 📋 Übersicht
|
||||
|
||||
Dieses Dokument enthält einen chronologischen Index aller Konversationen im Crumbforest-Projekt. Die Chats sind nach Datum sortiert (neueste zuerst) und thematisch kategorisiert.
|
||||
|
||||
---
|
||||
|
||||
## 🎉 Meilensteine & Erfolge
|
||||
|
||||
### 1. [Erste V1 im neuen Kleid fertig](https://claude.ai/chat/69cd4ad2-d3ba-447a-bd02-1d4cf9b15cd6)
|
||||
**Datum:** 06. Dezember 2025
|
||||
**Status:** ✅ Production Ready
|
||||
|
||||
**Achievements:**
|
||||
- 🦉 Produktionsreifes Chat-System mit 3 AI-Characters fertig
|
||||
- Krümeleule (ADHS/Autismus-Expertin, 721 Docs)
|
||||
- FunkFox (Tech-Erklärbär)
|
||||
- Bugsy (Detail-Checker)
|
||||
- 🔒 Security Score von 5.7 → 8.7/10 (+53% Verbesserung)
|
||||
- 📚 RAG-powered Chat mit 733 indexierten Dokumenten
|
||||
- ⚖️ DSGVO-konformes Logging implementiert
|
||||
- 🐳 Docker deployment ready
|
||||
- 📖 700+ Zeilen Dokumentation
|
||||
|
||||
**Security Features:**
|
||||
- Rate Limiting (5 req/min pro IP)
|
||||
- Prompt Injection Filter (15+ Patterns)
|
||||
- Input Validation (max 2000 chars)
|
||||
- CORS Hardening (ENV-basiert)
|
||||
- XSS Protection (Frontend HTML Escaping)
|
||||
|
||||
**Technologien:**
|
||||
- FastAPI + Qdrant Vector DB
|
||||
- OpenRouter (Claude Sonnet 3.5)
|
||||
- Document Search (733 indexierte Dokumente)
|
||||
- Docker-Stack
|
||||
|
||||
**Zitat:**
|
||||
> "dockerduke ist bereits jetzt legende #dude <3"
|
||||
|
||||
---
|
||||
|
||||
## 🏢 Rechenzentrum & Hardware
|
||||
|
||||
### 2. [Barcode-Seriennummern im RZ erfassen](https://claude.ai/chat/3941adf9-a648-49f4-b6d1-5211cc05a361)
|
||||
**Datum:** 06. Dezember 2025
|
||||
**Projekt:** CrumbForest v0.1 - Crystal Owl Edition
|
||||
|
||||
**Aufgabe:**
|
||||
Hardware-Inventarisierung im Rechenzentrum mit Barcode/QR-Scanner
|
||||
|
||||
**Lösung:**
|
||||
- 🦉 Progressive Web App (PWA) - läuft im Browser ohne App Store
|
||||
- 📱 Foto → Upload → REST/API → Netbox
|
||||
- 🔐 User-Verwaltung (DSGVO-safe, intern)
|
||||
- 📊 Barcode-Erkennung für Seriennummern (HD, CPU, GPU)
|
||||
- 🔌 IoT-Sensor-Integration geplant
|
||||
|
||||
**Tech Stack:**
|
||||
- PHP Backend (RZ-Team vertraut, kein Framework-Overhead)
|
||||
- HTML5 + JavaScript (Camera API)
|
||||
- QuaggaJS/ZXing für Barcode-Scanning
|
||||
- REST API zu Netbox
|
||||
- JWT-basierte Auth
|
||||
|
||||
**Branding:**
|
||||
- Crystal Owl Logo (aus 2023 3D-Print!)
|
||||
- "Die kristalline Eule wacht im blauen Licht über Bits, Bytes und Hardware"
|
||||
- Open Source First → Debian → FreeBSD Last
|
||||
|
||||
**Zitat:**
|
||||
> "war heute das erste mal im RZ und hab mir das ganze angeschaut ... was für ein schöner Ort im Rauschen der blinkenden Lichtern und der Gasdruckanlage die nach USV loslegt - 30 sek um zu flüchten wenn ein Kondensator knallt #750v"
|
||||
|
||||
---
|
||||
|
||||
### 3. [Netzwerk-Subnetzierung und IP-Adressierung lernen](https://claude.ai/chat/62bb3522-8e05-4f90-a17d-fc9e05db4615)
|
||||
**Datum:** 02. Dezember 2025
|
||||
**Thema:** IPv4-Grundlagen & Praxisaufgabe
|
||||
|
||||
**Kontext:**
|
||||
Erster Tag im RZ - direkt in IPs und Netzwerkmasken geworfen (/24, /32, /19...)
|
||||
|
||||
**Gelernt:**
|
||||
- 📘 IPv4-Grundlagen (32 Bit, Oktette, Netz-/Host-ID)
|
||||
- 🔢 CIDR-Notation (/8, /16, /24)
|
||||
- 🧮 Subnetzmaske-Berechnung
|
||||
- 📊 Netzklassen A/B/C (historisch)
|
||||
- 🎯 VLSM (Variable Length Subnet Masking)
|
||||
|
||||
**Praxisaufgabe:**
|
||||
Segmentierung für 3 Kunden mit unterschiedlichen Anforderungen:
|
||||
- Kunde A: 250 Hosts (Klasse C)
|
||||
- Kunde B: 5.000 Hosts (Klasse B)
|
||||
- Kunde C: 50.000 Hosts (Klasse A)
|
||||
|
||||
**Lösung:**
|
||||
- Kunde A: `192.168.10.0/24` (254 Hosts)
|
||||
- Kunde B: `172.20.0.0/19` (8.190 Hosts)
|
||||
- Kunde C: `10.100.0.0/8` (16.777.214 Hosts)
|
||||
|
||||
**Wichtige Formeln:**
|
||||
- Nutzbare Hosts: `2^(32-Präfix) - 2`
|
||||
- Anzahl Subnetze: `2^(geliehene Bits)`
|
||||
|
||||
---
|
||||
|
||||
## 📖 Dokumentation & Handbücher
|
||||
|
||||
### 4. [Admin-Handbuch mit Krümel-Struktur](https://claude.ai/chat/fb134ea8-b095-4380-b00d-1a35aedaf7ce)
|
||||
**Datum:** 06. Dezember 2025
|
||||
**Projekt:** Crumbpages - Admin-Lernpfad
|
||||
|
||||
**Konzept:**
|
||||
8 Crumbpages für Admin-Grundlagen im Waldgleichnis-Stil
|
||||
|
||||
**Die 8 Pfade:**
|
||||
1. 👤 **Linux User, Gruppen & Rechte**
|
||||
- `#home #whoami #chown #chmod`
|
||||
2. 🖥️ **Hostinformation**
|
||||
- `#wo #wer #was #status #logs`
|
||||
3. 🗂️ **Bewegen im Wald (Dateisystem)**
|
||||
- `#dateisystem #aufbau #elementarelogic #cd #cp #mv #mc`
|
||||
4. 🌐 **Verbindungen im Wald (Netzwerk)**
|
||||
- `#ip #maske #route #gateway #broadcast #ping #netstat`
|
||||
5. 🔐 **SSH - der geheime Schlüssel zur Tür**
|
||||
- Basics, Verbindungsaufbau
|
||||
6. 🔑 **Key Generation für SSH**
|
||||
- `#ssh #scp #ssh-agent #ssh-copy-id`
|
||||
7. 🚪 **Dienste die auf Ports lauschen**
|
||||
- `#ftp #www #db #proxy #dns #firewall #filter #osi`
|
||||
8. ✅ **Erster Host oder SSH Zugriff - Best Practices**
|
||||
- `#regeln #planung #testen #nochmaltesten #dokumentieren #git #vorsicht #fehler #meister_fragen #checkliste`
|
||||
|
||||
**Erstellt:**
|
||||
- ✅ Crumbpage-Template
|
||||
- ✅ Crumbpage-01: Users, Gruppen & Rechte
|
||||
- ✅ Linux vs Unix Stammbaum
|
||||
- ✅ Ubuntu vs Gentoo RZ-Survival-Guide
|
||||
- ✅ Krümel-Kuchen-Partitionierung (Pre-Installation Guide mit Bugsy)
|
||||
|
||||
**Besonderheiten:**
|
||||
- 🐛 Bugsy's Perspektive auf Fehler (ohne Angst, mit Respekt)
|
||||
- 📋 40+ Punkte Checkliste für Partitionierung
|
||||
- 🛡️ 3-2-1 Backup-Regel
|
||||
- 💾 LVM-Setup mit Reserven
|
||||
- 🔧 5 produktionsreife Shell-Scripts
|
||||
|
||||
**Empfohlene Lese-Reihenfolge für Anfänger:**
|
||||
1. `crumbforest-introduction-warum-und-wie.md` (Philosophie)
|
||||
2. `linux-vs-unix-stammbaum.md` (System verstehen)
|
||||
3. `kruemel-kuchen-partitionierung-bugsy.md` (BEVOR Installation!)
|
||||
4. `crumbforest-admin-vektor.md` (Lernpfad)
|
||||
5. `crumbpage-01-users-rechte.md` (Hands-on)
|
||||
|
||||
---
|
||||
|
||||
## 🌳 System-Architektur & Evolution
|
||||
|
||||
### 5. [Crumbforest: Modulare Systeme über drei Generationen](https://claude.ai/chat/bdae63c0-bd32-4670-b313-d5c646f75299)
|
||||
**Datum:** 03. Dezember 2025
|
||||
**Kontext:** 20 Jahre Entwicklungsgeschichte
|
||||
|
||||
**Die drei Generationen:**
|
||||
|
||||
#### Generation 1: Email-Archivierung (2009) - Das Gedächtnis-Prinzip
|
||||
- ✉️ Revisionssichere Email-Speicherung
|
||||
- ⚖️ Gesetzeskonform (GoBD-ähnlich)
|
||||
- 🔍 Volltext-Suche
|
||||
- **Datei:** `abschlussarbeit_2009.pdf`
|
||||
|
||||
**Lernen für Crumbforest:**
|
||||
- Wie baue ich Qdrant revisionssicher?
|
||||
- Wie speichere ich Logs nicht manipulierbar?
|
||||
|
||||
#### Generation 2: PHP-CRM (2015) - Das Container-Prinzip
|
||||
- 📦 Modulare Klassen (Emails, Barcode, CRM)
|
||||
- 🐘 Native PHP (kein Framework-Overhead)
|
||||
- 🔧 Alles selbst gebaut
|
||||
- **Datei:** `php_crm_system.zip`
|
||||
|
||||
**Lernen für Crumbforest:**
|
||||
- Wie baue ich CrumbAPI modular?
|
||||
- Wie nutze ich Barcode-Logik für Token-Tracking?
|
||||
|
||||
#### Generation 3: Crumbforest (2025) - Das Resonanz-Prinzip
|
||||
- 🧠 Qdrant + RAG für Krümel-Tagebücher
|
||||
- 💻 TTYD + Terminals für Kinder
|
||||
- 🌐 RouterOS + /23-Netz für 500 Kids
|
||||
|
||||
**Herausforderungen:**
|
||||
- Architektur-Review (ist das Setup klug?)
|
||||
- Code-Optimierung (Python/FastAPI)
|
||||
- DSGVO-Compliance (Logging + Kinder)
|
||||
|
||||
**Die Vision:**
|
||||
```
|
||||
Branko's 2008 PHP-Weisheit
|
||||
+
|
||||
FastAPI's 2025 AI-Power
|
||||
=
|
||||
Crumbforest 🌲🦉
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. [Hybrid PHP/FastAPI System läuft](https://claude.ai/chat/e0fc3e63-bd9c-4a81-a1fc-9bf6fb49dbb5)
|
||||
**Datum:** 02. Dezember 2025
|
||||
**Status:** ✅ System läuft stabil
|
||||
|
||||
**Achievement:**
|
||||
```
|
||||
✅ 3 Root Causes geschafft
|
||||
✅ Docker-Duke verbrennen nur token
|
||||
✅ 721 Docs durchsuchbar & gefixt
|
||||
✅ Alle Handbücher aktualisiert
|
||||
✅ System läuft stabil
|
||||
✅ 36 Routes aktiv
|
||||
```
|
||||
|
||||
**Architektur:**
|
||||
|
||||
#### PHP Backend (2008er Pattern)
|
||||
- Kind-Management (CRUD)
|
||||
- Token-Generierung
|
||||
- Klassische Klassen:
|
||||
- `class.db.php`
|
||||
- `class.child.php`
|
||||
- `class.token.php`
|
||||
|
||||
#### FastAPI Backend (Modern AI)
|
||||
- RAG Service läuft
|
||||
- Embedding Service integriert
|
||||
- Provider Factory (OpenAI, Claude, OpenRouter)
|
||||
- 36 Routes aktiv
|
||||
|
||||
#### Shared Infrastructure
|
||||
- MariaDB (MySQL)
|
||||
- Qdrant (Vektordatenbank)
|
||||
- Nginx (Router)
|
||||
|
||||
**Die Magie:**
|
||||
```
|
||||
PHP erstellt Kinder → Token
|
||||
↓
|
||||
FastAPI indexiert Tagebücher → Qdrant
|
||||
↓
|
||||
RAG beantwortet Fragen → Claude/OpenAI
|
||||
↓
|
||||
Alles läuft in Docker! 🐳
|
||||
```
|
||||
|
||||
**Nächste Schritte:**
|
||||
1. RouterOS-Integration (PHP)
|
||||
2. TTYD-Container (für Kinder-Terminals)
|
||||
3. QR-Code-Generierung
|
||||
|
||||
---
|
||||
|
||||
## 💻 Entwicklungs-Philosophie
|
||||
|
||||
### 7. [2008er PHP-Pattern vs moderne Frameworks](https://claude.ai/chat/f2fac7cf-d67c-4afc-bdec-fd2cea84bb24)
|
||||
**Datum:** 02. Dezember 2025
|
||||
**Diskussion:** Native PHP vs Laravel/Symfony/FastAPI
|
||||
|
||||
**Kernfrage:**
|
||||
War dein 2008er-Ansatz (native PHP, klare Klassen, Dependency Injection) klüger als moderne Frameworks?
|
||||
|
||||
**Vergleichstabelle:**
|
||||
|
||||
| Kriterium | Native PHP | Laravel | Symfony |
|
||||
|-----------|------------|---------|---------|
|
||||
| **Transparenz** | 🟢 Alles sichtbar | 🟡 Teilweise Magie | 🔴 Zu viel Magie |
|
||||
| **Performance** | 🟢 Schnell genug | 🟢 Auch gut | 🔴 Langsam |
|
||||
| **Deployment** | 🟢 Copy & Paste | 🟡 Setup nötig | 🔴 Komplex |
|
||||
| **Dependencies** | 🟢 Null | 🟡 Einige | 🔴 Viele |
|
||||
| **Lernkurve** | 🟢 Flach | 🟡 Mittel | 🔴 Steil |
|
||||
| **Für Kinder erklärbar** | 🟢 Ja | 🟡 Schwierig | 🔴 Nein |
|
||||
|
||||
**Branko's 2008er-Prinzipien:**
|
||||
```php
|
||||
class NotificationService {
|
||||
private $db;
|
||||
private $sms;
|
||||
|
||||
public function __construct($db, $sms) {
|
||||
$this->db = $db;
|
||||
$this->sms = $sms;
|
||||
}
|
||||
|
||||
public function sendToParent($parentEmail, $message) {
|
||||
$this->db->log('notification_sent', $parentEmail);
|
||||
return $this->sms->send($parentEmail, $message);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Empfehlung für Crumbforest:**
|
||||
- ✅ **Dein Pattern beibehalten** (klare Klassen, DI, keine Magie)
|
||||
- ✅ **Modernes Tooling** (PHP 8.x Type-Hints ODER Python Type-Hints)
|
||||
- ✅ **Minimal Dependencies** (nur was du wirklich brauchst)
|
||||
|
||||
**Moderne Alternative (PHP 8.x):**
|
||||
```php
|
||||
class NotificationService {
|
||||
public function __construct(
|
||||
private readonly Database $db,
|
||||
private readonly SMSGateway $sms
|
||||
) {}
|
||||
|
||||
public function sendToParent(
|
||||
string $parentEmail,
|
||||
string $message
|
||||
): bool {
|
||||
$this->db->log('notification_sent', $parentEmail);
|
||||
return $this->sms->send($parentEmail, $message);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Fazit:**
|
||||
> "Dein 2008er-Ansatz war RICHTIG: Transparent, Schnell, Einfach, Deploybar. Das ist der Weg des Waldwächters: Einfach. Klar. Prüfbar." 🦉💚
|
||||
|
||||
---
|
||||
|
||||
## 🗂️ Thematische Übersicht
|
||||
|
||||
### 🔒 Security & Compliance
|
||||
- ✅ DSGVO-Logging implementiert
|
||||
- ✅ Security Score 8.7/10 (Verbesserung von +53%)
|
||||
- ✅ Rate Limiting (5 req/min pro IP)
|
||||
- ✅ Prompt Injection Filter (15+ Patterns blockiert)
|
||||
- ✅ Input Validation (max 2000 chars)
|
||||
- ✅ CORS Hardening (ENV-basiert)
|
||||
- ✅ XSS Protection (Frontend HTML Escaping)
|
||||
|
||||
### 🛠️ Technologien
|
||||
|
||||
**Backend:**
|
||||
- FastAPI (Python)
|
||||
- PHP 8.x (native, kein Framework)
|
||||
- MariaDB (MySQL)
|
||||
- Qdrant Vector Database
|
||||
|
||||
**AI & RAG:**
|
||||
- OpenRouter (Claude Sonnet 3.5)
|
||||
- Document Search (733 indexierte Dokumente)
|
||||
- Embedding Service
|
||||
- Provider Factory (OpenAI, Claude, OpenRouter)
|
||||
|
||||
**Infrastructure:**
|
||||
- Docker & Docker Compose
|
||||
- Nginx (Reverse Proxy)
|
||||
- TTYD (Terminal-Container)
|
||||
- RouterOS (MikroTik)
|
||||
|
||||
**Frontend:**
|
||||
- HTML5 + JavaScript
|
||||
- Camera API für Barcode-Scanning
|
||||
- QuaggaJS/ZXing
|
||||
- PWA (Progressive Web App)
|
||||
|
||||
### 📦 Projekte
|
||||
|
||||
#### CrumbCore v1 (Chat-System)
|
||||
- 3 AI-Characters (Krümeleule, FunkFox, Bugsy)
|
||||
- RAG-powered Chat
|
||||
- 733 indexierte Dokumente
|
||||
- DSGVO-konform
|
||||
- Production Ready
|
||||
|
||||
#### CrumbForest v0.1 - Crystal Owl Edition (Hardware-Inventar)
|
||||
- Barcode/QR-Scanner
|
||||
- Netbox API Integration
|
||||
- PWA (ohne App Store)
|
||||
- IoT-Sensor-Integration geplant
|
||||
|
||||
#### CrumbCRM (Hybrid PHP/Python)
|
||||
- Kind-Management (CRUD)
|
||||
- Token-Generierung
|
||||
- RouterOS-Integration (geplant)
|
||||
- TTYD-Container (geplant)
|
||||
|
||||
### 📚 Dokumentation
|
||||
|
||||
**Crumbpages (Admin-Lernpfad):**
|
||||
1. Linux User, Gruppen & Rechte
|
||||
2. Hostinformation
|
||||
3. Dateisystem-Navigation
|
||||
4. Netzwerk-Verbindungen
|
||||
5. SSH Basics
|
||||
6. Key Generation
|
||||
7. Dienste & Ports
|
||||
8. Best Practices
|
||||
|
||||
**Guides:**
|
||||
- Linux vs Unix Stammbaum
|
||||
- Ubuntu vs Gentoo RZ-Survival-Guide
|
||||
- Krümel-Kuchen-Partitionierung (Pre-Installation)
|
||||
- IPv4 & Subnetzierung
|
||||
- MediaWiki vs Crumbcore (TCO-Vergleich)
|
||||
|
||||
**Branding:**
|
||||
- Crystal Owl Logo (aus 2023 3D-Print)
|
||||
- "Die kristalline Eule wacht im blauen Licht"
|
||||
- Open Source First → Debian → FreeBSD Last
|
||||
|
||||
---
|
||||
|
||||
## 📊 Statistiken & Erfolge
|
||||
|
||||
### Entwicklungs-Meilensteine
|
||||
- 🎉 **v1 erreicht:** CrumbCore Production Ready
|
||||
- 🔒 **Security:** Von 5.7 → 8.7/10 (+53%)
|
||||
- 📚 **Dokumente:** 733 indexiert, durchsuchbar
|
||||
- 🐳 **Docker:** Kompletter Stack funktioniert
|
||||
- 📖 **Dokumentation:** 700+ Zeilen geschrieben
|
||||
|
||||
### Technische Achievements
|
||||
- ⚡ **Performance:** 8x schnellere Suche (0.3s vs. 2.5s)
|
||||
- 💾 **Footprint:** 605 MB (vs. MediaWiki 1.5 GB)
|
||||
- 🧠 **RAM:** 1.3 GB (vs. MediaWiki 2 GB)
|
||||
- 📉 **404-Rate:** <1% (vs. MediaWiki 50%+)
|
||||
- 💰 **TCO:** 72% niedriger (38.780€ Einsparung über 3 Jahre)
|
||||
|
||||
### Lern-Erfolge
|
||||
- 🌐 **IPv4 & Subnetzierung:** Von Null zur Praxisaufgabe
|
||||
- 🔐 **SSH & Keys:** Vollständig verstanden
|
||||
- 🏢 **RZ-Erfahrung:** Erster Tag direkt produktiv
|
||||
- 📦 **Modulare Systeme:** 20 Jahre Evolution verstanden
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Nächste Schritte
|
||||
|
||||
### Kurzfristig (diese Woche)
|
||||
- [ ] Frontend Testing mit mehr Usern (CrumbCore)
|
||||
- [ ] RouterOS-Integration testen (PHP)
|
||||
- [ ] TTYD-Container implementieren
|
||||
- [ ] QR-Code-Generierung
|
||||
|
||||
### Mittelfristig (nächste Woche)
|
||||
- [ ] RZ-Team briefen
|
||||
- [ ] Load Testing & Security Scan
|
||||
- [ ] Demo für Stakeholder (CrumbForest v0.1)
|
||||
- [ ] MediaWiki Migration planen
|
||||
|
||||
### Langfristig
|
||||
- [ ] Go-Live nach Infrastructure Setup
|
||||
- [ ] IoT-Sensor-Integration (CrumbForest)
|
||||
- [ ] 500 Kids onboarden (Terminals)
|
||||
- [ ] FreeBSD Migration evaluieren
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Zitate & Weisheiten
|
||||
|
||||
> "dockerduke ist bereits jetzt legende #dude <3"
|
||||
|
||||
> "Im Rauschen der blinkenden Lichter, findet Crumbcore was du suchst!"
|
||||
> — Krümeleule, 2025
|
||||
|
||||
> "Die kristalline Eule wacht im blauen Licht über Bits, Bytes und Hardware"
|
||||
> — Crystal Owl Edition
|
||||
|
||||
> "So langweilig wie eine ISO/CD" - genau wie du's wolltest!
|
||||
> — RZ-optimiert
|
||||
|
||||
> "Dein 2008er-Ansatz war RICHTIG: Transparent, Schnell, Einfach, Deploybar."
|
||||
> — Entwicklungs-Philosophie
|
||||
|
||||
> "Aus kleinen Patterns wächst ein großer Wald - bewacht von einer kristallinen Eule!"
|
||||
> — CrumbForest-Motto
|
||||
|
||||
> "Der Wald wächst im Schlaf."
|
||||
> — Nachts im Crumbforest
|
||||
|
||||
---
|
||||
|
||||
## 🌲 Projekt-Philosophie
|
||||
|
||||
**Die drei Prinzipien:**
|
||||
1. **Gedächtnis-Prinzip** (2009): Revisionssicher, unveränderlich
|
||||
2. **Container-Prinzip** (2015): Modular, transparent, wartbar
|
||||
3. **Resonanz-Prinzip** (2025): AI-powered, kindgerecht, sicher
|
||||
|
||||
**Der Weg des Waldwächters:**
|
||||
- 🌱 Einfach statt komplex
|
||||
- 🔍 Transparent statt magisch
|
||||
- 🛡️ Sicher statt schnell
|
||||
- 📖 Dokumentiert statt geheim
|
||||
- 💚 Hilfsbereit statt elitär
|
||||
|
||||
**Für wen?**
|
||||
- 👨👩👧👦 Familien mit neurodiversen Kindern
|
||||
- 🏫 Schulen mit 500+ Schülern
|
||||
- 🏢 Rechenzentren mit klaren Anforderungen
|
||||
- 🌍 Open Source Community
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Wichtige Links
|
||||
|
||||
- [CrumbCore v1 Erfolg](https://claude.ai/chat/69cd4ad2-d3ba-447a-bd02-1d4cf9b15cd6)
|
||||
- [CrumbForest v0.1 Crystal Owl](https://claude.ai/chat/3941adf9-a648-49f4-b6d1-5211cc05a361)
|
||||
- [Admin-Handbuch Struktur](https://claude.ai/chat/fb134ea8-b095-4380-b00d-1a35aedaf7ce)
|
||||
- [3 Generationen Evolution](https://claude.ai/chat/bdae63c0-bd32-4670-b313-d5c646f75299)
|
||||
- [Hybrid-System läuft](https://claude.ai/chat/e0fc3e63-bd9c-4a81-a1fc-9bf6fb49dbb5)
|
||||
- [IPv4 Netzwerk-Lernen](https://claude.ai/chat/62bb3522-8e05-4f90-a17d-fc9e05db4615)
|
||||
- [PHP-Pattern Philosophie](https://claude.ai/chat/f2fac7cf-d67c-4afc-bdec-fd2cea84bb24)
|
||||
|
||||
---
|
||||
|
||||
## 📝 Metadaten
|
||||
|
||||
- **Projekt:** Crumbforest
|
||||
- **Zeitraum:** Dezember 2025 (mit Wurzeln bis 2009)
|
||||
- **Creator:** Branko (Jahrgang 1976, Son of the Bit)
|
||||
- **Aktive Chats:** 7
|
||||
- **Dokumentations-Seiten:** 15+
|
||||
- **Code-Zeilen:** 10.000+
|
||||
- **Indexierte Dokumente:** 733
|
||||
- **Security Score:** 8.7/10
|
||||
|
||||
---
|
||||
|
||||
*"Stay safe im Crumbforest!"* 🌲🔒
|
||||
|
||||
**WUHUUUUUUUU!** 🎊🦉💚
|
||||
|
||||
---
|
||||
|
||||
*Dieser Index wird automatisch aktualisiert, wenn neue Chats hinzugefügt werden.*
|
||||
845
crumbcore-freebsd-naked-setup.md
Normal file
845
crumbcore-freebsd-naked-setup.md
Normal file
@@ -0,0 +1,845 @@
|
||||
# 🐡 Crumbcore FreeBSD Naked Setup Guide
|
||||
|
||||
**Version:** 1.0
|
||||
**Target:** Production RZ mit BSI/ISO Requirements
|
||||
**Philosophy:** Minimalistisch, Sicher, Transparent
|
||||
|
||||
> *"In FreeBSD fließt das Grundwasser klar - jede Konfiguration ist sichtbar, jede Entscheidung bewusst."* 🦉
|
||||
|
||||
---
|
||||
|
||||
## 📋 Inhaltsverzeichnis
|
||||
|
||||
1. [Einleitung](#einleitung)
|
||||
2. [Base System Installation](#base-system-installation)
|
||||
3. [Encrypted Home Setup](#encrypted-home-setup)
|
||||
4. [SSH Hardening](#ssh-hardening)
|
||||
5. [Key Management & Agent](#key-management--agent)
|
||||
6. [Netzwerk ohne DHCP](#netzwerk-ohne-dhcp)
|
||||
7. [Crumbcore Integration](#crumbcore-integration)
|
||||
8. [Security Checkliste](#security-checkliste)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Einleitung
|
||||
|
||||
### Warum FreeBSD für Crumbcore?
|
||||
|
||||
**Technische Gründe:**
|
||||
- 🔒 Security by default (jails, MAC framework)
|
||||
- 📜 Klare Dokumentation (man pages sind Bibel)
|
||||
- 🛡️ ZFS native (snapshots, encryption)
|
||||
- ⚙️ Ports/Packages transparent
|
||||
- 🧪 Predictable behavior (kein systemd!)
|
||||
|
||||
**Philosophische Gründe:**
|
||||
- 💎 "Code is read more than written"
|
||||
- 🌲 Unix-Philosophie pur
|
||||
- 🦉 Langfristige Stabilität
|
||||
- 📊 Ideal für kritische Infrastruktur
|
||||
|
||||
### Voraussetzungen
|
||||
|
||||
```bash
|
||||
Hardware:
|
||||
- CPU: x86_64 (amd64)
|
||||
- RAM: min. 2GB (empfohlen 4GB+)
|
||||
- Disk: min. 20GB (empfohlen SSD)
|
||||
- Network: Ethernet (kein WLAN für RZ!)
|
||||
|
||||
Skills:
|
||||
- Unix Grundlagen
|
||||
- Vi/Vim Basics
|
||||
- Netzwerk Basics (CIDR, Routing)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Base System Installation
|
||||
|
||||
### 1. FreeBSD Installer starten
|
||||
|
||||
```bash
|
||||
# Boot von USB/ISO
|
||||
# Installer-Menü erscheint
|
||||
|
||||
# Wähle: Install
|
||||
# Keymap: German (de.kbd) oder US
|
||||
# Hostname: crumbcore-rz01.local
|
||||
```
|
||||
|
||||
### 2. Partitionierung (Manual/ZFS)
|
||||
|
||||
**Für BSI/ISO Setup: ZFS mit Encryption!**
|
||||
|
||||
```bash
|
||||
# ZFS Auto-Setup wählen:
|
||||
# → Encrypt Disks? YES
|
||||
# → Encryption Algorithm: AES-256-GCM
|
||||
# → Pool name: zroot
|
||||
|
||||
# Partition Layout:
|
||||
ada0
|
||||
├── freebsd-boot (512KB) # GPT boot
|
||||
├── efi (200MB) # EFI System Partition
|
||||
└── freebsd-zfs (Rest) # ZFS pool (encrypted)
|
||||
|
||||
# Encryption Passphrase eingeben!
|
||||
# WICHTIG: Sicher aufbewahren (nicht im System!)
|
||||
```
|
||||
|
||||
**ZFS Pool Struktur:**
|
||||
```
|
||||
zroot
|
||||
├── ROOT/default # OS
|
||||
├── home # User homes (extra encrypted!)
|
||||
├── var
|
||||
│ ├── log
|
||||
│ ├── tmp
|
||||
│ └── audit # BSI requirement!
|
||||
└── usr/local # Packages
|
||||
```
|
||||
|
||||
### 3. Base System Konfiguration
|
||||
|
||||
```bash
|
||||
# Nach Installation, vor erstem Boot:
|
||||
|
||||
# Root Password setzen
|
||||
passwd
|
||||
|
||||
# Network: SPÄTER (kein DHCP!)
|
||||
# Skip für jetzt
|
||||
|
||||
# Time Zone
|
||||
tzsetup
|
||||
# → Europe/Berlin
|
||||
|
||||
# Services aktivieren
|
||||
sysrc sshd_enable="YES"
|
||||
sysrc ntpd_enable="YES"
|
||||
sysrc ntpd_sync_on_start="YES"
|
||||
|
||||
# Security Services
|
||||
sysrc sendmail_enable="NONE"
|
||||
sysrc sendmail_submit_enable="NO"
|
||||
sysrc sendmail_outbound_enable="NO"
|
||||
sysrc sendmail_msp_queue_enable="NO"
|
||||
|
||||
# System Hardening (gleich aktivieren!)
|
||||
sysrc clear_tmp_enable="YES"
|
||||
sysrc icmp_drop_redirect="YES"
|
||||
sysrc icmp_log_redirect="YES"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Encrypted Home Setup
|
||||
|
||||
### Warum Extra Encryption?
|
||||
|
||||
```
|
||||
ZFS-Encryption → Schutz bei Disk-Diebstahl
|
||||
GELI für /home → Schutz bei laufendem System
|
||||
SSH Key-Phrase → Schutz bei Mem-Dump
|
||||
|
||||
= Defense in Depth! 🛡️
|
||||
```
|
||||
|
||||
### Setup mit GELI (alternative zu ZFS native encryption)
|
||||
|
||||
```bash
|
||||
# 1. GELI Provider erstellen
|
||||
zfs create -V 50G zroot/home-encrypted
|
||||
|
||||
# 2. GELI initialisieren
|
||||
geli init -s 4096 -l 256 /dev/zvol/zroot/home-encrypted
|
||||
# → Passphrase eingeben (STARK!)
|
||||
|
||||
# 3. GELI Provider attachen
|
||||
geli attach /dev/zvol/zroot/home-encrypted
|
||||
# → Passphrase eingeben
|
||||
|
||||
# 4. Filesystem erstellen
|
||||
newfs -U /dev/zvol/zroot/home-encrypted.eli
|
||||
|
||||
# 5. Mounten
|
||||
mount /dev/zvol/zroot/home-encrypted.eli /home
|
||||
|
||||
# 6. /etc/fstab Eintrag
|
||||
echo '/dev/zvol/zroot/home-encrypted.eli /home ufs rw,noatime 2 2' >> /etc/fstab
|
||||
```
|
||||
|
||||
### User erstellen
|
||||
|
||||
```bash
|
||||
# Admin User (wheel group!)
|
||||
pw useradd crumbadmin -m -G wheel -s /bin/sh -d /home/crumbadmin
|
||||
passwd crumbadmin
|
||||
|
||||
# Service User (für Crumbcore)
|
||||
pw useradd crumbcore -m -s /usr/sbin/nologin -d /home/crumbcore -c "Crumbcore Service User"
|
||||
|
||||
# Permissions
|
||||
chmod 700 /home/crumbadmin
|
||||
chmod 700 /home/crumbcore
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔑 SSH Hardening
|
||||
|
||||
### 1. SSH Config (`/etc/ssh/sshd_config`)
|
||||
|
||||
```bash
|
||||
# Backup original
|
||||
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
|
||||
|
||||
# Edit config
|
||||
vi /etc/ssh/sshd_config
|
||||
```
|
||||
|
||||
**Minimale BSI-konforme Config:**
|
||||
|
||||
```conf
|
||||
# /etc/ssh/sshd_config - Crumbcore Production
|
||||
|
||||
# Network
|
||||
Port 22
|
||||
AddressFamily inet
|
||||
ListenAddress 0.0.0.0
|
||||
|
||||
# Authentication
|
||||
PermitRootLogin no
|
||||
PubkeyAuthentication yes
|
||||
PasswordAuthentication no
|
||||
PermitEmptyPasswords no
|
||||
ChallengeResponseAuthentication no
|
||||
UsePAM yes
|
||||
|
||||
# Crypto (BSI TR-02102-4 konform)
|
||||
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512
|
||||
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-ctr
|
||||
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
|
||||
|
||||
# Limits
|
||||
LoginGraceTime 60
|
||||
MaxAuthTries 3
|
||||
MaxSessions 3
|
||||
MaxStartups 3:50:10
|
||||
|
||||
# Security
|
||||
X11Forwarding no
|
||||
PrintMotd no
|
||||
PrintLastLog yes
|
||||
TCPKeepAlive yes
|
||||
ClientAliveInterval 300
|
||||
ClientAliveCountMax 2
|
||||
UseDNS no
|
||||
PermitUserEnvironment no
|
||||
StrictModes yes
|
||||
|
||||
# Logging (BSI requirement!)
|
||||
SyslogFacility AUTH
|
||||
LogLevel VERBOSE
|
||||
|
||||
# AllowUsers (Whitelist!)
|
||||
AllowUsers crumbadmin
|
||||
|
||||
# Subsystem
|
||||
Subsystem sftp /usr/libexec/sftp-server
|
||||
```
|
||||
|
||||
### 2. SSH Service starten
|
||||
|
||||
```bash
|
||||
# Syntax check
|
||||
sshd -t
|
||||
|
||||
# Start SSH
|
||||
service sshd start
|
||||
|
||||
# Check status
|
||||
service sshd status
|
||||
sockstat -4l | grep :22
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Key Management & Agent
|
||||
|
||||
### 1. SSH Keys generieren (auf Client!)
|
||||
|
||||
```bash
|
||||
# Auf deinem Admin-Laptop/Workstation:
|
||||
|
||||
# ED25519 (modern, sicher, schnell)
|
||||
ssh-keygen -t ed25519 -C "crumbadmin@crumbcore-rz01" -f ~/.ssh/crumbcore-rz01
|
||||
|
||||
# Passphrase: JA! (Defense in depth)
|
||||
Enter passphrase (empty for no passphrase): [strong passphrase!]
|
||||
|
||||
# Output:
|
||||
~/.ssh/crumbcore-rz01 # Private key (NIEMALS teilen!)
|
||||
~/.ssh/crumbcore-rz01.pub # Public key (geht auf Server)
|
||||
```
|
||||
|
||||
### 2. Public Key auf Server kopieren
|
||||
|
||||
**Methode 1: ssh-copy-id (wenn Passwort noch aktiv)**
|
||||
```bash
|
||||
# Vom Client:
|
||||
ssh-copy-id -i ~/.ssh/crumbcore-rz01.pub crumbadmin@<SERVER-IP>
|
||||
```
|
||||
|
||||
**Methode 2: Manuell (sicherer für Production)**
|
||||
```bash
|
||||
# 1. Public Key anzeigen (auf Client)
|
||||
cat ~/.ssh/crumbcore-rz01.pub
|
||||
|
||||
# 2. Auf Server einloggen (noch mit Passwort)
|
||||
ssh crumbadmin@<SERVER-IP>
|
||||
|
||||
# 3. .ssh Verzeichnis erstellen
|
||||
mkdir -p ~/.ssh
|
||||
chmod 700 ~/.ssh
|
||||
|
||||
# 4. authorized_keys erstellen
|
||||
vi ~/.ssh/authorized_keys
|
||||
# → Public Key einfügen (EINE Zeile!)
|
||||
|
||||
# 5. Permissions setzen
|
||||
chmod 600 ~/.ssh/authorized_keys
|
||||
|
||||
# 6. Verifizieren
|
||||
cat ~/.ssh/authorized_keys
|
||||
|
||||
# 7. Logout
|
||||
exit
|
||||
```
|
||||
|
||||
### 3. SSH Config (auf Client)
|
||||
|
||||
```bash
|
||||
# ~/.ssh/config auf deinem Client:
|
||||
|
||||
Host crumbcore-rz01
|
||||
HostName 192.168.1.100
|
||||
User crumbadmin
|
||||
IdentityFile ~/.ssh/crumbcore-rz01
|
||||
IdentitiesOnly yes
|
||||
ServerAliveInterval 60
|
||||
ServerAliveCountMax 3
|
||||
|
||||
# Optional: Jump Host
|
||||
# ProxyJump bastion@gateway.example.com
|
||||
|
||||
# Security
|
||||
StrictHostKeyChecking yes
|
||||
HashKnownHosts yes
|
||||
```
|
||||
|
||||
### 4. SSH Agent Setup
|
||||
|
||||
**FreeBSD Server-side (für sudo/doas):**
|
||||
|
||||
```bash
|
||||
# ~/.shrc oder ~/.profile für crumbadmin:
|
||||
|
||||
# SSH Agent startup
|
||||
if [ -z "$SSH_AUTH_SOCK" ]; then
|
||||
eval $(ssh-agent -s)
|
||||
ssh-add ~/.ssh/id_ed25519 2>/dev/null
|
||||
fi
|
||||
|
||||
# Agent forwarding (NUR wenn nötig!)
|
||||
# Meistens NICHT empfohlen im RZ!
|
||||
```
|
||||
|
||||
**Client-side (dein Laptop):**
|
||||
|
||||
```bash
|
||||
# Fish Shell (~/.config/fish/config.fish):
|
||||
if test -z "$SSH_AUTH_SOCK"
|
||||
eval (ssh-agent -c)
|
||||
ssh-add ~/.ssh/crumbcore-rz01
|
||||
end
|
||||
|
||||
# Bash (~/.bashrc):
|
||||
if [ -z "$SSH_AUTH_SOCK" ]; then
|
||||
eval $(ssh-agent -s)
|
||||
ssh-add ~/.ssh/crumbcore-rz01
|
||||
fi
|
||||
```
|
||||
|
||||
### 5. Test & Disable Password Auth
|
||||
|
||||
```bash
|
||||
# Test key-based login (vom Client):
|
||||
ssh crumbcore-rz01
|
||||
# → Sollte mit Key funktionieren!
|
||||
|
||||
# Wenn erfolgreich: Password Auth deaktivieren
|
||||
# Auf Server als root:
|
||||
vi /etc/ssh/sshd_config
|
||||
# → PasswordAuthentication no (bereits gesetzt!)
|
||||
|
||||
# SSH reload
|
||||
service sshd reload
|
||||
|
||||
# Ab jetzt: NUR noch Keys! 🔐
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Netzwerk ohne DHCP
|
||||
|
||||
### 1. Interface identifizieren
|
||||
|
||||
```bash
|
||||
# Interfaces anzeigen
|
||||
ifconfig
|
||||
|
||||
# Typisch:
|
||||
# em0, igb0, re0 = Ethernet
|
||||
# lo0 = Loopback
|
||||
|
||||
# Welches Interface? Im BIOS/Bootmeldung prüfen!
|
||||
# Oder: dmesg | grep -i ethernet
|
||||
```
|
||||
|
||||
### 2. Statische IP konfigurieren
|
||||
|
||||
**Szenario: RZ Netzwerk**
|
||||
```
|
||||
IP: 192.168.100.50
|
||||
Netmask: 255.255.255.0 (/24)
|
||||
Gateway: 192.168.100.1
|
||||
DNS: 192.168.100.10, 8.8.8.8
|
||||
```
|
||||
|
||||
**`/etc/rc.conf` editieren:**
|
||||
|
||||
```bash
|
||||
# Network configuration
|
||||
ifconfig_em0="inet 192.168.100.50 netmask 255.255.255.0"
|
||||
defaultrouter="192.168.100.1"
|
||||
|
||||
# Hostname
|
||||
hostname="crumbcore-rz01.example.com"
|
||||
|
||||
# IPv6 (falls benötigt)
|
||||
ipv6_activate_all_interfaces="NO"
|
||||
|
||||
# Optional: VLAN (häufig im RZ!)
|
||||
# vlans_em0="100"
|
||||
# ifconfig_em0_100="inet 10.100.1.50/24"
|
||||
```
|
||||
|
||||
**`/etc/resolv.conf` editieren:**
|
||||
|
||||
```bash
|
||||
# DNS Configuration
|
||||
search example.com
|
||||
nameserver 192.168.100.10
|
||||
nameserver 8.8.8.8
|
||||
nameserver 8.8.4.4
|
||||
|
||||
# Timeout (BSI recommendation)
|
||||
options timeout:2 attempts:2
|
||||
```
|
||||
|
||||
### 3. Network Service starten
|
||||
|
||||
```bash
|
||||
# Interface up (sofort aktiv)
|
||||
service netif start em0
|
||||
|
||||
# Routing starten
|
||||
service routing start
|
||||
|
||||
# Test
|
||||
ping -c 3 192.168.100.1 # Gateway
|
||||
ping -c 3 8.8.8.8 # Internet
|
||||
ping -c 3 google.com # DNS resolution
|
||||
|
||||
# Status prüfen
|
||||
ifconfig em0
|
||||
netstat -rn
|
||||
```
|
||||
|
||||
### 4. Firewall Setup (PF)
|
||||
|
||||
**BSI-Anforderung: Host-based Firewall!**
|
||||
|
||||
```bash
|
||||
# PF aktivieren
|
||||
sysrc pf_enable="YES"
|
||||
sysrc pf_rules="/etc/pf.conf"
|
||||
sysrc pflog_enable="YES"
|
||||
```
|
||||
|
||||
**`/etc/pf.conf` (Minimal):**
|
||||
|
||||
```conf
|
||||
# /etc/pf.conf - Crumbcore Production
|
||||
|
||||
# Interfaces
|
||||
ext_if = "em0"
|
||||
int_net = "192.168.100.0/24"
|
||||
|
||||
# Services
|
||||
ssh_port = "22"
|
||||
http_port = "80"
|
||||
https_port = "443"
|
||||
|
||||
# Options
|
||||
set skip on lo0
|
||||
set block-policy drop
|
||||
set loginterface $ext_if
|
||||
|
||||
# Normalization
|
||||
scrub in all
|
||||
|
||||
# Default: Block everything
|
||||
block log all
|
||||
|
||||
# Allow loopback
|
||||
pass quick on lo0
|
||||
|
||||
# Allow SSH from internal network only
|
||||
pass in on $ext_if proto tcp from $int_net to ($ext_if) port $ssh_port keep state
|
||||
|
||||
# Allow outbound (DNS, NTP, Updates)
|
||||
pass out on $ext_if proto tcp to any port { 80, 443 } keep state
|
||||
pass out on $ext_if proto udp to any port { 53, 123 } keep state
|
||||
pass out on $ext_if proto icmp all keep state
|
||||
|
||||
# Allow established connections
|
||||
pass in on $ext_if proto tcp from any to ($ext_if) port { $http_port, $https_port } keep state
|
||||
|
||||
# Rate limiting SSH (anti-brute-force)
|
||||
pass in on $ext_if proto tcp from any to ($ext_if) port $ssh_port \
|
||||
keep state (max-src-conn 5, max-src-conn-rate 3/60, overload <bruteforce> flush global)
|
||||
|
||||
# Block table for brute force
|
||||
table <bruteforce> persist
|
||||
block quick from <bruteforce>
|
||||
```
|
||||
|
||||
**PF starten:**
|
||||
|
||||
```bash
|
||||
# Syntax check
|
||||
pfctl -nf /etc/pf.conf
|
||||
|
||||
# Start PF
|
||||
service pf start
|
||||
service pflog start
|
||||
|
||||
# Status
|
||||
pfctl -si
|
||||
pfctl -sr # Rules
|
||||
pfctl -ss # States
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crumbcore Integration
|
||||
|
||||
### 1. Basis-Pakete installieren
|
||||
|
||||
```bash
|
||||
# Package Manager setup
|
||||
pkg update
|
||||
pkg upgrade
|
||||
|
||||
# Essential tools
|
||||
pkg install -y \
|
||||
bash \
|
||||
git \
|
||||
curl \
|
||||
wget \
|
||||
htop \
|
||||
tmux \
|
||||
vim \
|
||||
rsync \
|
||||
ca_root_nss
|
||||
|
||||
# Python (für Crumbcore)
|
||||
pkg install -y python311 py311-pip py311-virtualenv
|
||||
|
||||
# Docker (optional, für Container)
|
||||
pkg install -y docker docker-compose
|
||||
sysrc docker_enable="YES"
|
||||
service docker start
|
||||
```
|
||||
|
||||
### 2. Crumbcore User Environment
|
||||
|
||||
```bash
|
||||
# Als crumbcore user:
|
||||
su - crumbcore
|
||||
|
||||
# Home Structure
|
||||
mkdir -p ~/crumbcore/{app,data,logs,config}
|
||||
mkdir -p ~/crumbcore/data/{uploads,outputs,vector-db}
|
||||
|
||||
# Python venv
|
||||
cd ~/crumbcore/app
|
||||
python3.11 -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
# Dependencies (Beispiel)
|
||||
pip install --upgrade pip
|
||||
pip install fastapi uvicorn qdrant-client anthropic
|
||||
```
|
||||
|
||||
### 3. Crumbcore Config
|
||||
|
||||
```bash
|
||||
# ~/crumbcore/config/.env
|
||||
cat > ~/crumbcore/config/.env << 'EOF'
|
||||
# Crumbcore Production Config
|
||||
|
||||
# Application
|
||||
CRUMBCORE_ENV=production
|
||||
CRUMBCORE_HOST=0.0.0.0
|
||||
CRUMBCORE_PORT=8000
|
||||
|
||||
# Security
|
||||
CORS_ORIGINS=https://crumbcore.example.com
|
||||
RATE_LIMIT_PER_MINUTE=5
|
||||
MAX_CONTENT_LENGTH=2000
|
||||
|
||||
# Paths
|
||||
DATA_DIR=/home/crumbcore/crumbcore/data
|
||||
UPLOAD_DIR=/home/crumbcore/crumbcore/data/uploads
|
||||
OUTPUT_DIR=/home/crumbcore/crumbcore/data/outputs
|
||||
|
||||
# Qdrant
|
||||
QDRANT_HOST=localhost
|
||||
QDRANT_PORT=6333
|
||||
QDRANT_COLLECTION=crumbcore_docs
|
||||
|
||||
# OpenRouter API
|
||||
OPENROUTER_API_KEY=sk-or-v1-your-key-here
|
||||
|
||||
# Logging (BSI requirement!)
|
||||
LOG_LEVEL=INFO
|
||||
LOG_FILE=/home/crumbcore/crumbcore/logs/crumbcore.log
|
||||
AUDIT_LOG=/home/crumbcore/crumbcore/logs/audit.log
|
||||
EOF
|
||||
|
||||
# Permissions
|
||||
chmod 600 ~/crumbcore/config/.env
|
||||
```
|
||||
|
||||
### 4. Systemd Alternative: rc.d Script
|
||||
|
||||
**FreeBSD benutzt rc.d statt systemd!**
|
||||
|
||||
```bash
|
||||
# /usr/local/etc/rc.d/crumbcore
|
||||
cat > /usr/local/etc/rc.d/crumbcore << 'EOF'
|
||||
#!/bin/sh
|
||||
#
|
||||
# PROVIDE: crumbcore
|
||||
# REQUIRE: DAEMON NETWORKING
|
||||
# KEYWORD: shutdown
|
||||
#
|
||||
# Add to /etc/rc.conf:
|
||||
# crumbcore_enable="YES"
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="crumbcore"
|
||||
rcvar=crumbcore_enable
|
||||
|
||||
load_rc_config $name
|
||||
|
||||
: ${crumbcore_enable:="NO"}
|
||||
: ${crumbcore_user:="crumbcore"}
|
||||
: ${crumbcore_dir:="/home/crumbcore/crumbcore/app"}
|
||||
: ${crumbcore_env:="/home/crumbcore/crumbcore/config/.env"}
|
||||
: ${crumbcore_log:="/home/crumbcore/crumbcore/logs/crumbcore.log"}
|
||||
|
||||
pidfile="/var/run/${name}.pid"
|
||||
command="/usr/sbin/daemon"
|
||||
command_args="-P ${pidfile} -r -o ${crumbcore_log} \
|
||||
/home/crumbcore/crumbcore/app/venv/bin/python \
|
||||
/home/crumbcore/crumbcore/app/main.py"
|
||||
|
||||
start_precmd="${name}_prestart"
|
||||
|
||||
crumbcore_prestart()
|
||||
{
|
||||
# Source environment
|
||||
. ${crumbcore_env}
|
||||
|
||||
# Check directories
|
||||
if [ ! -d "${crumbcore_dir}" ]; then
|
||||
echo "Error: ${crumbcore_dir} does not exist"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Set permissions
|
||||
chown ${crumbcore_user} ${crumbcore_log}
|
||||
}
|
||||
|
||||
run_rc_command "$1"
|
||||
EOF
|
||||
|
||||
# Executable machen
|
||||
chmod +x /usr/local/etc/rc.d/crumbcore
|
||||
|
||||
# In /etc/rc.conf aktivieren
|
||||
sysrc crumbcore_enable="YES"
|
||||
|
||||
# Start
|
||||
service crumbcore start
|
||||
|
||||
# Status
|
||||
service crumbcore status
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Security Checkliste
|
||||
|
||||
### Pre-Deployment
|
||||
|
||||
```bash
|
||||
# [ ] Base System
|
||||
☑ FreeBSD latest stable installiert
|
||||
☑ ZFS mit Encryption aktiv
|
||||
☑ Root Passwort stark (20+ chars)
|
||||
☑ Timezone gesetzt (Europe/Berlin)
|
||||
|
||||
# [ ] Users & Permissions
|
||||
☑ Admin user (wheel group) erstellt
|
||||
☑ Service user (nologin) erstellt
|
||||
☑ /home encrypted (GELI)
|
||||
☑ Permissions: 700 für home dirs
|
||||
|
||||
# [ ] SSH
|
||||
☑ SSH Keys generiert (ED25519)
|
||||
☑ authorized_keys konfiguriert
|
||||
☑ PasswordAuthentication disabled
|
||||
☑ PermitRootLogin no
|
||||
☑ Strong crypto (BSI TR-02102-4)
|
||||
☑ SSH Config getestet
|
||||
|
||||
# [ ] Network
|
||||
☑ Statische IP konfiguriert
|
||||
☑ Gateway erreichbar
|
||||
☑ DNS funktioniert
|
||||
☑ PF Firewall aktiv
|
||||
☑ SSH nur aus int_net erlaubt
|
||||
|
||||
# [ ] Logging
|
||||
☑ syslogd konfiguriert
|
||||
☑ /var/log/auth.log monitoring
|
||||
☑ /var/log/messages monitoring
|
||||
☑ Audit logs aktiviert
|
||||
|
||||
# [ ] Services
|
||||
☑ Unnötige Services disabled
|
||||
☑ sendmail deaktiviert
|
||||
☑ NTP synchronisiert
|
||||
☑ Crumbcore service aktiv
|
||||
```
|
||||
|
||||
### Post-Deployment
|
||||
|
||||
```bash
|
||||
# Täglich:
|
||||
☑ Log review (auth.log, messages)
|
||||
☑ Disk usage check (zpool status)
|
||||
☑ Service health (service crumbcore status)
|
||||
|
||||
# Wöchentlich:
|
||||
☑ Security updates (pkg upgrade)
|
||||
☑ Backup verification
|
||||
☑ User activity audit
|
||||
|
||||
# Monatlich:
|
||||
☑ Key rotation review
|
||||
☑ Firewall rule audit
|
||||
☑ Performance metrics
|
||||
☑ Capacity planning
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛡️ BSI IT-Grundschutz Mapping
|
||||
|
||||
| Baustein | Umsetzung | Status |
|
||||
|----------|-----------|--------|
|
||||
| **SYS.1.3** (Server) | FreeBSD Hardening | ✅ |
|
||||
| **NET.1.2** (Firewall) | PF mit logging | ✅ |
|
||||
| **APP.3.1** (Web) | TLS, HSTS (Nginx) | ⏳ |
|
||||
| **OPS.1.1.5** (Logging) | syslog, audit | ✅ |
|
||||
| **CON.1** (Crypto) | ED25519, AES-256 | ✅ |
|
||||
| **ORP.4** (Identity) | SSH Keys, MFA ready | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 📚 Weiterführende Dokumentation
|
||||
|
||||
### FreeBSD Handbook
|
||||
```bash
|
||||
# Online:
|
||||
https://docs.freebsd.org/en/books/handbook/
|
||||
|
||||
# Lokal (nach pkg install freebsd-doc):
|
||||
man 7 security
|
||||
man 8 geli
|
||||
man 5 pf.conf
|
||||
man 5 rc.conf
|
||||
```
|
||||
|
||||
### Crumbcore Docs
|
||||
```bash
|
||||
# Im Repo:
|
||||
/docs/SECURITY.md
|
||||
/docs/DEPLOYMENT.md
|
||||
/docs/BSI-COMPLIANCE.md
|
||||
```
|
||||
|
||||
### BSI Guidelines
|
||||
```
|
||||
BSI TR-02102-4: Kryptographische Verfahren
|
||||
BSI IT-Grundschutz: SYS.1.3 (Server)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Schlusswort
|
||||
|
||||
> *"Ein naked Setup ist wie ein Baum ohne Blätter - man sieht jede Verzweigung, jeden Ast, jede Entscheidung. In dieser Transparenz liegt die wahre Sicherheit."*
|
||||
>
|
||||
> — Krümeleule, Hüterin des Crumbforests 💚
|
||||
|
||||
### Der Crumbcore-Weg
|
||||
|
||||
1. **Minimalistisch:** Nur was nötig ist
|
||||
2. **Transparent:** Jede Config verstehen
|
||||
3. **Sicher:** Defense in Depth
|
||||
4. **Dokumentiert:** Für die Nachwelt
|
||||
5. **Wartbar:** Auch in 5 Jahren
|
||||
|
||||
**Welcome to the Crumbforest on FreeBSD!** 🌲🐡
|
||||
|
||||
---
|
||||
|
||||
**Version History:**
|
||||
- v1.0 (2024-12-05): Initial release basierend auf RZ-Erfahrung Tag 1-3
|
||||
|
||||
**Maintainer:** Crumbforest Team 🦉🦊🐛
|
||||
**License:** MIT (for Open Source community)
|
||||
**Status:** Production Ready
|
||||
|
||||
---
|
||||
|
||||
*WUHUUUU! Möge dein ZFS immer scrubben, dein SSH niemals bruteforced werden, und deine Bits stets bewacht bleiben!* 🦉💚🛡️
|
||||
638
crumbforest-admin-vektor.md
Normal file
638
crumbforest-admin-vektor.md
Normal file
@@ -0,0 +1,638 @@
|
||||
# 🧭 Crumbforest Admin-Vektor: Der Pfad des Waldhüters
|
||||
|
||||
**Subtitle:** *Die 8 Pfade der System-Meisterschaft*
|
||||
**Version:** 1.0
|
||||
**Audience:** Angehende Systemadministratoren & Waldläufer
|
||||
|
||||
> *"Jeder Meister war einst ein Anfänger. Jeder Baum war einst ein Samen. Der Wald lehrt Geduld."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was ist der Admin-Vektor?
|
||||
|
||||
Der **Admin-Vektor** ist deine Roadmap durch die Welt der Linux-Systemadministration. Er folgt dem **Crumbforest-Prinzip**:
|
||||
|
||||
```
|
||||
Kleine Schritte → Solides Fundament → Meisterschaft
|
||||
```
|
||||
|
||||
Jede **Crumbpage** behandelt ein Kernthema und baut auf dem vorherigen auf. Du lernst nicht nur **WIE** etwas funktioniert, sondern auch **WARUM** - und vor allem: **WANN du es nicht tun solltest**.
|
||||
|
||||
---
|
||||
|
||||
## 🗺️ Die 11 Pfade (Übersicht)
|
||||
|
||||
| Pfad | Thema | Kern-Konzepte | Status |
|
||||
|------|-------|---------------|--------|
|
||||
| **1** | Linux User, Gruppen & Rechte | `#home #whoami #chown #chmod` | ✅ Fertig |
|
||||
| **2** | Hostinformation | `#wo #wer #was #status #logs` | 📝 In Arbeit |
|
||||
| **3** | Bewegen im Wald | `#dateisystem #aufbau #cd #cp #mv` | 📝 In Arbeit |
|
||||
| **4** | **Die Werkzeugkiste** | `#nano #vim #edit #config` | 🆕 Neu |
|
||||
| **5** | **Das Proviant-Lager** | `#apt #install #update #repo` | 🆕 Neu |
|
||||
| **6** | Verbindungen im Wald | `#ip #maske #route #ping #netstat` | 📝 In Arbeit |
|
||||
| **7** | SSH - Der geheime Schlüssel | `#ssh #security #authentication` | 📝 In Arbeit |
|
||||
| **8** | Key Generation für SSH | `#ssh-keygen #ssh-copy-id #ssh-agent` | 📝 In Arbeit |
|
||||
| **9** | **Der Waldboden** | `#mount #disk #df #du #fstab` | 🆕 Neu |
|
||||
| **10** | Dienste & Ports | `#ftp #http #systemctl #firewall` | 📝 In Arbeit |
|
||||
| **11** | Der erste Zugriff | `#planung #testen #fehler #checkliste` | 📝 In Arbeit |
|
||||
| **12** | **Das Gedächtnis** (Git) | `#init #commit #push #gitea` | 🆕 Neu |
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Lernphilosophie
|
||||
|
||||
### Die Krümel-Methode
|
||||
|
||||
```
|
||||
1. Verstehen vor Ausführen
|
||||
├─ Warum existiert dieser Befehl?
|
||||
├─ Welches Problem löst er?
|
||||
└─ Was kann schiefgehen?
|
||||
|
||||
2. Experimentieren in sicherer Umgebung
|
||||
├─ Teste auf Test-Systemen
|
||||
├─ Nutze VMs oder Container
|
||||
└─ Dokumentiere deine Experimente
|
||||
|
||||
3. Fehler sind Lehrmeister
|
||||
├─ Jeder Fehler lehrt etwas
|
||||
├─ Dokumentiere was schiefging
|
||||
└─ Frage erfahrene Meister
|
||||
|
||||
4. Muscle Memory durch Wiederholung
|
||||
├─ Tippe Befehle aus (kein Copy/Paste)
|
||||
├─ Baue eigene Cheatsheets
|
||||
└─ Erkläre anderen was du gelernt hast
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 1: Linux User, Gruppen & Rechte
|
||||
|
||||
**Was du lernst:**
|
||||
- Wer bin ich im System? (`whoami`, `id`)
|
||||
- Wo ist mein Zuhause? (`$HOME`, `pwd`)
|
||||
- Wie funktionieren Berechtigungen? (`chmod`, `chown`, `chgrp`)
|
||||
- Was sind Gruppen und warum sind sie wichtig?
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# Ohne dieses Wissen:
|
||||
$ rm -rf /wichtige/daten/* # 💀 OOPS!
|
||||
|
||||
# Mit Verständnis:
|
||||
$ ls -la /wichtige/daten/ # Erst schauen
|
||||
$ whoami # Wer bin ich?
|
||||
$ groups # Was darf ich?
|
||||
$ rm -rf /path/to/file # Gezielt löschen
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: User & Rechte](crumbpage-01-users-rechte.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 2: Hostinformation
|
||||
|
||||
**Was du lernst:**
|
||||
- Auf welchem System bin ich? (`uname`, `hostnamectl`)
|
||||
- Wer ist noch eingeloggt? (`who`, `w`, `last`)
|
||||
- Was läuft gerade? (`ps`, `top`, `htop`)
|
||||
- Wo finde ich Logs? (`/var/log/`, `journalctl`)
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# Scenario: Server ist langsam
|
||||
$ top # CPU bei 98%? Welcher Prozess?
|
||||
$ w # Sind 50 User eingeloggt?
|
||||
$ df -h # Ist die Disk voll?
|
||||
$ journalctl -xe # Was sagen die Logs?
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: Hostinformation](crumbpage-02-hostinfo.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 3: Bewegen im Wald
|
||||
|
||||
**Was du lernst:**
|
||||
- Wie ist das Dateisystem aufgebaut? (`/`, `/home`, `/etc`, `/var`)
|
||||
- Wie bewege ich mich? (`cd`, `ls`, `pwd`)
|
||||
- Wie kopiere/verschiebe ich Dateien? (`cp`, `mv`, `rm`)
|
||||
- Was ist Midnight Commander? (`mc`)
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# Die Hierarchie verstehen:
|
||||
/
|
||||
├── bin/ # Essenzielle Binaries
|
||||
├── etc/ # Konfigurationsdateien
|
||||
├── home/ # User Home Directories
|
||||
├── var/ # Variable Daten (logs, cache)
|
||||
└── tmp/ # Temporäre Dateien
|
||||
|
||||
# Muscle Memory:
|
||||
cd /var/log && tail -f syslog # In einem Rutsch
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: Dateisystem-Navigation](crumbpage-03-navigation.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 4: Die Werkzeugkiste (Editoren)
|
||||
|
||||
**Was du lernst:**
|
||||
- Wie bearbeite ich Dateien ohne GUI?
|
||||
- `nano`: Der Einsteiger-Freund
|
||||
- `vim`: Der mächtige Zauberstab (Basics)
|
||||
- Wie man Config-Dateien sicher editiert
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# In der Shell gibt es keine Maus!
|
||||
# Du musst Config-Dateien ändern, um Dienste zu konfigurieren.
|
||||
|
||||
$ nano /etc/ssh/sshd_config # Einfach & direkt
|
||||
$ vim /var/www/html/index.php # Mächtig & schnell
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: Editoren](crumbpage-04-editoren.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 5: Das Proviant-Lager (Package Management)
|
||||
|
||||
**Was du lernst:**
|
||||
- Wie installiere ich Software? (`apt`, `yum`)
|
||||
- Wie halte ich mein System aktuell? (`update`, `upgrade`)
|
||||
- Was sind Repositories?
|
||||
- Wie finde ich Pakete? (`search`)
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# Ein nacktes Linux kann wenig.
|
||||
# Du brauchst Werkzeuge (Proviant)!
|
||||
|
||||
$ apt update && apt upgrade # System frisch halten
|
||||
$ apt install nginx # Webserver installieren
|
||||
$ apt search python3 # Python suchen
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: Package Management](crumbpage-05-packages.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 6: Verbindungen im Wald (Netzwerk)
|
||||
|
||||
**Was du lernst:**
|
||||
- Was ist eine IP-Adresse? (IPv4, IPv6)
|
||||
- Was sind Subnetze? (Netzmaske, CIDR)
|
||||
- Wie funktioniert Routing? (Gateway, Routing-Table)
|
||||
- Wie teste ich Verbindungen? (`ping`, `traceroute`, `netstat`)
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# Ohne Netzwerk-Verständnis:
|
||||
"Server nicht erreichbar!" 😱
|
||||
|
||||
# Mit Verständnis:
|
||||
$ ip addr show # IP konfiguriert?
|
||||
$ ip route show # Default Gateway gesetzt?
|
||||
$ ping 8.8.8.8 # Internet erreichbar?
|
||||
$ ping google.com # DNS funktioniert?
|
||||
$ netstat -tulpn # Lauscht der Dienst?
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: Netzwerk-Grundlagen](crumbpage-06-netzwerk.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 7: SSH - Der geheime Schlüssel zur Tür
|
||||
|
||||
**Was du lernst:**
|
||||
- Was ist SSH? (Secure Shell)
|
||||
- Wie verbinde ich mich zu Remote-Hosts?
|
||||
- Password vs. Key Authentication
|
||||
- SSH Config File (`~/.ssh/config`)
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# Unsicher:
|
||||
$ telnet server.com # Klartext! 💀
|
||||
|
||||
# Sicher:
|
||||
$ ssh user@server.com
|
||||
```
|
||||
|
||||
**Die Magie von SSH:**
|
||||
- Verschlüsselte Verbindung
|
||||
- Remote Command Execution
|
||||
- File Transfer (SFTP/SCP)
|
||||
- Tunnel & Port-Forwarding
|
||||
|
||||
**→ [Zur Crumbpage: SSH-Grundlagen](crumbpage-07-ssh-basics.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 8: Key Generation für SSH
|
||||
|
||||
**Was du lernst:**
|
||||
- Wie generiere ich SSH Keys? (`ssh-keygen`)
|
||||
- Wie übertrage ich Public Keys? (`ssh-copy-id`)
|
||||
- Was ist ein SSH Agent? (`ssh-agent`)
|
||||
- Best Practices für Key Management
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# Password-Login: Jedes Mal tippen
|
||||
$ ssh user@server
|
||||
Password: ***********
|
||||
|
||||
# Key-Login: Einmal setup, dann:
|
||||
$ ssh server # Just works ✨
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: SSH-Keys](crumbpage-08-ssh-keys.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 9: Der Waldboden (Storage & Mounts)
|
||||
|
||||
**Was du lernst:**
|
||||
- Wie ist Speicher organisiert? (Partitionen, Filesystems)
|
||||
- Wie binde ich Festplatten ein? (`mount`, `umount`)
|
||||
- Wie mache ich das dauerhaft? (`/etc/fstab`)
|
||||
- Wie prüfe ich Speicherplatz? (`df`, `du`)
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# "No space left on device" ist der Endgegner.
|
||||
|
||||
$ df -h # Wo ist der Platz hin?
|
||||
$ du -sh /var/log/* # Ah, die Logs sind riesig!
|
||||
$ mount /dev/sdb1 /mnt/data # Neue Platte einbinden
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: Storage](crumbpage-09-storage.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 10: Dienste die auf Ports lauschen
|
||||
|
||||
**Was du lernst:**
|
||||
- Was sind Ports? (0-65535)
|
||||
- Well-Known Ports (FTP=21, SSH=22, HTTP=80, HTTPS=443)
|
||||
- Wie starte/stoppe ich Dienste? (`systemctl`)
|
||||
- Was ist das OSI-Modell?
|
||||
- Wie funktionieren Firewalls? (`iptables`, `ufw`)
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# Ein Dienst ist "down":
|
||||
$ systemctl status nginx # Läuft der Dienst?
|
||||
$ netstat -tulpn | grep 80 # Lauscht Port 80?
|
||||
$ journalctl -u nginx # Was sagen die Logs?
|
||||
$ ufw status # Blockiert die Firewall?
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: Services & Ports](crumbpage-10-services-ports.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 11: Der erste Zugriff - Jedes Blatt hat eine Funktion
|
||||
|
||||
**Was du lernst:**
|
||||
- Checkliste vor dem ersten Login
|
||||
- Wie plane ich Änderungen?
|
||||
- Wie teste ich sicher?
|
||||
- Wie dokumentiere ich?
|
||||
- Wie nutze ich Git für Configs?
|
||||
- Wann hole ich mir Hilfe?
|
||||
|
||||
**Die Goldenen Regeln:**
|
||||
|
||||
```
|
||||
1. NIEMALS direkt auf Production arbeiten
|
||||
2. IMMER Backups vor Änderungen
|
||||
3. IMMER Änderungen dokumentieren
|
||||
4. IMMER Step-by-Step vorgehen
|
||||
5. IMMER testen, dann nochmal testen
|
||||
6. Bei Unsicherheit: Erfahrene fragen
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: First Access Protocol](crumbpage-11-first-access.md)**
|
||||
|
||||
---
|
||||
|
||||
## 📚 Pfad 12: Das Gedächtnis des Waldes (Git)
|
||||
|
||||
**Was du lernst:**
|
||||
- Was ist Version Control?
|
||||
- Wie speichere ich Änderungen sicher? (`commit`)
|
||||
- Wie teile ich Code? (`push`, `pull`)
|
||||
- Wie nutze ich Gitea/GitHub?
|
||||
|
||||
**Warum das wichtig ist:**
|
||||
```bash
|
||||
# "Ich habe was geändert und jetzt geht nichts mehr!"
|
||||
# Git ist deine Zeitmaschine (Undo-Button).
|
||||
|
||||
$ git commit -m "funktioniert"
|
||||
# ... Änderungen machen ...
|
||||
# Mist gebaut?
|
||||
$ git restore . # Zurück zum funktionierenden Stand!
|
||||
```
|
||||
|
||||
**→ [Zur Crumbpage: Git Basics](crumbpage-12-git-basics.md)**
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Wie du den Vektor durchläufst
|
||||
|
||||
### Empfohlene Reihenfolge
|
||||
|
||||
```
|
||||
START: Absolute Basics
|
||||
│
|
||||
├─ Pfad 1: User & Rechte ─────────┐
|
||||
│ │ Basic Skills
|
||||
├─ Pfad 2: Hostinformation ────────┤
|
||||
│ │
|
||||
├─ Pfad 3: Navigation ─────────────┘
|
||||
│
|
||||
├─ Pfad 4: Editoren (Werkzeug) ────┐
|
||||
│ │ Tools & Supplies
|
||||
├─ Pfad 5: Packages (Proviant) ────┘
|
||||
│
|
||||
├─ Pfad 6: Netzwerk ───────────────┐
|
||||
│ │ Connectivity
|
||||
├─ Pfad 7: SSH Basics ─────────────┤
|
||||
│ │
|
||||
├─ Pfad 8: SSH Keys ───────────────┘
|
||||
│
|
||||
├─ Pfad 9: Storage (Boden) ────────┐
|
||||
│ │ Advanced Infrastructure
|
||||
├─ Pfad 10: Services & Ports ──────┘
|
||||
│
|
||||
├─ Pfad 11: First Access ──────────→ READY!
|
||||
```
|
||||
|
||||
### Zeitaufwand (circa)
|
||||
|
||||
```
|
||||
Pfad 1-3: ~2-3 Stunden (Basics)
|
||||
Pfad 4-5: ~2 Stunden (Tools)
|
||||
Pfad 6-8: ~3-4 Stunden (Connectivity)
|
||||
Pfad 9-11: ~4-5 Stunden (Advanced)
|
||||
|
||||
Total: ~12-15 Stunden aktives Lernen
|
||||
```
|
||||
|
||||
**Aber:** Die echte Meisterschaft kommt durch:
|
||||
- **Wiederholung** (tägliche Praxis)
|
||||
- **Fehler machen** (und daraus lernen)
|
||||
- **Reale Projekte** (Theorie → Praxis)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Übungsumgebungen
|
||||
|
||||
### Option 1: Virtual Machine (Empfohlen für Anfänger)
|
||||
|
||||
```bash
|
||||
# VirtualBox + Ubuntu
|
||||
1. Download Ubuntu Server ISO
|
||||
2. Erstelle VM (2GB RAM, 20GB Disk)
|
||||
3. Installiere Ubuntu
|
||||
4. Snapshot nach Installation
|
||||
5. Spiele, breche, lerne, restore Snapshot
|
||||
```
|
||||
|
||||
### Option 2: Docker Container
|
||||
|
||||
```bash
|
||||
# Ubuntu Container
|
||||
docker run -it ubuntu:latest bash
|
||||
|
||||
# Alpine Container (minimal)
|
||||
docker run -it alpine:latest sh
|
||||
```
|
||||
|
||||
### Option 3: WSL2 (Windows Subsystem for Linux)
|
||||
|
||||
```powershell
|
||||
# In Windows 10/11
|
||||
wsl --install
|
||||
```
|
||||
|
||||
### Option 4: Raspberry Pi
|
||||
|
||||
```bash
|
||||
# Günstige Hardware zum Lernen
|
||||
# Raspberry Pi OS = Debian-basiert
|
||||
# Perfekt für Experimentieren
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Lern-Ressourcen
|
||||
|
||||
### Innerhalb Crumbforest
|
||||
|
||||
```
|
||||
📁 crumbpages/
|
||||
├── 01-users-rechte.md
|
||||
├── 02-hostinfo.md
|
||||
├── 03-navigation.md
|
||||
├── 04-editoren.md
|
||||
├── 05-packages.md
|
||||
├── 06-netzwerk.md
|
||||
├── 07-ssh-basics.md
|
||||
├── 08-ssh-keys.md
|
||||
├── 09-storage.md
|
||||
├── 10-services-ports.md
|
||||
└── 11-first-access.md
|
||||
```
|
||||
|
||||
### Externe Ressourcen
|
||||
|
||||
```
|
||||
🌐 Online:
|
||||
├── Linux Journey (linuxjourney.com)
|
||||
├── Arch Wiki (wiki.archlinux.org)
|
||||
├── Ubuntu Documentation
|
||||
└── DigitalOcean Tutorials
|
||||
|
||||
📚 Bücher:
|
||||
├── "The Linux Command Line" - William Shotts
|
||||
├── "How Linux Works" - Brian Ward
|
||||
└── "UNIX and Linux System Administration Handbook"
|
||||
|
||||
🎥 Videos:
|
||||
├── NetworkChuck (YouTube)
|
||||
├── Learn Linux TV
|
||||
└── The Linux Foundation
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Die Crystal Owl wacht
|
||||
|
||||
```
|
||||
🦉
|
||||
/💙\
|
||||
/_||_\
|
||||
/ || \
|
||||
|
||||
Die Eule erinnert dich:
|
||||
✓ Backup before action
|
||||
✓ Test before deploy
|
||||
✓ Document what you do
|
||||
✓ Ask when unsure
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🌲 Crumbforest Kodex für Admins
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Der Admin-Kodex
|
||||
|
||||
# 1. Principle of Least Privilege
|
||||
"Gib nur die Rechte, die wirklich nötig sind"
|
||||
|
||||
# 2. Defense in Depth
|
||||
"Eine Firewall ist gut, mehrere Schichten sind besser"
|
||||
|
||||
# 3. Fail Secure
|
||||
"Wenn etwas schiefgeht, sollte das System sicher bleiben"
|
||||
|
||||
# 4. Document Everything
|
||||
"Dein zukünftiges Ich wird es dir danken"
|
||||
|
||||
# 5. Test, Test, Test
|
||||
"In Production ist keine Zeit für Experimente"
|
||||
|
||||
# 6. Automate the Boring Stuff
|
||||
"Was automatisiert werden kann, sollte automatisiert werden"
|
||||
|
||||
# 7. Monitor & Alert
|
||||
"Du kannst nicht fixen, was du nicht siehst"
|
||||
|
||||
# 8. Security First
|
||||
"Convenience ist temporär, eine Breach ist für immer"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🗺️ Nächste Schritte
|
||||
|
||||
### Du bist ganz neu?
|
||||
|
||||
1. ✅ Lies diese Übersicht komplett
|
||||
2. ✅ Richte eine Übungsumgebung ein (VM empfohlen)
|
||||
3. ✅ Starte mit **Pfad 1: User & Rechte**
|
||||
4. ✅ Arbeite dich Schritt für Schritt durch
|
||||
|
||||
### Du hast schon Erfahrung?
|
||||
|
||||
1. ✅ Überspringe bekannte Pfade
|
||||
2. ✅ Fokussiere auf Wissenslücken
|
||||
3. ✅ Nutze die Crumbpages als Referenz
|
||||
4. ✅ Teile dein Wissen mit anderen
|
||||
|
||||
### Du möchtest beitragen?
|
||||
|
||||
1. ✅ Finde Fehler oder Unklarheiten
|
||||
2. ✅ Schlage Verbesserungen vor
|
||||
3. ✅ Teile deine eigenen Erfahrungen
|
||||
4. ✅ Erstelle Issues im Crumbforest Repo
|
||||
|
||||
---
|
||||
|
||||
## 📊 Fortschritts-Tracker
|
||||
|
||||
```markdown
|
||||
### Mein Admin-Vektor Fortschritt
|
||||
|
||||
- [ ] Pfad 1: User & Rechte (0%)
|
||||
- [ ] Pfad 2: Hostinformation (0%)
|
||||
- [ ] Pfad 3: Navigation (0%)
|
||||
- [ ] Pfad 4: Editoren (0%)
|
||||
- [ ] Pfad 5: Packages (0%)
|
||||
- [ ] Pfad 6: Netzwerk (0%)
|
||||
- [ ] Pfad 7: SSH Basics (0%)
|
||||
- [ ] Pfad 8: SSH Keys (0%)
|
||||
- [ ] Pfad 9: Storage (0%)
|
||||
- [ ] Pfad 10: Services & Ports (0%)
|
||||
- [ ] Pfad 11: First Access (0%)
|
||||
|
||||
**Gesamtfortschritt:** 0/11 Pfade
|
||||
**Startdatum:** YYYY-MM-DD
|
||||
**Geschätzte Completion:** YYYY-MM-DD
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💬 Community & Support
|
||||
|
||||
### Hilfe bekommen
|
||||
|
||||
```
|
||||
🦉 Crystal Owl: Grundsätzliche Fragen
|
||||
🧑💻 Meister: Technische Tiefe
|
||||
🌲 Community: Erfahrungsaustausch
|
||||
📝 Documentation: Referenz-Nachschlag
|
||||
```
|
||||
|
||||
### Hilfe geben
|
||||
|
||||
```
|
||||
💡 Ideen teilen
|
||||
🐛 Bugs melden
|
||||
📖 Dokumentation verbessern
|
||||
🎓 Andere unterrichten
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Abschluss-Worte
|
||||
|
||||
> *"Der längste Weg beginnt mit einem einzigen Schritt."*
|
||||
> — Chinesisches Sprichwort
|
||||
|
||||
**Du musst nicht alles auf einmal können.**
|
||||
|
||||
Systemadministration ist ein **Handwerk**, das Zeit und Übung braucht. Die 8 Pfade sind nicht in Stein gemeißelt - sie sind ein Leitfaden.
|
||||
|
||||
**Wichtig ist:**
|
||||
- 🌱 Konstantes Lernen
|
||||
- 🔨 Regelmäßiges Üben
|
||||
- 🤝 Fragen stellen
|
||||
- 📝 Dokumentieren
|
||||
- 💪 Durchhalten
|
||||
|
||||
**Der Wald erwartet dich.**
|
||||
|
||||
---
|
||||
|
||||
## 📌 Quick Links
|
||||
|
||||
| Link | Beschreibung |
|
||||
|------|--------------|
|
||||
| [Zurück zur Hauptseite](README.md) | Crumbforest Übersicht |
|
||||
| [Philosophie](crumbforest-introduction-warum-und-wie.md) | Warum & Wie |
|
||||
| [Pfad 1 Start](crumbpage-01-users-rechte.md) | Loslegen |
|
||||
| [Community Discord](#) | Fragen & Austausch |
|
||||
| [GitHub Issues](#) | Bugs & Features |
|
||||
|
||||
---
|
||||
|
||||
**Version:** 1.0
|
||||
**Letzte Änderung:** 2024-12-06
|
||||
**Maintainer:** Crumbforest Core Team
|
||||
**Lizenz:** CC BY-SA 4.0
|
||||
|
||||
---
|
||||
|
||||
*🦉 Die Crystal Owl wünscht dir eine gute Reise durch den Wald. Möge dein Terminal immer responsive sein und deine SSH-Keys niemals kompromittiert werden.* 💙✨
|
||||
1500
crumbforest-introduction-warum-und-wie.md
Normal file
1500
crumbforest-introduction-warum-und-wie.md
Normal file
File diff suppressed because it is too large
Load Diff
1050
crumbpage-01-users-rechte.md
Normal file
1050
crumbpage-01-users-rechte.md
Normal file
File diff suppressed because it is too large
Load Diff
131
crumbpage-02-hostinfo.md
Normal file
131
crumbpage-02-hostinfo.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# 🧭 Crumbpage 02: Hostinformation
|
||||
|
||||
**Subtitle:** *Wo bin ich und was passiert hier?*
|
||||
**Pfad:** 2 von 11
|
||||
**Schwierigkeit:** ⭐ (1/5)
|
||||
**Zeit:** ~1 Stunde
|
||||
**Voraussetzungen:** Pfad 1 (User & Rechte)
|
||||
|
||||
> *"Ein Waldläufer muss wissen, ob er im Eichenwald oder im Sumpf steht."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ System-Identifikation (Hostname, OS)
|
||||
✓ Wer ist noch hier? (User Sessions)
|
||||
✓ System-Ressourcen (CPU, RAM, Disk)
|
||||
✓ Logs lesen (Der Puls des Waldes)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Herausfinden, welche Linux-Version läuft
|
||||
- [ ] Sehen, wer außer dir eingeloggt ist
|
||||
- [ ] Prüfen, warum der Server langsam ist (htop)
|
||||
- [ ] Die System-Logs finden und lesen
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: Der Host
|
||||
|
||||
Ein "Host" ist der Computer, auf dem du bist. Er hat einen Namen (**Hostname**) und ein Betriebssystem (**OS**).
|
||||
|
||||
### Konzept 2: Ressourcen
|
||||
|
||||
Wie ein Rucksack hat ein Server begrenzten Platz:
|
||||
- **CPU:** Rechenkraft (Denkgeschwindigkeit)
|
||||
- **RAM:** Arbeitsspeicher (Kurzzeitgedächtnis)
|
||||
- **Disk:** Festplatte (Langzeitgedächtnis)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Befehl 1: `hostnamectl` (Wer bin ich?)
|
||||
|
||||
```bash
|
||||
$ hostnamectl
|
||||
# Zeigt Hostname, Kernel, Architecture, OS
|
||||
```
|
||||
|
||||
### Befehl 2: `w` (Wer ist da?)
|
||||
|
||||
```bash
|
||||
$ w
|
||||
# Zeigt eingeloggte User und was sie tun.
|
||||
# "load average": Wie gestresst ist das System? (0.00 = entspannt)
|
||||
```
|
||||
|
||||
### Befehl 3: `htop` (Cockpit)
|
||||
|
||||
```bash
|
||||
$ htop
|
||||
# Interaktive Übersicht über CPU, RAM und Prozesse.
|
||||
# Beenden mit F10 oder q
|
||||
```
|
||||
|
||||
### Befehl 4: `journalctl` (Das Tagebuch)
|
||||
|
||||
```bash
|
||||
$ journalctl -xe
|
||||
# Zeigt die neuesten System-Meldungen (Errors, Warnings).
|
||||
# -x = Erklärungen, -e = Ende (neueste zuerst)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# 1. Erst schauen, dann handeln
|
||||
# Bevor du etwas neu startest, schau in die Logs!
|
||||
|
||||
# 2. Load Average verstehen
|
||||
# Load < Anzahl CPU Cores = Alles gut.
|
||||
# Load > Anzahl CPU Cores = Stau!
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# 1. Logs ignorieren
|
||||
# "Es geht nicht" ist keine Fehlermeldung. Logs sind die Wahrheit.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: System-Check
|
||||
|
||||
1. Wie heißt dein Host?
|
||||
2. Welchen Kernel nutzt du? (`uname -r`)
|
||||
3. Wie lange läuft das System schon? (`uptime`)
|
||||
|
||||
### Übung 2: Stress-Test (Simuliert)
|
||||
|
||||
1. Öffne `htop`.
|
||||
2. Beobachte CPU und RAM.
|
||||
3. Öffne ein zweites Terminal und führe `yes > /dev/null` aus (Vorsicht: CPU geht hoch!).
|
||||
4. Beende `yes` mit STRG+C.
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Das System spricht ständig mit dir. Du musst nur lernen, ihm zuzuhören (Logs)."*
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: User & Rechte](crumbpage-01-users-rechte.md) | [Weiter: Navigation →](crumbpage-03-navigation.md)
|
||||
142
crumbpage-03-navigation.md
Normal file
142
crumbpage-03-navigation.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# 🧭 Crumbpage 03: Bewegen im Wald
|
||||
|
||||
**Subtitle:** *Den Pfad finden - Navigation im Dateisystem*
|
||||
**Pfad:** 3 von 11
|
||||
**Schwierigkeit:** ⭐ (1/5)
|
||||
**Zeit:** ~1.5 Stunden
|
||||
**Voraussetzungen:** Pfad 2 (Hostinfo)
|
||||
|
||||
> *"Wer nicht weiß, wo er ist, kann auch nicht ankommen."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Der Verzeichnisbaum (Root /)
|
||||
✓ Absolute vs. Relative Pfade
|
||||
✓ Navigieren (cd, pwd, ls)
|
||||
✓ Dateien manipulieren (cp, mv, rm, mkdir)
|
||||
✓ Midnight Commander (mc)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Dich blind im Dateisystem bewegen
|
||||
- [ ] Dateien kopieren und verschieben
|
||||
- [ ] Verzeichnisse erstellen und löschen
|
||||
- [ ] Den Unterschied zwischen `/etc` und `/var` erklären
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: Der Baum (Tree)
|
||||
|
||||
Alles beginnt bei der Wurzel (`/`).
|
||||
Es gibt keine Laufwerksbuchstaben.
|
||||
|
||||
Wichtige Äste:
|
||||
- `/home`: Hier wohnen die User.
|
||||
- `/etc`: Hier liegen Konfigurationen (Settings).
|
||||
- `/var`: Hier liegen variable Daten (Logs, Webseiten).
|
||||
- `/bin`: Hier liegen Programme (Binaries).
|
||||
- `/tmp`: Hier liegt Müll (wird beim Neustart gelöscht).
|
||||
|
||||
### Konzept 2: Pfade
|
||||
|
||||
- **Absolut:** Beginnt immer mit `/` (z.B. `/home/bmt/docs`) - Wie GPS-Koordinaten.
|
||||
- **Relativ:** Beginnt ohne `/` (z.B. `docs/`) - "Von hier aus links".
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Befehl 1: `cd` (Change Directory)
|
||||
|
||||
```bash
|
||||
$ cd /var/log # Gehe zu absolutem Pfad
|
||||
$ cd .. # Gehe eine Ebene hoch (Eltern-Ordner)
|
||||
$ cd ~ # Gehe nach Hause
|
||||
$ cd - # Gehe zum VORHERIGEN Ordner zurück (sehr nützlich!)
|
||||
```
|
||||
|
||||
### Befehl 2: `cp` (Copy)
|
||||
|
||||
```bash
|
||||
$ cp datei.txt kopie.txt
|
||||
$ cp -r ordner/ kopie_ordner/ # -r für Rekursiv (Ordner)
|
||||
```
|
||||
|
||||
### Befehl 3: `mv` (Move & Rename)
|
||||
|
||||
```bash
|
||||
$ mv datei.txt ordner/ # Verschieben
|
||||
$ mv alt.txt neu.txt # Umbenennen! (Linux hat keinen rename Befehl)
|
||||
```
|
||||
|
||||
### Befehl 4: `rm` (Remove)
|
||||
|
||||
```bash
|
||||
$ rm datei.txt
|
||||
$ rm -r ordner/ # Ordner löschen
|
||||
# ⚠️ VORSICHT: Gelöscht ist gelöscht. Kein Papierkorb!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# 1. Tab-Completion nutzen!
|
||||
# Tippe `cd /v` und drücke TAB -> wird zu `cd /var/`
|
||||
# Spart Zeit und verhindert Tippfehler.
|
||||
|
||||
# 2. `ls -l` nutzen
|
||||
# Schau dir an, was du tust.
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# 1. `rm -rf /`
|
||||
# Der verbotene Zauberspruch. Löscht alles.
|
||||
|
||||
# 2. Leerzeichen in Dateinamen
|
||||
# "meine datei.txt" ist böse. Nutze "meine_datei.txt".
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: Pfadfinder
|
||||
|
||||
1. Gehe nach `/etc`.
|
||||
2. Gehe zurück nach Hause (`cd ~`).
|
||||
3. Gehe zurück zum vorherigen Ort (`cd -`).
|
||||
|
||||
### Übung 2: Baumeister
|
||||
|
||||
1. Erstelle einen Ordner `test` (`mkdir test`).
|
||||
2. Gehe hinein.
|
||||
3. Erstelle eine leere Datei `touch blatt.txt`.
|
||||
4. Benenne sie um in `stein.txt`.
|
||||
5. Lösche den ganzen Ordner (erst rausgehen!).
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Ein aufgeräumtes Dateisystem ist ein aufgeräumter Geist. Und Tab-Completion ist dein bester Freund."*
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: Hostinfo](crumbpage-02-hostinfo.md) | [Weiter: Editoren →](crumbpage-04-editoren.md)
|
||||
140
crumbpage-04-editoren.md
Normal file
140
crumbpage-04-editoren.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# 🧭 Crumbpage 04: Die Werkzeugkiste (Editoren)
|
||||
|
||||
**Subtitle:** *Ohne Werkzeug kein Haus - ohne Editor keine Config*
|
||||
**Pfad:** 4 von 11
|
||||
**Schwierigkeit:** ⭐⭐ (2/5)
|
||||
**Zeit:** ~1 Stunde
|
||||
**Voraussetzungen:** Pfad 3 (Navigation)
|
||||
|
||||
> *"Ein guter Handwerker kennt sein Werkzeug. Ein guter Admin kennt seinen Editor."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Warum wir Text-Editoren in der Shell brauchen
|
||||
✓ nano: Der schnelle Einstieg
|
||||
✓ vim: Der mächtige Klassiker (Basics)
|
||||
✓ Config-Dateien sicher bearbeiten
|
||||
✓ Sudo und Editoren
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Eine Datei mit `nano` öffnen, ändern und speichern
|
||||
- [ ] Eine Datei mit `vim` öffnen, ändern und speichern (ohne Panic!)
|
||||
- [ ] Verstehen, wann man `sudo` braucht
|
||||
- [ ] Syntax-Highlighting aktivieren
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: CLI vs. GUI Editoren
|
||||
|
||||
**Was ist das?**
|
||||
In der grafischen Welt (GUI) nutzen wir Notepad, Word oder VS Code. Im Wald (Server/Shell) haben wir oft keine Grafik. Wir müssen direkt im Terminal Text bearbeiten.
|
||||
|
||||
**Warum ist das wichtig?**
|
||||
99% aller Linux-Konfigurationen sind Textdateien (`.conf`, `.cfg`, `.ini`). Wer sie nicht ändern kann, kann nichts konfigurieren.
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Werkzeug 1: `nano` (Der Einsteiger-Freund)
|
||||
|
||||
`nano` ist einfach, hat Menüs am unteren Rand und verhält sich "normal".
|
||||
|
||||
```bash
|
||||
# Datei öffnen (oder erstellen)
|
||||
$ nano datei.txt
|
||||
|
||||
# Wichtige Shortcuts (siehe unten im Screen):
|
||||
# ^ = STRG (Control)
|
||||
^O = Speichern (Write Out) -> Enter drücken
|
||||
^X = Beenden (Exit)
|
||||
^K = Zeile ausschneiden (Cut)
|
||||
^U = Zeile einfügen (Uncut)
|
||||
```
|
||||
|
||||
### Werkzeug 2: `vim` (Der Zauberstab)
|
||||
|
||||
`vim` (oder `vi`) ist auf JEDEM Unix-System installiert. Es ist modal: Es gibt einen Modus zum Befehle geben und einen zum Schreiben.
|
||||
|
||||
```bash
|
||||
# Datei öffnen
|
||||
$ vim datei.txt
|
||||
|
||||
# Die 3 Modi:
|
||||
1. Normal Mode (Start): Navigieren, Löschen, Kopieren
|
||||
2. Insert Mode (i drücken): Text schreiben
|
||||
3. Command Mode (: drücken): Speichern, Beenden
|
||||
|
||||
# Survival Guide (Wie komme ich hier raus?!):
|
||||
1. Drücke ESC (mehrmals, um sicher zu sein)
|
||||
2. Tippe :q! (Beenden ohne Speichern)
|
||||
3. Tippe :wq (Speichern und Beenden)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# 1. Immer Backup vor Edit
|
||||
$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
|
||||
$ sudo nano /etc/ssh/sshd_config
|
||||
|
||||
# 2. Syntax Check nach Edit (wenn möglich)
|
||||
$ sudo nginx -t # Testet Nginx Config
|
||||
$ sudo sshd -t # Testet SSH Config
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# 1. Niemals Word/RichText nutzen
|
||||
# Configs müssen "Plain Text" sein!
|
||||
|
||||
# 2. Nicht als root arbeiten, wenn nicht nötig
|
||||
$ nano meine_notizen.txt # ✅ OK
|
||||
$ sudo nano meine_notizen.txt # ❌ Falsche Rechte später!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: Nano-Meister
|
||||
|
||||
1. Erstelle `test.txt` mit `nano`.
|
||||
2. Schreibe "Hallo Wald".
|
||||
3. Speichere und beende.
|
||||
4. Öffne sie wieder und füge eine Zeile hinzu.
|
||||
|
||||
### Übung 2: Vim-Survivor
|
||||
|
||||
1. Öffne `vim_test.txt` mit `vim`.
|
||||
2. Drücke `i` (Insert Mode).
|
||||
3. Schreibe "Ich habe vim überlebt".
|
||||
4. Drücke `ESC`.
|
||||
5. Tippe `:wq` und Enter.
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Fürchte dich nicht vor dem schwarzen Bildschirm. Er ist nur ein leeres Blatt Papier, das auf deine Befehle wartet."*
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: Navigation](crumbpage-03-navigation.md) | [Weiter: Packages →](crumbpage-05-packages.md)
|
||||
137
crumbpage-05-packages.md
Normal file
137
crumbpage-05-packages.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# 🧭 Crumbpage 05: Das Proviant-Lager (Package Management)
|
||||
|
||||
**Subtitle:** *Wie man den Rucksack füllt - Software installieren*
|
||||
**Pfad:** 5 von 11
|
||||
**Schwierigkeit:** ⭐⭐ (2/5)
|
||||
**Zeit:** ~1 Stunde
|
||||
**Voraussetzungen:** Pfad 4 (Editoren)
|
||||
|
||||
> *"Ein leerer Rucksack nützt nichts. Wähle deinen Proviant weise."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Was ist ein Package Manager?
|
||||
✓ Repositories (Die Quellen)
|
||||
✓ apt (Debian/Ubuntu) Basics
|
||||
✓ System aktualisieren (Update & Upgrade)
|
||||
✓ Software suchen und löschen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Dein System auf den neuesten Stand bringen
|
||||
- [ ] Neue Software installieren (z.B. `htop`, `git`)
|
||||
- [ ] Software wieder entfernen
|
||||
- [ ] Verstehen, warum man nicht einfach `.exe` Dateien herunterlädt
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: Der App Store des Waldes
|
||||
|
||||
Linux hat "App Stores" schon lange vor Smartphones erfunden. Sie heißen **Package Manager**.
|
||||
Anstatt im Internet nach Installern zu suchen, fragen wir das System: "Gib mir Firefox".
|
||||
|
||||
**Vorteile:**
|
||||
- **Sicher:** Software kommt aus geprüften Quellen.
|
||||
- **Einfach:** Ein Befehl installiert alles.
|
||||
- **Updates:** Ein Befehl aktualisiert ALLES (System + Apps).
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle (Debian/Ubuntu)
|
||||
|
||||
### Befehl 1: `apt update` (Katalog aktualisieren)
|
||||
|
||||
Bevor wir etwas bestellen, müssen wir wissen, was es gibt.
|
||||
|
||||
```bash
|
||||
$ sudo apt update
|
||||
# Lädt die neuesten Paket-Listen herunter.
|
||||
# Installiert noch NICHTS!
|
||||
```
|
||||
|
||||
### Befehl 2: `apt upgrade` (Alles aktualisieren)
|
||||
|
||||
```bash
|
||||
$ sudo apt upgrade
|
||||
# Installiert verfügbare Updates für alle Pakete.
|
||||
# Mach das regelmäßig!
|
||||
```
|
||||
|
||||
### Befehl 3: `apt install` (Proviant holen)
|
||||
|
||||
```bash
|
||||
$ sudo apt install htop
|
||||
# Installiert das Tool "htop" und alle Abhängigkeiten.
|
||||
```
|
||||
|
||||
### Befehl 4: `apt remove` (Ballast abwerfen)
|
||||
|
||||
```bash
|
||||
$ sudo apt remove htop
|
||||
# Entfernt das Programm, behält aber Configs.
|
||||
|
||||
$ sudo apt purge htop
|
||||
# Entfernt das Programm UND alle Configs (Tabula Rasa).
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# 1. Update vor Install
|
||||
$ sudo apt update && sudo apt install git
|
||||
|
||||
# 2. Aufräumen
|
||||
$ sudo apt autoremove
|
||||
# Entfernt Pakete, die nicht mehr gebraucht werden (Dependencies).
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# 1. Fremde .deb Dateien blind installieren
|
||||
# Nur wenn du der Quelle 100% vertraust!
|
||||
|
||||
# 2. Installation abbrechen
|
||||
# Drücke nicht Ctrl+C während apt arbeitet. Das kann die Datenbank beschädigen (Lock file).
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: System-Check
|
||||
|
||||
1. Führe `sudo apt update` aus.
|
||||
2. Schau, wie viele Pakete aktualisiert werden können.
|
||||
3. Führe `sudo apt upgrade` aus (wenn du darfst/willst).
|
||||
|
||||
### Übung 2: Tool-Time
|
||||
|
||||
1. Installiere `neofetch`: `sudo apt install neofetch`
|
||||
2. Führe es aus: `neofetch` (Cooler Output!)
|
||||
3. Entferne es wieder: `sudo apt remove neofetch`
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Frischer Proviant hält gesund. Veraltete Software ist wie schimmeliges Brot - es macht den Bauch (das System) krank."*
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: Editoren](crumbpage-04-editoren.md) | [Weiter: Netzwerk →](crumbpage-06-netzwerk.md)
|
||||
137
crumbpage-06-netzwerk.md
Normal file
137
crumbpage-06-netzwerk.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# 🧭 Crumbpage 06: Verbindungen im Wald (Netzwerk)
|
||||
|
||||
**Subtitle:** *Wie die Bäume miteinander sprechen*
|
||||
**Pfad:** 6 von 11
|
||||
**Schwierigkeit:** ⭐⭐⭐ (3/5)
|
||||
**Zeit:** ~1.5 Stunden
|
||||
**Voraussetzungen:** Pfad 2 (Hostinfo)
|
||||
|
||||
> *"Ein Baum allein ist kein Wald. Ein Server ohne Netzwerk ist nur ein teurer Taschenrechner."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ IP-Adressen (Die Hausnummern)
|
||||
✓ Subnetze & Masken (Die Nachbarschaft)
|
||||
✓ Routing & Gateway (Der Weg nach draußen)
|
||||
✓ DNS (Das Telefonbuch)
|
||||
✓ Ping & Traceroute (Die Echolote)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Deine eigene IP-Adresse herausfinden
|
||||
- [ ] Prüfen, ob du Internet hast
|
||||
- [ ] Verstehen, warum `127.0.0.1` dein bester Freund ist
|
||||
- [ ] Netzwerk-Probleme eingrenzen (Ist es DNS? Es ist immer DNS.)
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: IP-Adresse & Subnetz
|
||||
|
||||
Jeder Host braucht eine Adresse.
|
||||
- **IPv4:** `192.168.1.10` (Alt, aber überall)
|
||||
- **IPv6:** `2001:0db8:...` (Neu, riesig)
|
||||
|
||||
Die **Subnetzmaske** (z.B. `/24` oder `255.255.255.0`) bestimmt, wer direkt erreichbar ist (Nachbarn) und wer über den Router muss.
|
||||
|
||||
### Konzept 2: Ports
|
||||
|
||||
Wenn die IP das Haus ist, sind Ports die Türen.
|
||||
- Webserver wohnt in Tür 80.
|
||||
- SSH wohnt in Tür 22.
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Befehl 1: `ip` (Das Schweizer Taschenmesser)
|
||||
|
||||
Vergiss `ifconfig` (das ist alt). Nutze `ip`!
|
||||
|
||||
```bash
|
||||
# Adressen anzeigen
|
||||
$ ip a
|
||||
# oder: ip addr show
|
||||
|
||||
# Routing Tabelle anzeigen
|
||||
$ ip r
|
||||
# oder: ip route show
|
||||
```
|
||||
|
||||
### Befehl 2: `ping` (Hallo?)
|
||||
|
||||
Prüfen, ob jemand da ist.
|
||||
|
||||
```bash
|
||||
$ ping 8.8.8.8
|
||||
# Sendet Pakete an Google DNS.
|
||||
# Abbruch mit STRG+C
|
||||
```
|
||||
|
||||
### Befehl 3: `ss` oder `netstat` (Wer lauscht?)
|
||||
|
||||
```bash
|
||||
$ ss -tulpn
|
||||
# Zeigt alle offenen Ports an.
|
||||
# t = tcp, u = udp, l = listening, p = process, n = numeric
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# 1. Kenne deine IP
|
||||
$ ip a | grep inet
|
||||
|
||||
# 2. Prüfe DNS
|
||||
$ ping google.com
|
||||
# Wenn IP geht (8.8.8.8), aber Name nicht -> DNS Problem!
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# 1. Firewall blind ausschalten
|
||||
# Nur zum kurzen Testen, dann sofort wieder an!
|
||||
|
||||
# 2. Öffentliche IPs auf internen Interfaces nutzen
|
||||
# Bleib in den privaten Bereichen (192.168.x.x, 10.x.x.x, 172.16.x.x)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: Who am I?
|
||||
|
||||
1. Finde deine IP-Adresse heraus.
|
||||
2. Finde dein Default Gateway heraus (`ip r`).
|
||||
|
||||
### Übung 2: Der Weg des Pakets
|
||||
|
||||
1. `ping 8.8.8.8` (Geht es?)
|
||||
2. `traceroute 8.8.8.8` (Welchen Weg nimmt es?)
|
||||
*Hinweis: Ggf. `sudo apt install traceroute` nötig*
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Es ist nicht immer das Netzwerk. Aber wenn es das Netzwerk ist, ist es meistens DNS."*
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: Packages](crumbpage-05-packages.md) | [Weiter: SSH Basics →](crumbpage-07-ssh-basics.md)
|
||||
129
crumbpage-07-ssh-basics.md
Normal file
129
crumbpage-07-ssh-basics.md
Normal file
@@ -0,0 +1,129 @@
|
||||
# 🧭 Crumbpage 07: SSH - Der geheime Schlüssel zur Tür
|
||||
|
||||
**Subtitle:** *Sicherer Zugang aus der Ferne*
|
||||
**Pfad:** 7 von 11
|
||||
**Schwierigkeit:** ⭐⭐⭐ (3/5)
|
||||
**Zeit:** ~2 Stunden
|
||||
**Voraussetzungen:** Pfad 6 (Netzwerk)
|
||||
|
||||
> *"Die Tür zum Wald sollte stabil sein. SSH ist der Tresor unter den Protokollen."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Was ist SSH? (Secure Shell)
|
||||
✓ Client & Server (sshd)
|
||||
✓ Sicher verbinden
|
||||
✓ Fingerprints (Kennst du diesen Server?)
|
||||
✓ SCP (Dateien kopieren)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Dich mit einem entfernten Server verbinden
|
||||
- [ ] Verstehen, was beim ersten Verbinden passiert ("Unknown host")
|
||||
- [ ] Dateien sicher zwischen PC und Server kopieren
|
||||
- [ ] Den SSH-Dienst neu starten
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: Der Tunnel
|
||||
|
||||
Früher nutzte man Telnet. Das war wie Postkarten schreiben - jeder konnte mitlesen.
|
||||
SSH ist wie ein gepanzerter Tunnel. Alles darin ist verschlüsselt.
|
||||
|
||||
### Konzept 2: Host Identification
|
||||
|
||||
Wenn du dich verbindest, zeigt der Server seinen Ausweis (**Fingerprint**).
|
||||
Dein Client merkt sich diesen in `~/.ssh/known_hosts`.
|
||||
Ändert sich der Ausweis plötzlich, schlägt SSH Alarm (Man-in-the-Middle Attacke?).
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Befehl 1: `ssh` (Verbinden)
|
||||
|
||||
```bash
|
||||
$ ssh user@192.168.1.50
|
||||
# Verbindet als 'user' auf IP '192.168.1.50'
|
||||
```
|
||||
|
||||
### Befehl 2: `scp` (Secure Copy)
|
||||
|
||||
Wie `cp`, aber übers Netz.
|
||||
|
||||
```bash
|
||||
# Upload (Lokal -> Server)
|
||||
$ scp datei.txt user@server:/home/user/
|
||||
|
||||
# Download (Server -> Lokal)
|
||||
$ scp user@server:/var/log/syslog ./mein_log.txt
|
||||
```
|
||||
|
||||
### Befehl 3: `systemctl status ssh` (Server prüfen)
|
||||
|
||||
Läuft der Türsteher?
|
||||
|
||||
```bash
|
||||
$ sudo systemctl status ssh
|
||||
# oder sshd
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# 1. Fingerprints prüfen
|
||||
# Beim ersten Mal genau hinschauen (wenn möglich).
|
||||
|
||||
# 2. Session beenden
|
||||
# Tippe `exit` oder drücke STRG+D, wenn du fertig bist.
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# 1. Root Login erlauben
|
||||
# In /etc/ssh/sshd_config sollte "PermitRootLogin no" stehen.
|
||||
# Logge dich als normaler User ein und nutze sudo.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: Der Sprung
|
||||
|
||||
1. Wenn du eine VM oder einen Pi hast: Verbinde dich per SSH.
|
||||
2. Schau dir die Warnung beim ersten Mal an.
|
||||
3. Tippe `yes`.
|
||||
4. Schau in deine `~/.ssh/known_hosts` (lokal). Da ist er jetzt!
|
||||
|
||||
### Übung 2: Der Transport
|
||||
|
||||
1. Erstelle lokal eine Datei `geschenk.txt`.
|
||||
2. Kopiere sie per `scp` auf den Server.
|
||||
3. Prüfe auf dem Server, ob sie angekommen ist.
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Vertrauen ist gut, Verschlüsselung ist besser. SSH ist dein Sicherheitsgurt im Internet."*
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: Netzwerk](crumbpage-06-netzwerk.md) | [Weiter: SSH Keys →](crumbpage-08-ssh-keys.md)
|
||||
123
crumbpage-08-ssh-keys.md
Normal file
123
crumbpage-08-ssh-keys.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# 🧭 Crumbpage 08: Key Generation für SSH
|
||||
|
||||
**Subtitle:** *Schlüssel statt Passwörter - Komfort trifft Sicherheit*
|
||||
**Pfad:** 8 von 11
|
||||
**Schwierigkeit:** ⭐⭐⭐⭐ (4/5)
|
||||
**Zeit:** ~2 Stunden
|
||||
**Voraussetzungen:** Pfad 7 (SSH Basics)
|
||||
|
||||
> *"Ein Passwort kann erraten werden. Ein kryptographischer Schlüssel ist wie ein DNA-Test."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Asymmetrische Verschlüsselung (Public/Private Key)
|
||||
✓ Schlüsselpaar generieren (ssh-keygen)
|
||||
✓ Schlüssel auf Server kopieren (ssh-copy-id)
|
||||
✓ Login ohne Passwort
|
||||
✓ Passphrase für den Key
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Ein SSH-Key-Pair erstellen
|
||||
- [ ] Den Public Key auf einen Server installieren
|
||||
- [ ] Dich ohne Passwort einloggen
|
||||
- [ ] Verstehen, warum du deinen Private Key NIEMALS teilen darfst
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: Das Schlüssel-Paar
|
||||
|
||||
Stell dir vor, du hast ein Schloss und einen Schlüssel.
|
||||
- **Public Key (Schloss):** Kannst du jedem geben. "Hier, bau das an deine Tür."
|
||||
- **Private Key (Schlüssel):** Behältst du. Nur du kannst Türen öffnen, an denen dein Schloss hängt.
|
||||
|
||||
### Konzept 2: Passphrase
|
||||
|
||||
Dein Private Key ist eine Datei. Wenn jemand die klaut, ist er du.
|
||||
Deshalb schützen wir die Datei mit einem Passwort (Passphrase).
|
||||
Doppelte Sicherheit: Du brauchst die Datei (Besitz) UND das Passwort (Wissen).
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Befehl 1: `ssh-keygen` (Schmiede)
|
||||
|
||||
```bash
|
||||
$ ssh-keygen -t ed25519 -C "deine@email.com"
|
||||
# -t ed25519: Moderner, sicherer Algorithmus (besser als rsa)
|
||||
# -C: Kommentar (damit du weißt, wem der Key gehört)
|
||||
# Drücke Enter für Standard-Pfad.
|
||||
# Wähle eine gute Passphrase!
|
||||
```
|
||||
|
||||
### Befehl 2: `ssh-copy-id` (Verteilen)
|
||||
|
||||
```bash
|
||||
$ ssh-copy-id user@server
|
||||
# Kopiert deinen Public Key (~/.ssh/id_ed25519.pub)
|
||||
# in die ~/.ssh/authorized_keys des Servers.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# 1. Nutze ED25519
|
||||
# RSA ist okay, aber ED25519 ist State-of-the-Art.
|
||||
|
||||
# 2. Nutze eine Passphrase
|
||||
# Ein ungeschützter Key ist ein Risiko.
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# 1. Private Key versenden
|
||||
# NIEMALS per Mail, Slack oder Discord schicken.
|
||||
# Er verlässt NIEMALS deinen Computer.
|
||||
|
||||
# 2. Public Key verstecken
|
||||
# Der Public Key (.pub) ist öffentlich. Den kannst du plakatieren.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: Der Schmied
|
||||
|
||||
1. Generiere ein neues Schlüsselpaar.
|
||||
2. Schau dir die Dateien an: `ls -l ~/.ssh/`
|
||||
3. Lies den Public Key: `cat ~/.ssh/id_ed25519.pub` (Das ist okay!)
|
||||
|
||||
### Übung 2: Der magische Zugang
|
||||
|
||||
1. Kopiere den Key auf deine VM/Pi.
|
||||
2. Logge dich aus (`exit`).
|
||||
3. Logge dich wieder ein (`ssh user@server`).
|
||||
4. Musstest du das Server-Passwort eingeben? Nein! (Vielleicht die Key-Passphrase).
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Wer Schlüssel nutzt, schläft ruhiger. Wer Passwörter nutzt, tippt mehr."*
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: SSH Basics](crumbpage-07-ssh-basics.md) | [Weiter: Storage →](crumbpage-09-storage.md)
|
||||
147
crumbpage-09-storage.md
Normal file
147
crumbpage-09-storage.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# 🧭 Crumbpage 09: Der Waldboden (Storage & Mounts)
|
||||
|
||||
**Subtitle:** *Wo wir unsere Wurzeln schlagen - Speicher verwalten*
|
||||
**Pfad:** 9 von 11
|
||||
**Schwierigkeit:** ⭐⭐⭐ (3/5)
|
||||
**Zeit:** ~1.5 Stunden
|
||||
**Voraussetzungen:** Pfad 3 (Navigation)
|
||||
|
||||
> *"Ein Baum braucht Boden. Daten brauchen Platz."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Wie Linux Speicher sieht (Alles ist eine Datei)
|
||||
✓ Partitionen und Filesystems
|
||||
✓ Mount Points (Einhängepunkte)
|
||||
✓ Speicherplatz überwachen (df, du)
|
||||
✓ Externe Medien einbinden
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Sehen, welche Festplatten angeschlossen sind
|
||||
- [ ] Prüfen, wie viel Platz noch frei ist
|
||||
- [ ] Verstehen, was `/mnt` und `/media` sind
|
||||
- [ ] Große Dateien finden, die den Wald verstopfen
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: Kein C: Laufwerk
|
||||
|
||||
In Windows gibt es C:, D:, E:.
|
||||
In Linux gibt es nur **einen Baum** (`/`).
|
||||
Andere Festplatten werden in diesen Baum **eingehängt** (mounted).
|
||||
|
||||
Beispiel:
|
||||
- USB-Stick wird zu `/media/usb`
|
||||
- Zweite Festplatte wird zu `/mnt/data`
|
||||
|
||||
### Konzept 2: Devices
|
||||
|
||||
Hardware wird als Datei in `/dev/` dargestellt.
|
||||
- `/dev/sda` = Erste Festplatte (SATA)
|
||||
- `/dev/sda1` = Erste Partition auf erster Platte
|
||||
- `/dev/nvme0n1` = NVMe SSD
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Befehl 1: `df` (Disk Free)
|
||||
|
||||
Wie viel Platz habe ich noch?
|
||||
|
||||
```bash
|
||||
$ df -h
|
||||
# -h = human readable (GB statt Bytes)
|
||||
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/sda2 100G 20G 80G 20% /
|
||||
/dev/sdb1 500G 100G 400G 20% /mnt/data
|
||||
```
|
||||
|
||||
### Befehl 2: `du` (Disk Usage)
|
||||
|
||||
Wer verbraucht den Platz?
|
||||
|
||||
```bash
|
||||
$ du -sh folder/
|
||||
# -s = summary (nur Summe)
|
||||
# -h = human readable
|
||||
|
||||
$ du -h --max-depth=1 /var/log/
|
||||
# Zeigt Größe der Unterordner an
|
||||
```
|
||||
|
||||
### Befehl 3: `lsblk` (List Block Devices)
|
||||
|
||||
Was ist angeschlossen?
|
||||
|
||||
```bash
|
||||
$ lsblk
|
||||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
|
||||
sda 8:0 0 100G 0 disk
|
||||
├─sda1 8:1 0 512M 0 part /boot/efi
|
||||
└─sda2 8:2 0 99.5G 0 part /
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# 1. Mount Points sauber halten
|
||||
# Nutze /mnt für temporäres oder manuelles Mounten.
|
||||
# Nutze /media für automatische Removable Media.
|
||||
|
||||
# 2. UUIDs nutzen
|
||||
# In /etc/fstab (für permanenten Mount) lieber UUID statt /dev/sdb1 nutzen.
|
||||
# /dev/sdb1 kann sich ändern, UUID bleibt gleich.
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# 1. Niemals volle Partition ignorieren
|
||||
# Wenn / voll ist (100%), stürzt das System oft ab oder Dienste starten nicht.
|
||||
|
||||
# 2. USB-Stick einfach abziehen
|
||||
# Immer erst `umount /path` machen! Sonst Datenverlust.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: Platzhirsch
|
||||
|
||||
1. Führe `df -h` aus. Welche Partition ist am vollsten?
|
||||
2. Führe `lsblk` aus. Wie heißt deine Haupt-Festplatte?
|
||||
|
||||
### Übung 2: Detektiv
|
||||
|
||||
1. Gehe nach `/var/log`.
|
||||
2. Finde heraus, wie groß der Ordner ist (`du -sh`).
|
||||
3. Finde die größte Datei darin.
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Der Boden trägt den Wald. Wenn der Boden voll ist, kann nichts mehr wachsen. Halte deinen Speicher sauber."*
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: SSH Keys](crumbpage-08-ssh-keys.md) | [Weiter: Services →](crumbpage-10-services-ports.md)
|
||||
121
crumbpage-10-services-ports.md
Normal file
121
crumbpage-10-services-ports.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# 🧭 Crumbpage 10: Dienste die auf Ports lauschen
|
||||
|
||||
**Subtitle:** *Was läuft denn da? - Services verwalten*
|
||||
**Pfad:** 10 von 11
|
||||
**Schwierigkeit:** ⭐⭐⭐ (3/5)
|
||||
**Zeit:** ~2 Stunden
|
||||
**Voraussetzungen:** Pfad 9 (Storage)
|
||||
|
||||
> *"Ein Server ohne Dienste ist wie ein Restaurant ohne Küche. Es passiert nichts."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Was ist ein Service (Daemon)?
|
||||
✓ systemd & systemctl (Der Chefkoch)
|
||||
✓ Ports & Sockets
|
||||
✓ Firewalls (Der Türsteher)
|
||||
✓ Logs von Diensten (journalctl -u)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Einen Webserver (nginx) installieren und starten
|
||||
- [ ] Prüfen, ob er läuft und auf welchem Port
|
||||
- [ ] Ihn automatisch beim Booten starten lassen
|
||||
- [ ] Die Firewall konfigurieren, um ihn erreichbar zu machen
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: Daemons (Dienste)
|
||||
|
||||
Programme, die im Hintergrund laufen und auf Arbeit warten, nennt man **Daemons** (endet oft auf `d`, z.B. `sshd`, `httpd`).
|
||||
**systemd** ist das Programm, das alle anderen Daemons startet und überwacht.
|
||||
|
||||
### Konzept 2: Ports
|
||||
|
||||
Wie in Pfad 6 gelernt: Dienste lauschen an Türen (Ports).
|
||||
Nur ein Dienst pro Port!
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Befehl 1: `systemctl` (Der Boss)
|
||||
|
||||
```bash
|
||||
$ sudo systemctl start nginx # Starten
|
||||
$ sudo systemctl stop nginx # Stoppen
|
||||
$ sudo systemctl restart nginx # Neustarten (bei Config-Änderung)
|
||||
$ sudo systemctl status nginx # Wie geht's dir?
|
||||
$ sudo systemctl enable nginx # Autostart an
|
||||
$ sudo systemctl disable nginx # Autostart aus
|
||||
```
|
||||
|
||||
### Befehl 2: `ufw` (Uncomplicated Firewall)
|
||||
|
||||
```bash
|
||||
$ sudo ufw status
|
||||
$ sudo ufw allow 80/tcp # Web erlauben
|
||||
$ sudo ufw allow 22/tcp # SSH erlauben (WICHTIG!)
|
||||
$ sudo ufw enable # Firewall einschalten
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# 1. Status prüfen
|
||||
# Nach jedem start/restart: `systemctl status service`
|
||||
|
||||
# 2. Logs lesen
|
||||
# Wenn er nicht startet: `journalctl -u service_name -e`
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# 1. Firewall einschalten ohne SSH zu erlauben
|
||||
# Du sperrst dich selbst aus! 💀
|
||||
# Immer erst `ufw allow ssh` machen.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: Der Webserver
|
||||
|
||||
1. Installiere Nginx: `sudo apt install nginx`
|
||||
2. Starte ihn: `sudo systemctl start nginx`
|
||||
3. Prüfe Status: `sudo systemctl status nginx`
|
||||
4. Rufe die IP deines Servers im Browser auf. Siehst du "Welcome to nginx"?
|
||||
|
||||
### Übung 2: Der Türsteher
|
||||
|
||||
1. Prüfe `sudo ufw status`.
|
||||
2. Erlaube SSH: `sudo ufw allow ssh`.
|
||||
3. Erlaube Nginx: `sudo ufw allow 'Nginx Full'`.
|
||||
4. Aktiviere UFW: `sudo ufw enable`.
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Ein Dienst, der nicht startet, hat meistens einen Grund. Er schreit ihn in die Logs, aber nur die Weisen hören zu."*
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: Storage](crumbpage-09-storage.md) | [Weiter: First Access →](crumbpage-11-first-access.md)
|
||||
126
crumbpage-11-first-access.md
Normal file
126
crumbpage-11-first-access.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# 🧭 Crumbpage 11: Der erste Zugriff - Jedes Blatt hat eine Funktion
|
||||
|
||||
**Subtitle:** *Das Protokoll der Weisen - Sicher arbeiten*
|
||||
**Pfad:** 11 von 11
|
||||
**Schwierigkeit:** ⭐⭐⭐⭐⭐ (5/5)
|
||||
**Zeit:** Lebenslang
|
||||
**Voraussetzungen:** Alle vorherigen Pfade
|
||||
|
||||
> *"Der Unterschied zwischen einem Anfänger und einem Meister ist nicht das Wissen, sondern die Vorsicht."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Das First Access Protocol
|
||||
✓ Checklisten für Änderungen
|
||||
✓ Backup-Strategien (cp, tar, git)
|
||||
✓ Dokumentation
|
||||
✓ Wann man "Nein" sagt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Einen neuen Server sicher übernehmen
|
||||
- [ ] Änderungen durchführen, ohne zu schwitzen
|
||||
- [ ] Fehler rückgängig machen (Rollback)
|
||||
- [ ] Wissen, wann du Hilfe holen musst
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Das Protokoll
|
||||
|
||||
### Phase 1: Reconnaissance (Erkundung)
|
||||
|
||||
Bevor du irgendetwas anfasst:
|
||||
1. **Hostinfo:** `hostname`, `ip a`, `uname -a`
|
||||
2. **Status:** `htop`, `df -h`, `systemctl list-units --failed`
|
||||
3. **Logs:** `journalctl -xe | tail`
|
||||
|
||||
### Phase 2: Safety Net (Sicherung)
|
||||
|
||||
Bevor du etwas änderst:
|
||||
1. **Backup Config:** `cp config config.bak`
|
||||
2. **Backup Data:** `tar -czf data_backup.tar.gz /var/www/html`
|
||||
3. **Plan:** Schreibe auf, was du tun willst.
|
||||
|
||||
### Phase 3: Execution (Ausführung)
|
||||
|
||||
1. Führe die Änderung durch.
|
||||
2. Prüfe Syntax (wenn möglich, z.B. `nginx -t`).
|
||||
3. Starte Dienst neu.
|
||||
|
||||
### Phase 4: Verification (Prüfung)
|
||||
|
||||
1. Läuft der Dienst? (`systemctl status`)
|
||||
2. Geht die Funktion? (Browser, curl)
|
||||
3. Sagen die Logs etwas Böses?
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Befehl 1: `tar` (Tape Archive)
|
||||
|
||||
Backups erstellen.
|
||||
|
||||
```bash
|
||||
$ tar -czf backup.tar.gz ordner/
|
||||
# c = create, z = gzip (komprimieren), f = file
|
||||
```
|
||||
|
||||
### Befehl 2: `diff` (Unterschiede)
|
||||
|
||||
Was habe ich geändert?
|
||||
|
||||
```bash
|
||||
$ diff config.bak config
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### Die Goldenen Regeln
|
||||
|
||||
1. **NIEMALS** am Freitagabend deployen.
|
||||
2. **NIEMALS** direkt auf Production testen.
|
||||
3. **IMMER** eine zweite Shell offen haben (falls man sich aussperrt).
|
||||
4. **IMMER** dokumentieren, was man getan hat.
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: Der Ernstfall
|
||||
|
||||
1. Nimm deinen Nginx von Pfad 10.
|
||||
2. Mache ein Backup der `index.html`.
|
||||
3. Ändere die `index.html` (schreibe "Wartungsarbeiten").
|
||||
4. Prüfe im Browser.
|
||||
5. **ROLLBACK:** Stelle das Backup wieder her.
|
||||
6. Prüfe im Browser. War es erfolgreich?
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Ein Admin, der keine Backups macht, ist wie ein Fallschirmspringer ohne Fallschirm. Er fällt nur einmal."*
|
||||
|
||||
---
|
||||
|
||||
**Abschluss:**
|
||||
Du hast den Admin-Vektor durchlaufen! Du kennst nun die Pfade des Waldes.
|
||||
Aber der Wald wächst ständig. Bleib neugierig, bleib vorsichtig, und bewahre die Krümel.
|
||||
|
||||
**WUUUHUUUUU!** 🦉💙
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: Services](crumbpage-10-services-ports.md) | [Zurück zum Start: Admin Vektor](crumbforest-admin-vektor.md)
|
||||
151
crumbpage-12-git-basics.md
Normal file
151
crumbpage-12-git-basics.md
Normal file
@@ -0,0 +1,151 @@
|
||||
# 🧭 Crumbpage 12: Git - Das Gedächtnis des Waldes
|
||||
|
||||
**Subtitle:** *Zeitmaschinen bauen und Welten teilen*
|
||||
**Pfad:** 12 von 12
|
||||
**Schwierigkeit:** ⭐⭐⭐⭐ (4/5)
|
||||
**Zeit:** ~2 Stunden
|
||||
**Voraussetzungen:** Pfad 4 (Editoren) & Pfad 8 (SSH Keys)
|
||||
|
||||
> *"Wer seine Geschichte nicht kennt, ist verdammt, sie zu wiederholen. Git vergisst nichts."* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Was ist Version Control? (Zeitmaschine)
|
||||
✓ Repository, Commit, Push, Pull
|
||||
✓ .gitignore (Was im Wald bleibt)
|
||||
✓ Gitea/GitHub (Der zentrale Sammelplatz)
|
||||
✓ SSH Keys für Git nutzen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Ein Verzeichnis in ein Git-Repo verwandeln (`git init`)
|
||||
- [ ] Änderungen speichern (`git commit`)
|
||||
- [ ] Deinen Code auf deinen Gitea-Server hochladen (`git push`)
|
||||
- [ ] Verstehen, warum `git push --force` verboten ist
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: Die Zeitmaschine
|
||||
|
||||
Stell dir vor, du schreibst ein Buch.
|
||||
- **Ohne Git:** `buch_final.txt`, `buch_final_echt.txt`, `buch_final_v2.txt` 🤯
|
||||
- **Mit Git:** `buch.txt` (und Git merkt sich jede Änderung in einer Datenbank).
|
||||
|
||||
### Konzept 2: Lokal vs. Remote
|
||||
|
||||
- **Lokal:** Dein Laptop (Dein Rucksack).
|
||||
- **Remote:** Dein Gitea/GitHub (Das Basislager).
|
||||
Du arbeitest lokal und "pushst" (schiebst) Änderungen zum Basislager, damit andere sie "pullen" (ziehen) können.
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Befehl 1: `git init` & `git clone`
|
||||
|
||||
```bash
|
||||
# Neues Repo starten
|
||||
$ git init
|
||||
|
||||
# Vorhandenes Repo herunterladen
|
||||
$ git clone git@dein-gitea.com:user/repo.git
|
||||
```
|
||||
|
||||
### Befehl 2: Der Workflow (The Happy Path)
|
||||
|
||||
```bash
|
||||
# 1. Status prüfen (Was hat sich geändert?)
|
||||
$ git status
|
||||
|
||||
# 2. Änderungen vormerken (Staging)
|
||||
$ git add datei.txt
|
||||
# oder alles: git add .
|
||||
|
||||
# 3. Änderungen speichern (Commit)
|
||||
$ git commit -m "feat: habe kapitel 1 geschrieben"
|
||||
|
||||
# 4. Hochladen (Push)
|
||||
$ git push origin main
|
||||
```
|
||||
|
||||
### Befehl 3: `git log` (Geschichtsbuch)
|
||||
|
||||
```bash
|
||||
$ git log --oneline
|
||||
# Zeigt die letzten Änderungen kurz an.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# 1. Sprechende Commit-Messages
|
||||
# Gut: "fix: login bug in auth.py"
|
||||
# Schlecht: "fix", "update", "wip"
|
||||
|
||||
# 2. .gitignore nutzen
|
||||
# Passwörter, Logs und temporäre Dateien gehören NICHT in Git!
|
||||
# Erstelle eine Datei namens .gitignore und schreibe rein:
|
||||
# *.log
|
||||
# .env
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# 1. Secrets committen
|
||||
# Wenn du ein Passwort committest, ist es für immer in der History.
|
||||
# Auch wenn du es löschst! (Man kann in der Zeit zurückreisen).
|
||||
|
||||
# 2. Auf dem Server arbeiten
|
||||
# Code schreibt man lokal, pusht ihn, und pullt ihn auf dem Server.
|
||||
# Nicht auf dem Server via nano programmieren (außer für Hotfixes).
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: Dein erstes Repo
|
||||
|
||||
1. Erstelle einen Ordner `mein-projekt`.
|
||||
2. `git init`
|
||||
3. Erstelle `README.md` mit etwas Text.
|
||||
4. `git add README.md`
|
||||
5. `git commit -m "first commit"`
|
||||
|
||||
### Übung 2: Ab in den Wald (Remote)
|
||||
|
||||
1. Erstelle ein leeres Repo auf deinem Gitea.
|
||||
2. Verbinde es lokal:
|
||||
`git remote add origin git@194.164.194.191:kruemel/mein-projekt.git`
|
||||
*(Passe die URL an!)*
|
||||
3. `git push -u origin main`
|
||||
|
||||
**Frage:** Hat es nach einem Passwort gefragt?
|
||||
- **Ja:** Deine SSH Keys sind noch nicht im Gitea hinterlegt oder falsch konfiguriert.
|
||||
- **Nein:** Wuhuuu! Deine Keys funktionieren! 🔑✨
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"Code, der nicht in Git ist, existiert nicht. Code, der nicht gepusht ist, ist nur eine Illusion."*
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: First Access](crumbpage-11-first-access.md) | [Zurück zum Start: Admin Vektor](crumbforest-admin-vektor.md)
|
||||
251
crumbpage-template.md
Normal file
251
crumbpage-template.md
Normal file
@@ -0,0 +1,251 @@
|
||||
# 🧭 Crumbpage Template
|
||||
|
||||
**Subtitle:** *[Kurze Beschreibung]*
|
||||
**Pfad:** X von 8
|
||||
**Schwierigkeit:** ⭐⭐⭐ (1-5)
|
||||
**Zeit:** ~X Stunden
|
||||
**Voraussetzungen:** [Links zu vorherigen Pfaden]
|
||||
|
||||
> *"[Inspirierendes Zitat]"* 🌲
|
||||
|
||||
---
|
||||
|
||||
## 📋 Was du in diesem Pfad lernst
|
||||
|
||||
```
|
||||
✓ Konzept 1
|
||||
✓ Konzept 2
|
||||
✓ Konzept 3
|
||||
✓ Praktische Anwendung
|
||||
✓ Häufige Fehler & Lösungen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Lernziele
|
||||
|
||||
Nach diesem Pfad kannst du:
|
||||
|
||||
- [ ] Ziel 1 verstehen und anwenden
|
||||
- [ ] Ziel 2 ohne Hilfe ausführen
|
||||
- [ ] Ziel 3 erklären
|
||||
- [ ] Häufige Probleme eigenständig debuggen
|
||||
|
||||
---
|
||||
|
||||
## 🌱 Grundkonzepte
|
||||
|
||||
### Konzept 1: [Name]
|
||||
|
||||
**Was ist das?**
|
||||
[Einfache Erklärung]
|
||||
|
||||
**Warum ist das wichtig?**
|
||||
[Praktische Bedeutung]
|
||||
|
||||
**Wie funktioniert es?**
|
||||
```bash
|
||||
# Beispiel-Commands mit Erklärungen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Praktische Befehle
|
||||
|
||||
### Befehl 1: `command`
|
||||
|
||||
```bash
|
||||
# Grundlegende Syntax
|
||||
command [optionen] [argumente]
|
||||
|
||||
# Beispiele
|
||||
command -a file.txt # Erklärung
|
||||
command -rf /path/to/dir # Erklärung
|
||||
command --help # Hilfe anzeigen
|
||||
```
|
||||
|
||||
**Wichtige Flags:**
|
||||
- `-a` : Beschreibung
|
||||
- `-r` : Beschreibung
|
||||
- `-f` : Beschreibung
|
||||
|
||||
**⚠️ Achtung:**
|
||||
```bash
|
||||
# GEFÄHRLICH - NICHT AUSFÜHREN!
|
||||
command -rf / # Kann System zerstören
|
||||
|
||||
# SICHER
|
||||
command -rf /tmp/testdir # Nur Test-Verzeichnis
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### DO ✅
|
||||
|
||||
```bash
|
||||
# Immer Backups machen
|
||||
cp important.conf important.conf.backup
|
||||
|
||||
# Kleine Schritte
|
||||
command --dry-run # Erst simulieren
|
||||
command # Dann ausführen
|
||||
```
|
||||
|
||||
### DON'T ❌
|
||||
|
||||
```bash
|
||||
# Nie als root wenn nicht nötig
|
||||
sudo rm -rf /* # 💀 NIEMALS!
|
||||
|
||||
# Nie ohne zu testen
|
||||
command --force # Ohne zu wissen was es tut
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hands-On Übungen
|
||||
|
||||
### Übung 1: [Name]
|
||||
|
||||
**Aufgabe:**
|
||||
[Beschreibung]
|
||||
|
||||
**Schritte:**
|
||||
```bash
|
||||
# Schritt 1
|
||||
command1
|
||||
|
||||
# Schritt 2
|
||||
command2
|
||||
|
||||
# Schritt 3
|
||||
command3
|
||||
```
|
||||
|
||||
**Erwartetes Ergebnis:**
|
||||
```
|
||||
[Output Beispiel]
|
||||
```
|
||||
|
||||
**Lösungsweg:**
|
||||
<details>
|
||||
<summary>Klick hier für die Lösung</summary>
|
||||
|
||||
```bash
|
||||
# Lösung mit Erklärungen
|
||||
```
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Häufige Fehler & Lösungen
|
||||
|
||||
### Fehler 1: "Permission denied"
|
||||
|
||||
**Symptom:**
|
||||
```bash
|
||||
$ command file.txt
|
||||
bash: Permission denied
|
||||
```
|
||||
|
||||
**Ursache:**
|
||||
[Erklärung]
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
# Lösung mit Erklärung
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Troubleshooting Checkliste
|
||||
|
||||
```bash
|
||||
# Wenn etwas nicht funktioniert:
|
||||
|
||||
# 1. Bin ich der richtige User?
|
||||
whoami
|
||||
id
|
||||
|
||||
# 2. Habe ich die richtigen Rechte?
|
||||
ls -la /path/to/file
|
||||
|
||||
# 3. Ist der Service aktiv?
|
||||
systemctl status service_name
|
||||
|
||||
# 4. Was sagen die Logs?
|
||||
journalctl -xe
|
||||
tail -f /var/log/syslog
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Weiterführende Links
|
||||
|
||||
### Intern (Crumbforest)
|
||||
- [Vorheriger Pfad](link)
|
||||
- [Nächster Pfad](link)
|
||||
- [Admin-Vektor Übersicht](crumbforest-admin-vektor.md)
|
||||
|
||||
### Extern
|
||||
- [Offizielle Dokumentation](url)
|
||||
- [Tutorial XYZ](url)
|
||||
- [Video Guide](url)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Skill-Check
|
||||
|
||||
Bevor du zum nächsten Pfad gehst:
|
||||
|
||||
- [ ] Habe ich alle Übungen gemacht?
|
||||
- [ ] Verstehe ich die Kernkonzepte?
|
||||
- [ ] Kann ich häufige Fehler beheben?
|
||||
- [ ] Kann ich das Gelernte anwenden?
|
||||
|
||||
**Wenn 4/4 ✅**: Weiter zum nächsten Pfad!
|
||||
**Wenn <4 ✅**: Wiederhole Übungen oder frage in der Community
|
||||
|
||||
---
|
||||
|
||||
## 💭 Reflexion
|
||||
|
||||
**Was war neu für mich?**
|
||||
```
|
||||
[Deine Notizen]
|
||||
```
|
||||
|
||||
**Was war schwierig?**
|
||||
```
|
||||
[Deine Notizen]
|
||||
```
|
||||
|
||||
**Was will ich vertiefen?**
|
||||
```
|
||||
[Deine Notizen]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🦉 Crystal Owl's Weisheit
|
||||
|
||||
> *"[Weisheit spezifisch zu diesem Pfad]"*
|
||||
|
||||
```
|
||||
Krümel-Tipp:
|
||||
[Praktischer Tipp]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Version:** 1.0
|
||||
**Letzte Änderung:** YYYY-MM-DD
|
||||
**Maintainer:** Crumbforest Core Team
|
||||
**Feedback:** [GitHub Issues](link) | [Discord](link)
|
||||
|
||||
---
|
||||
|
||||
**Navigation:**
|
||||
[← Zurück: Vektor-Übersicht](crumbforest-admin-vektor.md) | [Weiter: Pfad X+1 →](crumbpage-XX.md)
|
||||
1173
kruemel-im-keks-problemloesung-tagebuch.md
Normal file
1173
kruemel-im-keks-problemloesung-tagebuch.md
Normal file
File diff suppressed because it is too large
Load Diff
1084
kruemel-kuchen-partitionierung-bugsy.md
Normal file
1084
kruemel-kuchen-partitionierung-bugsy.md
Normal file
File diff suppressed because it is too large
Load Diff
1219
ubuntu-vs-gentoo-rz-survival-guide.md
Normal file
1219
ubuntu-vs-gentoo-rz-survival-guide.md
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user