validate config sh hinzugefügt
parent
e112537164
commit
381cdb1933
1 changed files with 249 additions and 0 deletions
249
validate-config-sh.md
Normal file
249
validate-config-sh.md
Normal file
|
|
@ -0,0 +1,249 @@
|
|||
# validate-config.sh
|
||||
|
||||
**furt Konfiguration vor Service-Start validieren**
|
||||
|
||||
## Getestet unter
|
||||
- OpenBSD 7.7
|
||||
- Debian 12
|
||||
- Arch Linux
|
||||
|
||||
## Zweck des Scripts
|
||||
|
||||
Das `validate-config.sh` Script überprüft die furt-Konfigurationsdatei auf Syntax-Fehler und fehlende Pflicht-Abschnitte vor dem Service-Start. Es erkennt betriebssystem-spezifische Config-Pfade und validiert INI-Format, Server-Einstellungen und API-Key-Konfiguration.
|
||||
|
||||
Das Script verhindert Service-Starts mit defekter Konfiguration und gibt spezifische Hinweise auf Problembereiche für schnellere Fehlerbehebung.
|
||||
|
||||
## Wie das Script funktioniert
|
||||
|
||||
Das Script erkennt zunächst den korrekten Konfigurationspfad basierend auf dem Betriebssystem:
|
||||
|
||||
```bash
|
||||
if [ "$(uname)" = "OpenBSD" ]; then
|
||||
CONFIG_FILE="/usr/local/etc/furt/furt.conf"
|
||||
else
|
||||
CONFIG_FILE="/etc/furt/furt.conf"
|
||||
fi
|
||||
```
|
||||
|
||||
Anschließend führt es eine mehrstufige Validierung durch:
|
||||
|
||||
1. **Datei-Existenz:** Prüft ob die Config-Datei gefunden wird
|
||||
2. **INI-Syntax:** Validiert grundlegende INI-Struktur
|
||||
3. **Pflicht-Abschnitte:** Stellt sicher dass [server] existiert
|
||||
4. **Server-Parameter:** Prüft port- und host-Konfiguration
|
||||
5. **API-Keys:** Warnt bei fehlenden API-Key-Definitionen
|
||||
6. **Berechtigungen:** Überprüft Config-Datei-Permissions
|
||||
|
||||
Das `set -e` Flag sorgt dafür dass das Script bei kritischen Fehlern sofort abbricht statt weiterzumachen.
|
||||
|
||||
## Betriebssystem-Philosophien verstehen
|
||||
|
||||
Die Config-Pfad-Erkennung spiegelt unterschiedliche System-Philosophien wider:
|
||||
|
||||
### BSD-Ansatz (OpenBSD)
|
||||
OpenBSD trennt strikt zwischen Base-System (`/etc`) und Third-Party-Software (`/usr/local/etc`). Diese Separation verhindert Konflikte bei System-Updates und hält die Base-System-Konfiguration sauber.
|
||||
|
||||
```bash
|
||||
# OpenBSD
|
||||
CONFIG_FILE="/usr/local/etc/furt/furt.conf"
|
||||
```
|
||||
|
||||
Die `/usr/local/`-Hierarchie überlebt System-Upgrades und ermöglicht klare Trennung zwischen Betriebssystem- und Anwendungs-Konfiguration.
|
||||
|
||||
### Linux-Ansatz (Debian, Arch, etc.)
|
||||
Linux-Distributionen verwenden meist `/etc` für alle Konfigurationsdateien unabhängig von der Installationsquelle. Package-Manager koordinieren zwischen verschiedenen Software-Quellen in einem gemeinsamen Namespace.
|
||||
|
||||
```bash
|
||||
# Linux
|
||||
CONFIG_FILE="/etc/furt/furt.conf"
|
||||
```
|
||||
|
||||
Diese Konvention macht alle System-Konfiguration zentral auffindbar und integriert sich nahtlos in etablierte Admin-Workflows.
|
||||
|
||||
## Validierungs-Strategien verstehen
|
||||
|
||||
Das Script implementiert eine pragmatische Validierungs-Pipeline die auf häufige Konfigurationsfehler abzielt:
|
||||
|
||||
**INI-Format-Validierung:** Grep-basierte Suche nach Section-Headers vermeidet komplexe Parser-Dependencies. Die Regex-Patterns sind POSIX-kompatibel für maximale Portabilität.
|
||||
|
||||
**Server-Parameter-Checks:** Explizite Prüfung auf `port` und `host` Einstellungen da diese für die Server-Funktionalität kritisch sind.
|
||||
|
||||
**API-Key-Warnung:** Fehlende API-Keys werden als Warning behandelt statt Error da furt theoretisch ohne sie starten könnte - aber praktisch nutzlos wäre.
|
||||
|
||||
**Permission-Monitoring:** Config-Dateien enthalten SMTP-Passwörter und API-Keys. Zu offene Berechtigungen werden gewarnt aber blockieren nicht den Service-Start.
|
||||
|
||||
## Script praktisch nutzen
|
||||
|
||||
### Als Teil der Installation
|
||||
```bash
|
||||
# Orchestrierter Aufruf durch install.sh
|
||||
./install.sh
|
||||
# [INFO] Phase 5: Validating configuration... OK
|
||||
```
|
||||
|
||||
Das Orchestrator-Script ruft `validate-config.sh` nach der Config-Installation auf um sicherzustellen dass die Standard-Konfiguration syntaktisch korrekt ist.
|
||||
|
||||
### Manuelle Validierung nach Config-Änderungen
|
||||
```bash
|
||||
# Nach Bearbeitung von furt.conf
|
||||
sudo ./scripts/validate-config.sh
|
||||
```
|
||||
|
||||
Ausgabe zeigt den Validierungserfolg:
|
||||
```
|
||||
Validating configuration: /usr/local/etc/furt/furt.conf
|
||||
Configuration validation completed
|
||||
```
|
||||
|
||||
### Integration in Service-Restart-Workflow
|
||||
```bash
|
||||
# Sichere Config-Updates
|
||||
sudo ./scripts/validate-config.sh && sudo rcctl restart furt
|
||||
```
|
||||
|
||||
Diese Kombination verhindert Service-Ausfälle durch defekte Konfiguration.
|
||||
|
||||
### Development-Testing
|
||||
```bash
|
||||
# Config-Syntax nach Änderungen prüfen
|
||||
vim /usr/local/etc/furt/furt.conf
|
||||
./scripts/validate-config.sh
|
||||
```
|
||||
|
||||
## Installation validieren
|
||||
|
||||
Nach der Script-Ausführung kannst du die Config-Datei direkt prüfen:
|
||||
|
||||
```bash
|
||||
# Strukturelle Validierung
|
||||
grep '^\[' /usr/local/etc/furt/furt.conf
|
||||
grep '^port' /usr/local/etc/furt/furt.conf
|
||||
grep '^host' /usr/local/etc/furt/furt.conf
|
||||
|
||||
# Berechtigungen prüfen
|
||||
ls -la /usr/local/etc/furt/furt.conf
|
||||
```
|
||||
|
||||
Korrekte Konfiguration zeigt die erwarteten Abschnitte und angemessene Berechtigungen:
|
||||
```
|
||||
[server]
|
||||
[smtp_default]
|
||||
[api_key "example-key"]
|
||||
-rw-r----- 1 root _furt 2048 furt.conf
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "Configuration file not found"
|
||||
```
|
||||
Error: Configuration file not found: /etc/furt/furt.conf
|
||||
```
|
||||
Die Config-Datei wurde nicht installiert oder liegt am falschen Ort:
|
||||
```bash
|
||||
# Prüfe alternative Pfade
|
||||
ls -la /usr/local/etc/furt/furt.conf # OpenBSD
|
||||
ls -la /etc/furt/furt.conf # Linux
|
||||
|
||||
# Config aus Example erstellen
|
||||
cp /usr/local/share/furt/config/furt.conf.example /etc/furt/furt.conf
|
||||
```
|
||||
|
||||
### "[server] section missing"
|
||||
```
|
||||
Error: [server] section missing in config
|
||||
```
|
||||
Die Config-Datei ist unvollständig oder beschädigt:
|
||||
```bash
|
||||
# Grundstruktur prüfen
|
||||
head -20 /usr/local/etc/furt/furt.conf
|
||||
|
||||
# Example-Config als Basis verwenden
|
||||
cp /usr/local/share/furt/config/furt.conf.example /usr/local/etc/furt/furt.conf
|
||||
```
|
||||
|
||||
### "server port not configured"
|
||||
```
|
||||
Error: server port not configured
|
||||
```
|
||||
Der [server]-Abschnitt existiert aber die port-Zeile fehlt:
|
||||
```bash
|
||||
# [server]-Abschnitt überprüfen
|
||||
grep -A 5 '^\[server\]' /usr/local/etc/furt/furt.conf
|
||||
|
||||
# Port-Zeile hinzufügen
|
||||
echo "port = 7811" >> /usr/local/etc/furt/furt.conf
|
||||
```
|
||||
|
||||
### "No API keys configured"
|
||||
```
|
||||
Warning: No API keys configured
|
||||
```
|
||||
Dies ist eine Warnung, kein Fehler. API-Keys sind für praktische Nutzung erforderlich:
|
||||
```bash
|
||||
# API-Key-Abschnitt hinzufügen
|
||||
cat >> /usr/local/etc/furt/furt.conf << EOF
|
||||
|
||||
[api_key "test-key"]
|
||||
name = "Test API Key"
|
||||
permissions = mail:send
|
||||
allowed_ips = 127.0.0.1
|
||||
mail_to = admin@example.com
|
||||
mail_from = noreply@example.com
|
||||
EOF
|
||||
```
|
||||
|
||||
### "Config file permissions too open"
|
||||
```
|
||||
Warning: Config file permissions too open (644), should be 640
|
||||
```
|
||||
Die Config-Datei ist für alle Benutzer lesbar obwohl sie Passwörter enthält:
|
||||
```bash
|
||||
# Berechtigungen korrigieren
|
||||
chmod 640 /usr/local/etc/furt/furt.conf
|
||||
|
||||
# OpenBSD
|
||||
chown root:_furt /usr/local/etc/furt/furt.conf
|
||||
|
||||
# Linux
|
||||
chown root:furt /etc/furt/furt.conf
|
||||
```
|
||||
|
||||
## Script erweitern
|
||||
|
||||
### Detailliertere INI-Validierung
|
||||
```bash
|
||||
# Validierung für fehlende Closing-Brackets
|
||||
if grep -q '^\[.*[^]]$' "$CONFIG_FILE"; then
|
||||
echo "Error: Malformed section header in config"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
### SMTP-Konfiguration prüfen
|
||||
```bash
|
||||
# Prüfe ob SMTP-Settings vorhanden sind
|
||||
if ! grep -q '^\[smtp_default\]' "$CONFIG_FILE"; then
|
||||
echo "Warning: No default SMTP configuration found"
|
||||
fi
|
||||
```
|
||||
|
||||
### Config-Backup vor Validierung
|
||||
```bash
|
||||
# Backup erstellen für Rollback-Möglichkeit
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
cp "$CONFIG_FILE" "$CONFIG_FILE.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
fi
|
||||
```
|
||||
|
||||
### Syntax-Highlighting für Fehler
|
||||
```bash
|
||||
# Zeige problematische Zeilen mit Kontext
|
||||
if ! grep -q '^port' "$CONFIG_FILE"; then
|
||||
echo "Error: server port not configured"
|
||||
echo "Expected: port = 7811"
|
||||
echo "In section: [server]"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
Das `validate-config.sh` Script ist ein kritischer Sicherheits-Checkpoint der verhindert dass furt mit defekter Konfiguration startet und dadurch unvorhersagbare Fehler oder Sicherheitslücken entstehen. Es balanciert gründliche Validierung mit praktischer Nutzbarkeit.
|
||||
Loading…
Add table
Add a link
Reference in a new issue