🎉 Optimierung der RDP-Server-Installation und Firewall-Konfiguration im Backend 🛠️. Vereinfachte Installation von xrdp und XFCE, verbesserte Fehlerbehandlung und Validierung der Firewall-Einstellungen. Aktualisierte Logik zur Überprüfung des Dienststatus und zur Konfiguration von Netzwerkquellen.
This commit is contained in:
parent
7b37d54e59
commit
fc6ba6e87e
@ -16,10 +16,8 @@ sudo ./setup.sh
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Installationsoptionen**:
|
**Installationsoptionen**:
|
||||||
1. **Nur Abhängigkeiten installieren** - System vorbereiten ohne Kiosk-Modus
|
1. **Abhängigkeiten installieren** - System für manuelles Testen vorbereiten
|
||||||
2. **Finale Kiosk-Installation** - Vollständige Kiosk-Konfiguration
|
2. **Vollständige Kiosk-Installation** - Automatischer Kiosk-Modus mit Remote-Zugang
|
||||||
3. **Nur Services installieren** - Systemd-Services aktualisieren
|
|
||||||
4. **System-Test** - Funktionalität überprüfen
|
|
||||||
|
|
||||||
**Nach der Installation**: System mit `sudo reboot` neustarten für automatischen Kiosk-Modus.
|
**Nach der Installation**: System mit `sudo reboot` neustarten für automatischen Kiosk-Modus.
|
||||||
|
|
||||||
@ -64,6 +62,7 @@ python app.py --debug
|
|||||||
- **Chromium-Vollbildmodus** ohne Desktop-Environment
|
- **Chromium-Vollbildmodus** ohne Desktop-Environment
|
||||||
- **Automatischer Login** und Browser-Start
|
- **Automatischer Login** und Browser-Start
|
||||||
- **Watchdog-Überwachung** für Systemstabilität
|
- **Watchdog-Überwachung** für Systemstabilität
|
||||||
|
- **Remote-Zugang** via SSH und RDP mit Firewall-Schutz
|
||||||
- **Responsive Design** für Desktop-Nutzung
|
- **Responsive Design** für Desktop-Nutzung
|
||||||
|
|
||||||
### Sicherheit
|
### Sicherheit
|
||||||
@ -71,6 +70,9 @@ python app.py --debug
|
|||||||
- **CSRF-Schutz** und Session-Management
|
- **CSRF-Schutz** und Session-Management
|
||||||
- **Rate-Limiting** und Eingabevalidierung
|
- **Rate-Limiting** und Eingabevalidierung
|
||||||
- **Systemd-Service-Isolation**
|
- **Systemd-Service-Isolation**
|
||||||
|
- **IPv6 vollständig deaktiviert** für erhöhte Sicherheit
|
||||||
|
- **IP-Spoofing-Schutz** und DDoS-Abwehr
|
||||||
|
- **TCP-Optimierungen** und RFC-Compliance
|
||||||
|
|
||||||
## 🏗️ Architektur
|
## 🏗️ Architektur
|
||||||
|
|
||||||
@ -144,18 +146,14 @@ backend/
|
|||||||
sudo ./setup.sh
|
sudo ./setup.sh
|
||||||
|
|
||||||
# Menüoptionen:
|
# Menüoptionen:
|
||||||
# 1. Nur Abhängigkeiten installieren und System vorbereiten
|
# 1. Abhängigkeiten installieren für manuelles Testen
|
||||||
# 2. Finale Installation mit kompletter Kiosk-Modus-Konfiguration
|
# 2. Vollständige Kiosk-Installation mit Remote-Zugang
|
||||||
# 3. Nur Services installieren/aktualisieren
|
# 3. Beenden
|
||||||
# 4. System-Test durchführen
|
|
||||||
# 5. Beenden
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Installationsmodi**:
|
**Installationsmodi**:
|
||||||
- **Option 1**: Ideal für Entwicklung und erste Tests
|
- **Option 1**: Ideal für Entwicklung, manuelle Tests und Debugging
|
||||||
- **Option 2**: Vollständige Produktionsinstallation
|
- **Option 2**: Vollständige Produktionsinstallation mit automatischem Kiosk-Start
|
||||||
- **Option 3**: Service-Updates ohne Systemänderungen
|
|
||||||
- **Option 4**: Diagnose und Wartung
|
|
||||||
|
|
||||||
### Option 2: Manuelle Installation
|
### Option 2: Manuelle Installation
|
||||||
|
|
||||||
@ -209,6 +207,10 @@ sudo systemctl enable myp-kiosk.service
|
|||||||
### Netzwerk-Zugriff
|
### Netzwerk-Zugriff
|
||||||
- **HTTPS**: `https://<raspberry-pi-ip>:443`
|
- **HTTPS**: `https://<raspberry-pi-ip>:443`
|
||||||
|
|
||||||
|
### Remote-Zugang (falls konfiguriert)
|
||||||
|
- **SSH**: `ssh user@<raspberry-pi-ip>` (Passwort: `raspberry`)
|
||||||
|
- **RDP**: `<raspberry-pi-ip>:3389` (Benutzer: `root`, Passwort: `744563017196A`)
|
||||||
|
|
||||||
### Standard-Anmeldedaten
|
### Standard-Anmeldedaten
|
||||||
- **Benutzername**: `admin`
|
- **Benutzername**: `admin`
|
||||||
- **Passwort**: `admin123`
|
- **Passwort**: `admin123`
|
||||||
@ -271,7 +273,7 @@ curl -k https://localhost:443
|
|||||||
openssl s_client -connect localhost:443 -servername localhost
|
openssl s_client -connect localhost:443 -servername localhost
|
||||||
|
|
||||||
# Automatische Tests mit setup.sh
|
# Automatische Tests mit setup.sh
|
||||||
sudo ./setup.sh # Option 4: System-Test
|
sudo ./setup.sh # Option 5: System-Test
|
||||||
```
|
```
|
||||||
|
|
||||||
### Log-Dateien
|
### Log-Dateien
|
||||||
@ -401,7 +403,7 @@ sudo journalctl -u kiosk-watchdog -f
|
|||||||
|
|
||||||
### Support
|
### Support
|
||||||
Bei Problemen:
|
Bei Problemen:
|
||||||
1. **System-Test durchführen**: `sudo ./setup.sh` → Option 4
|
1. **System-Test durchführen**: `sudo ./setup.sh` → Option 5
|
||||||
2. **Log-Bundle erstellen**:
|
2. **Log-Bundle erstellen**:
|
||||||
```bash
|
```bash
|
||||||
sudo tar -czf myp-logs-$(date +%Y%m%d).tar.gz \
|
sudo tar -czf myp-logs-$(date +%Y%m%d).tar.gz \
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -2,18 +2,19 @@
|
|||||||
|
|
||||||
## Übersicht der Änderungen
|
## Übersicht der Änderungen
|
||||||
|
|
||||||
Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges, benutzerfreundliches Setup-System.
|
Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges, benutzerfreundliches Setup-System mit **vereinfachten 2 Installationsmodi**.
|
||||||
|
|
||||||
## 🔄 Strukturelle Änderungen
|
## 🔄 Strukturelle Änderungen
|
||||||
|
|
||||||
### Neue Dateien
|
### Neue Dateien
|
||||||
|
|
||||||
- **`setup.sh`** - Konsolidiertes Hauptinstallationsskript mit Menüführung
|
- **`setup.sh`** - Konsolidiertes Hauptinstallationsskript mit **2 Hauptoptionen**
|
||||||
- **`systemd/`** - Neues Verzeichnis für alle systemd-Service-Dateien
|
- **`systemd/`** - Neues Verzeichnis für alle systemd-Service-Dateien
|
||||||
- `systemd/myp-https.service`
|
- `systemd/myp-https.service`
|
||||||
- `systemd/myp-kiosk.service`
|
- `systemd/myp-kiosk.service`
|
||||||
- `systemd/kiosk-watchdog.service`
|
- `systemd/kiosk-watchdog.service`
|
||||||
- `systemd/kiosk-watchdog-python.service`
|
- `systemd/kiosk-watchdog-python.service`
|
||||||
|
- `systemd/myp-firewall.service` - **Erweiterte Firewall-Konfiguration**
|
||||||
- **`docs/SETUP_ANLEITUNG.md`** - Detaillierte Anleitung für das neue Setup-System
|
- **`docs/SETUP_ANLEITUNG.md`** - Detaillierte Anleitung für das neue Setup-System
|
||||||
|
|
||||||
### Entfernte Dateien
|
### Entfernte Dateien
|
||||||
@ -27,49 +28,50 @@ Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges,
|
|||||||
- **`README.md`** - Vollständig überarbeitet für neues Setup-System
|
- **`README.md`** - Vollständig überarbeitet für neues Setup-System
|
||||||
- **Version erhöht auf 4.0.0**
|
- **Version erhöht auf 4.0.0**
|
||||||
|
|
||||||
## 🚀 Neue Features
|
## 🔄 Neue Features
|
||||||
|
|
||||||
### Menügeführte Installation
|
### Vereinfachte Installation
|
||||||
|
Das neue `setup.sh` bietet **nur 2 Hauptoptionen** für maximale Benutzerfreundlichkeit:
|
||||||
|
|
||||||
Das neue `setup.sh` bietet vier verschiedene Installationsmodi:
|
1. **Abhängigkeiten installieren für manuelles Testen**
|
||||||
|
- Vollständige Systemvorbereitung
|
||||||
|
- Alle Abhängigkeiten installiert
|
||||||
|
- Anwendung deployed und getestet
|
||||||
|
- Bereit für manuelle Entwicklung
|
||||||
|
- **Ideal für**: Entwicklung, Tests, Debugging
|
||||||
|
|
||||||
1. **Nur Abhängigkeiten installieren**
|
2. **Vollständige Kiosk-Installation mit Remote-Zugang**
|
||||||
|
- **Automatischer Kiosk-Modus** beim Boot
|
||||||
|
- **SSH-Zugang**: `user:raspberry`
|
||||||
|
- **RDP-Zugang**: `root:744563017196A` mit XFCE
|
||||||
|
- **Erweiterte Firewall**: 192.168.0.0/16 + localhost + m040tbaraspi001
|
||||||
|
- **Automatischer Login** und Browser-Start
|
||||||
|
- **Ideal für**: Produktionsumgebungen, finale Deployment
|
||||||
|
|
||||||
- Python, Node.js, SSL-Zertifikate
|
### Erweiterte Firewall-Konfiguration
|
||||||
- Anwendungsdeployment
|
- **Netzwerk-Bereich**: `192.168.0.0/16` (erweitert von /24)
|
||||||
- Minimaler Funktionstest
|
- **Localhost-Support**: IPv4 und IPv6
|
||||||
- Ideal für Entwicklung
|
- **Hostname-Integration**: Automatische Erkennung lokaler und Remote-Hostnames
|
||||||
2. **Finale Kiosk-Installation**
|
- **Spezifischer Remote-Host**: `m040tbaraspi001`
|
||||||
|
- **Automatische Konfiguration** beim Systemstart
|
||||||
|
|
||||||
- Vollständige Produktionsinstallation
|
### Automatischer Kiosk-Start
|
||||||
- Desktop-Environment-Entfernung
|
- **Vollautomatische Konfiguration** ohne manuelle Eingriffe
|
||||||
- Kiosk-Benutzer-Setup
|
- **X-Server-Autostart** beim Login
|
||||||
- Service-Aktivierung
|
- **Browser-Autostart** mit HTTPS-Backend-Erkennung
|
||||||
3. **Nur Services installieren**
|
- **Robuste Fehlerbehandlung** und Fallback-Mechanismen
|
||||||
|
- **Optimierte Performance** für Kiosk-Umgebungen
|
||||||
|
|
||||||
- Service-Updates ohne Systemänderungen
|
### Erweiterte Netzwerk-Sicherheit
|
||||||
- Systemd-Konfiguration neu laden
|
- **IPv6 vollständig deaktiviert** auf allen Ebenen (GRUB, Kernel, Firewall)
|
||||||
- Optional: Services aktivieren
|
- **IP-Spoofing-Schutz** mit Reverse Path Filtering
|
||||||
4. **System-Test**
|
- **SYN-Flood-Schutz** mit optimierten TCP-Einstellungen
|
||||||
|
- **DDoS-Abwehr** durch Broadcast-Ping-Schutz
|
||||||
- HTTPS-Verbindungstest
|
- **TCP-RFC-Compliance** verhindert aggressive Paketwiederholungen
|
||||||
- SSL-Zertifikat-Validierung
|
- **Optimierte Netzwerk-Performance** durch TCP-Window-Skalierung
|
||||||
- Service-Status-Überprüfung
|
- **Anti-Fingerprinting** durch deaktivierte TCP-Timestamps
|
||||||
- Systemressourcen-Monitoring
|
- **Verdächtige Pakete werden geloggt** (Martian-Pakete)
|
||||||
|
- **Paketweiterleitung deaktiviert** (kein Router-Verhalten)
|
||||||
### Verbesserte Modularität
|
|
||||||
|
|
||||||
- **Getrennte Installationsphasen** für bessere Kontrolle
|
|
||||||
- **Fallback-Mechanismen** für robuste Installation
|
|
||||||
- **Intelligente Abhängigkeitserkennung**
|
|
||||||
- **Automatische Fehlerbehandlung**
|
|
||||||
|
|
||||||
### Erweiterte Logging-Funktionen
|
|
||||||
|
|
||||||
- **Farbkodierte Ausgabe** für bessere Lesbarkeit
|
|
||||||
- **Detailliertes Installationslog** (`/var/log/myp-install.log`)
|
|
||||||
- **Strukturierte Fehlermeldungen**
|
|
||||||
- **Fortschrittsanzeigen**
|
|
||||||
|
|
||||||
## 🔧 Technische Verbesserungen
|
## 🔧 Technische Verbesserungen
|
||||||
|
|
||||||
|
@ -1 +1,471 @@
|
|||||||
|
# MYP Druckerverwaltung - Debian/Linux Kiosk-Installation
|
||||||
|
|
||||||
|
## Übersicht
|
||||||
|
|
||||||
|
Diese Anleitung beschreibt die Installation der MYP Druckerverwaltung als vollständigen Kiosk-Modus auf Debian/Linux-Systemen (insbesondere Raspberry Pi OS). Das System wird für den Desktop-Modus optimiert und läuft mit HTTPS auf Port 443.
|
||||||
|
|
||||||
|
## Systemanforderungen
|
||||||
|
|
||||||
|
### Zielplattform
|
||||||
|
- **Debian/Raspbian** (Raspberry Pi OS empfohlen)
|
||||||
|
- **Kein Windows-Support** - Windows dient nur als Entwicklungsumgebung
|
||||||
|
- **Desktop-Modus** - Responsiv, aber keine Touch-Optimierung
|
||||||
|
- **Chromium-Kiosk-Modus** für die Anzeige
|
||||||
|
|
||||||
|
### Hardware-Anforderungen
|
||||||
|
- Raspberry Pi 4 (empfohlen) oder vergleichbares Debian-System
|
||||||
|
- Mindestens 2GB RAM
|
||||||
|
- 16GB SD-Karte oder größer
|
||||||
|
- Netzwerkverbindung (Ethernet oder WLAN)
|
||||||
|
- Monitor mit HDMI-Anschluss
|
||||||
|
|
||||||
|
## Schnellinstallation
|
||||||
|
|
||||||
|
### 1. Repository klonen
|
||||||
|
```bash
|
||||||
|
git clone <repository-url>
|
||||||
|
cd backend
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Installationsskript ausführen
|
||||||
|
```bash
|
||||||
|
sudo chmod +x combined.sh
|
||||||
|
sudo ./combined.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Installationsoptionen
|
||||||
|
Das Skript bietet folgende Optionen:
|
||||||
|
|
||||||
|
1. **System-Abhängigkeiten installieren**
|
||||||
|
- Python 3, Node.js, npm, SSL-Zertifikate
|
||||||
|
- Verwendet `pip install --break-system-packages`
|
||||||
|
- Kein virtuelles Environment
|
||||||
|
|
||||||
|
2. **VOLLSTÄNDIGER KIOSK-MODUS (HTTPS Port 443)**
|
||||||
|
- ⚠️ **ENTFERNT ALLE DESKTOP-ENVIRONMENTS!**
|
||||||
|
- Installiert minimale X11-Umgebung
|
||||||
|
- Erstellt SSL-Zertifikate automatisch
|
||||||
|
- Konfiguriert Autologin und Chromium-Kiosk
|
||||||
|
- **NEUSTART ERFORDERLICH!**
|
||||||
|
|
||||||
|
## Detaillierte Installation
|
||||||
|
|
||||||
|
### Schritt 1: System vorbereiten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Als Root ausführen
|
||||||
|
sudo su
|
||||||
|
|
||||||
|
# System aktualisieren
|
||||||
|
apt-get update && apt-get upgrade -y
|
||||||
|
|
||||||
|
# Grundlegende Tools installieren
|
||||||
|
apt-get install -y curl wget git nano htop
|
||||||
|
```
|
||||||
|
|
||||||
|
### Schritt 2: Abhängigkeiten installieren
|
||||||
|
|
||||||
|
Das Installationsskript installiert automatisch:
|
||||||
|
|
||||||
|
#### Python-Umgebung
|
||||||
|
- Python 3.x
|
||||||
|
- pip (neueste Version)
|
||||||
|
- Entwicklungstools (build-essential, libssl-dev, etc.)
|
||||||
|
|
||||||
|
#### Node.js und npm
|
||||||
|
- Node.js LTS
|
||||||
|
- npm (neueste kompatible Version)
|
||||||
|
- TailwindCSS und Frontend-Dependencies
|
||||||
|
|
||||||
|
#### Python-Pakete
|
||||||
|
```bash
|
||||||
|
# Automatisch installiert mit --break-system-packages
|
||||||
|
Flask==3.1.1
|
||||||
|
Flask-Login==0.6.3
|
||||||
|
Flask-WTF==1.2.1
|
||||||
|
SQLAlchemy==2.0.36
|
||||||
|
bcrypt==4.2.1
|
||||||
|
cryptography==44.0.0
|
||||||
|
Werkzeug==3.1.3
|
||||||
|
requests==2.32.3
|
||||||
|
psutil==6.1.1
|
||||||
|
gunicorn==23.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Schritt 3: SSL-Zertifikate
|
||||||
|
|
||||||
|
#### Automatische Generierung
|
||||||
|
Das System generiert automatisch selbstsignierte SSL-Zertifikate:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Zertifikate werden erstellt in:
|
||||||
|
/opt/myp/certs/localhost/localhost.crt
|
||||||
|
/opt/myp/certs/localhost/localhost.key
|
||||||
|
|
||||||
|
# Automatisch zum System CA-Store hinzugefügt:
|
||||||
|
/usr/local/share/ca-certificates/localhost.crt
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Manuelle Zertifikat-Generierung
|
||||||
|
```bash
|
||||||
|
# Falls erforderlich, manuell generieren:
|
||||||
|
sudo python3 -c "
|
||||||
|
import sys; sys.path.insert(0, '/opt/myp')
|
||||||
|
from utils.ssl_config import ensure_ssl_certificates
|
||||||
|
ensure_ssl_certificates('/opt/myp', True)
|
||||||
|
"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Schritt 4: Systemd-Services
|
||||||
|
|
||||||
|
#### HTTPS Backend-Service
|
||||||
|
```bash
|
||||||
|
# Service-Datei: /etc/systemd/system/myp-https.service
|
||||||
|
sudo systemctl enable myp-https.service
|
||||||
|
sudo systemctl start myp-https.service
|
||||||
|
|
||||||
|
# Status prüfen
|
||||||
|
sudo systemctl status myp-https.service
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Kiosk-Browser-Service
|
||||||
|
```bash
|
||||||
|
# Service-Datei: /etc/systemd/system/myp-kiosk.service
|
||||||
|
sudo systemctl enable myp-kiosk.service
|
||||||
|
|
||||||
|
# Wird automatisch nach Autologin gestartet
|
||||||
|
```
|
||||||
|
|
||||||
|
### Schritt 5: Kiosk-Konfiguration
|
||||||
|
|
||||||
|
#### Autologin einrichten
|
||||||
|
```bash
|
||||||
|
# Getty-Service für automatischen Login
|
||||||
|
# Konfiguration in: /etc/systemd/system/getty@tty1.service.d/override.conf
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=
|
||||||
|
ExecStart=-/sbin/agetty --autologin kiosk --noclear %I $TERM
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Browser-Konfiguration
|
||||||
|
```bash
|
||||||
|
# Chromium-Kiosk startet automatisch mit:
|
||||||
|
# - Vollbildmodus
|
||||||
|
# - SSL-Zertifikat-Ignorierung für localhost
|
||||||
|
# - Optimierte Performance-Einstellungen
|
||||||
|
# - URL: https://localhost:443
|
||||||
|
```
|
||||||
|
|
||||||
|
## Konfiguration
|
||||||
|
|
||||||
|
### Netzwerk-Zugriff
|
||||||
|
|
||||||
|
#### HTTPS-URLs
|
||||||
|
- **Lokal**: `https://localhost:443`
|
||||||
|
- **Netzwerk**: `https://<raspberry-pi-ip>:443`
|
||||||
|
|
||||||
|
#### Firewall (falls aktiviert)
|
||||||
|
```bash
|
||||||
|
# Port 443 öffnen
|
||||||
|
sudo ufw allow 443/tcp
|
||||||
|
```
|
||||||
|
|
||||||
|
### SSL-Zertifikat für Netzwerk-Zugriff
|
||||||
|
|
||||||
|
Für Zugriff von anderen Geräten im Netzwerk:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Zertifikat mit IP-Adresse generieren
|
||||||
|
sudo python3 -c "
|
||||||
|
import sys; sys.path.insert(0, '/opt/myp')
|
||||||
|
from utils.ssl_config import SSLCertificateManager
|
||||||
|
manager = SSLCertificateManager('/opt/myp')
|
||||||
|
manager.generate_ssl_certificate(force_regenerate=True)
|
||||||
|
"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Anwendungskonfiguration
|
||||||
|
|
||||||
|
#### Datenbank
|
||||||
|
- SQLite-Datenbank in `/opt/myp/database/`
|
||||||
|
- Automatische Backups in `/opt/myp/database/backups/`
|
||||||
|
|
||||||
|
#### Logs
|
||||||
|
- Anwendungslogs in `/opt/myp/logs/`
|
||||||
|
- Systemd-Logs: `journalctl -u myp-https -f`
|
||||||
|
|
||||||
|
#### Uploads
|
||||||
|
- Dateien in `/opt/myp/uploads/`
|
||||||
|
- Temporäre Dateien in `/opt/myp/uploads/temp/`
|
||||||
|
|
||||||
|
## Wartung und Überwachung
|
||||||
|
|
||||||
|
### Service-Management
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# HTTPS-Service
|
||||||
|
sudo systemctl start myp-https.service
|
||||||
|
sudo systemctl stop myp-https.service
|
||||||
|
sudo systemctl restart myp-https.service
|
||||||
|
sudo systemctl status myp-https.service
|
||||||
|
|
||||||
|
# Kiosk-Service
|
||||||
|
sudo systemctl start myp-kiosk.service
|
||||||
|
sudo systemctl stop myp-kiosk.service
|
||||||
|
sudo systemctl status myp-kiosk.service
|
||||||
|
|
||||||
|
# Logs anzeigen
|
||||||
|
sudo journalctl -u myp-https -f
|
||||||
|
sudo journalctl -u myp-kiosk -f
|
||||||
|
```
|
||||||
|
|
||||||
|
### Watchdog-Service
|
||||||
|
|
||||||
|
Der Watchdog-Service überwacht automatisch:
|
||||||
|
- HTTPS Backend-Erreichbarkeit
|
||||||
|
- SSL-Zertifikat-Gültigkeit
|
||||||
|
- Kiosk-Browser-Status
|
||||||
|
- Systemressourcen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Watchdog-Service verwalten
|
||||||
|
sudo systemctl enable kiosk-watchdog.service
|
||||||
|
sudo systemctl start kiosk-watchdog.service
|
||||||
|
|
||||||
|
# Watchdog-Logs
|
||||||
|
sudo tail -f /var/log/kiosk-watchdog.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### System-Tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# HTTPS-Erreichbarkeit testen
|
||||||
|
curl -k https://localhost:443
|
||||||
|
|
||||||
|
# SSL-Zertifikat prüfen
|
||||||
|
openssl s_client -connect localhost:443 -servername localhost
|
||||||
|
|
||||||
|
# Service-Status prüfen
|
||||||
|
sudo systemctl is-active myp-https
|
||||||
|
sudo systemctl is-active myp-kiosk
|
||||||
|
```
|
||||||
|
|
||||||
|
## Fehlerbehebung
|
||||||
|
|
||||||
|
### Häufige Probleme
|
||||||
|
|
||||||
|
#### 1. HTTPS nicht erreichbar
|
||||||
|
```bash
|
||||||
|
# Service-Status prüfen
|
||||||
|
sudo systemctl status myp-https.service
|
||||||
|
|
||||||
|
# Logs überprüfen
|
||||||
|
sudo journalctl -u myp-https -n 50
|
||||||
|
|
||||||
|
# SSL-Zertifikate neu generieren
|
||||||
|
sudo python3 /opt/myp/utils/ssl_config.py /opt/myp --force
|
||||||
|
sudo systemctl restart myp-https.service
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Kiosk-Browser startet nicht
|
||||||
|
```bash
|
||||||
|
# X-Server-Status prüfen
|
||||||
|
ps aux | grep X
|
||||||
|
|
||||||
|
# Kiosk-User-Session prüfen
|
||||||
|
sudo su - kiosk
|
||||||
|
echo $DISPLAY
|
||||||
|
|
||||||
|
# Browser manuell starten
|
||||||
|
DISPLAY=:0 chromium --kiosk https://localhost:443
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. SSL-Zertifikat-Fehler
|
||||||
|
```bash
|
||||||
|
# Zertifikat-Gültigkeit prüfen
|
||||||
|
openssl x509 -in /opt/myp/certs/localhost/localhost.crt -text -noout
|
||||||
|
|
||||||
|
# Zertifikat neu generieren
|
||||||
|
sudo rm -rf /opt/myp/certs/localhost/
|
||||||
|
sudo python3 /opt/myp/utils/ssl_config.py /opt/myp --force
|
||||||
|
sudo systemctl restart myp-https.service
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4. Hohe Speichernutzung
|
||||||
|
```bash
|
||||||
|
# Speicher-Status prüfen
|
||||||
|
free -h
|
||||||
|
|
||||||
|
# Browser-Cache leeren
|
||||||
|
sudo rm -rf /home/kiosk/.chromium-kiosk/Default/Cache/*
|
||||||
|
sudo rm -rf /home/kiosk/.cache/*
|
||||||
|
|
||||||
|
# System-Cache leeren
|
||||||
|
sudo sync
|
||||||
|
sudo echo 3 > /proc/sys/vm/drop_caches
|
||||||
|
```
|
||||||
|
|
||||||
|
### Log-Dateien
|
||||||
|
|
||||||
|
#### Anwendungslogs
|
||||||
|
```bash
|
||||||
|
# Hauptanwendung
|
||||||
|
tail -f /opt/myp/logs/app/app.log
|
||||||
|
|
||||||
|
# Authentifizierung
|
||||||
|
tail -f /opt/myp/logs/auth/auth.log
|
||||||
|
|
||||||
|
# Drucker-Management
|
||||||
|
tail -f /opt/myp/logs/printers/printers.log
|
||||||
|
|
||||||
|
# Job-Management
|
||||||
|
tail -f /opt/myp/logs/jobs/jobs.log
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Systemlogs
|
||||||
|
```bash
|
||||||
|
# HTTPS-Service
|
||||||
|
sudo journalctl -u myp-https -f
|
||||||
|
|
||||||
|
# Kiosk-Service
|
||||||
|
sudo journalctl -u myp-kiosk -f
|
||||||
|
|
||||||
|
# Watchdog-Service
|
||||||
|
sudo tail -f /var/log/kiosk-watchdog.log
|
||||||
|
|
||||||
|
# System-Boot
|
||||||
|
sudo journalctl -b
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sicherheit
|
||||||
|
|
||||||
|
### SSL/TLS-Konfiguration
|
||||||
|
- TLS 1.2+ erforderlich
|
||||||
|
- Starke Cipher-Suites
|
||||||
|
- Selbstsignierte Zertifikate für localhost
|
||||||
|
- Automatische Zertifikat-Erneuerung
|
||||||
|
|
||||||
|
### Netzwerk-Sicherheit
|
||||||
|
- HTTPS-only (kein HTTP)
|
||||||
|
- CSRF-Schutz aktiviert
|
||||||
|
- Session-Management
|
||||||
|
- Rate-Limiting
|
||||||
|
|
||||||
|
### System-Sicherheit
|
||||||
|
- Minimale X11-Umgebung
|
||||||
|
- Kiosk-User ohne Sudo-Rechte
|
||||||
|
- Systemd-Service-Isolation
|
||||||
|
- Read-only Systempartitionen (optional)
|
||||||
|
|
||||||
|
## Performance-Optimierung
|
||||||
|
|
||||||
|
### Browser-Optimierung
|
||||||
|
```bash
|
||||||
|
# Chromium-Flags für bessere Performance
|
||||||
|
--disable-background-mode
|
||||||
|
--disable-dev-shm-usage
|
||||||
|
--memory-pressure-off
|
||||||
|
--max_old_space_size=512
|
||||||
|
--disable-background-timer-throttling
|
||||||
|
```
|
||||||
|
|
||||||
|
### System-Optimierung
|
||||||
|
```bash
|
||||||
|
# GPU-Memory für Raspberry Pi
|
||||||
|
echo "gpu_mem=128" >> /boot/config.txt
|
||||||
|
|
||||||
|
# Swap-Datei optimieren
|
||||||
|
sudo dphys-swapfile swapoff
|
||||||
|
sudo sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=512/' /etc/dphys-swapfile
|
||||||
|
sudo dphys-swapfile setup
|
||||||
|
sudo dphys-swapfile swapon
|
||||||
|
```
|
||||||
|
|
||||||
|
### Datenbank-Optimierung
|
||||||
|
```bash
|
||||||
|
# SQLite-Optimierungen in der Anwendung
|
||||||
|
PRAGMA journal_mode=WAL;
|
||||||
|
PRAGMA synchronous=NORMAL;
|
||||||
|
PRAGMA cache_size=10000;
|
||||||
|
PRAGMA temp_store=memory;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Backup und Wiederherstellung
|
||||||
|
|
||||||
|
### Automatische Backups
|
||||||
|
```bash
|
||||||
|
# Datenbank-Backups
|
||||||
|
/opt/myp/database/backups/
|
||||||
|
|
||||||
|
# Konfiguration sichern
|
||||||
|
sudo tar -czf /opt/myp/backups/config-$(date +%Y%m%d).tar.gz \
|
||||||
|
/opt/myp/config/ \
|
||||||
|
/etc/systemd/system/myp-*.service \
|
||||||
|
/home/kiosk/.xinitrc \
|
||||||
|
/home/kiosk/.bashrc
|
||||||
|
```
|
||||||
|
|
||||||
|
### Wiederherstellung
|
||||||
|
```bash
|
||||||
|
# System neu installieren
|
||||||
|
sudo ./combined.sh
|
||||||
|
|
||||||
|
# Datenbank wiederherstellen
|
||||||
|
sudo cp backup.db /opt/myp/database/app.db
|
||||||
|
sudo chown root:root /opt/myp/database/app.db
|
||||||
|
|
||||||
|
# Services neustarten
|
||||||
|
sudo systemctl restart myp-https.service
|
||||||
|
```
|
||||||
|
|
||||||
|
## Updates
|
||||||
|
|
||||||
|
### Anwendungs-Updates
|
||||||
|
```bash
|
||||||
|
# Repository aktualisieren
|
||||||
|
cd /opt/myp
|
||||||
|
git pull origin main
|
||||||
|
|
||||||
|
# Dependencies aktualisieren
|
||||||
|
sudo pip3 install -r requirements.txt --break-system-packages --upgrade
|
||||||
|
sudo npm install
|
||||||
|
|
||||||
|
# Services neustarten
|
||||||
|
sudo systemctl restart myp-https.service
|
||||||
|
```
|
||||||
|
|
||||||
|
### System-Updates
|
||||||
|
```bash
|
||||||
|
# System aktualisieren
|
||||||
|
sudo apt-get update && sudo apt-get upgrade -y
|
||||||
|
|
||||||
|
# Nach Updates neustarten
|
||||||
|
sudo reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
## Support und Dokumentation
|
||||||
|
|
||||||
|
### Weitere Dokumentation
|
||||||
|
- `docs/API_DOCUMENTATION.md` - API-Referenz
|
||||||
|
- `docs/CONFIGURATION.md` - Konfigurationsoptionen
|
||||||
|
- `docs/TROUBLESHOOTING.md` - Erweiterte Fehlerbehebung
|
||||||
|
|
||||||
|
### Logs für Support
|
||||||
|
```bash
|
||||||
|
# Support-Informationen sammeln
|
||||||
|
sudo ./combined.sh # Option 5: System-Tests
|
||||||
|
|
||||||
|
# Log-Bundle erstellen
|
||||||
|
sudo tar -czf myp-logs-$(date +%Y%m%d).tar.gz \
|
||||||
|
/opt/myp/logs/ \
|
||||||
|
/var/log/kiosk-watchdog.log \
|
||||||
|
/var/log/myp-install.log
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Version**: 3.6.1
|
||||||
|
**Letzte Aktualisierung**: Automatisch generiert
|
||||||
|
**Plattform**: Debian/Linux (Raspberry Pi OS)
|
||||||
|
**Modus**: HTTPS Kiosk (Port 443)
|
@ -1 +1,206 @@
|
|||||||
|
# Log-Funktionalität Implementierung
|
||||||
|
|
||||||
|
## Problembeschreibung
|
||||||
|
Die System-Logs im Admin-Dashboard wurden nicht geladen. Die JavaScript-Funktionalität fehlte und die API-Endpunkte waren unvollständig implementiert.
|
||||||
|
|
||||||
|
## Durchgeführte Fixes
|
||||||
|
|
||||||
|
### 1. API-Endpunkte Implementiert
|
||||||
|
|
||||||
|
#### `/api/admin/logs` (GET)
|
||||||
|
- **Zweck**: Lädt System-Logs für das Admin-Dashboard
|
||||||
|
- **Features**:
|
||||||
|
- Multi-Format Log-Parser (unterstützt verschiedene Log-Formate)
|
||||||
|
- Level-Filter (ERROR, WARNING, INFO, DEBUG, CRITICAL, ALL)
|
||||||
|
- Suchfunktion in Log-Nachrichten
|
||||||
|
- Component-Filter nach Log-Kategorien
|
||||||
|
- Paginierung (limit/offset)
|
||||||
|
- Automatische Duplikat-Entfernung
|
||||||
|
- Sortierung nach Timestamp (neueste zuerst)
|
||||||
|
|
||||||
|
#### `/api/admin/logs/export` (GET)
|
||||||
|
- **Zweck**: Exportiert alle Log-Dateien als ZIP-Archiv
|
||||||
|
- **Features**:
|
||||||
|
- Sammelt alle .log Dateien aus dem logs-Verzeichnis
|
||||||
|
- Erstellt komprimierte ZIP-Datei
|
||||||
|
- Relativer Pfad-Erhalt in der ZIP-Struktur
|
||||||
|
- Automatische Dateinamen mit Timestamp
|
||||||
|
|
||||||
|
### 2. JavaScript-Funktionalität
|
||||||
|
|
||||||
|
#### Admin-Dashboard Logs-Management
|
||||||
|
```javascript
|
||||||
|
// Neue Funktionen hinzugefügt:
|
||||||
|
- loadLogs(level = null) // Lädt Logs mit Filter
|
||||||
|
- displayLogs(logs) // Zeigt Logs formatiert an
|
||||||
|
- formatLogTimestamp(timestamp) // Formatiert Zeitstempel
|
||||||
|
- escapeHtml(text) // HTML-Escape für Sicherheit
|
||||||
|
- exportLogs() // Exportiert Logs als Datei
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Event-Handler
|
||||||
|
- `#refresh-logs-btn` - Logs manuell aktualisieren
|
||||||
|
- `#export-logs-btn` - Logs exportieren
|
||||||
|
- `#log-level-filter` - Filter nach Log-Level
|
||||||
|
|
||||||
|
#### Automatisches Laden
|
||||||
|
- Logs werden automatisch geladen wenn:
|
||||||
|
- URL-Parameter `tab=logs` gesetzt ist
|
||||||
|
- Das Logs-Container-Element sichtbar ist
|
||||||
|
- Die Seite das erste Mal geladen wird und der Logs-Tab aktiv ist
|
||||||
|
|
||||||
|
### 3. HTML-Template Fixes
|
||||||
|
|
||||||
|
#### Progress Bar Fixes
|
||||||
|
- Entfernt problematische Jinja2-Style-Attribute aus HTML
|
||||||
|
- Verlagert Style-Definitionen in separaten `<style>`-Block
|
||||||
|
- Behebt Linter-Fehler in Zeilen 121, 147, 173, 206, 455
|
||||||
|
|
||||||
|
#### Log-Display Komponenten
|
||||||
|
- Verbesserte Log-Anzeige mit Level-spezifischen Farben
|
||||||
|
- Icons für verschiedene Log-Level (❌, ⚠️, ℹ️, 🔍, 🚨)
|
||||||
|
- Responsive Layout für Log-Einträge
|
||||||
|
- Hover-Effekte und Transitionen
|
||||||
|
|
||||||
|
### 4. Log-Format Unterstützung
|
||||||
|
|
||||||
|
#### Format 1: Standard Format
|
||||||
|
```
|
||||||
|
2025-06-01 00:34:08 - logger_name - [LEVEL] MESSAGE
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Format 2: Bracket Format
|
||||||
|
```
|
||||||
|
[2025-06-01 00:34:08] LEVEL: MESSAGE
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Format 3: Einfaches Format
|
||||||
|
```
|
||||||
|
MESSAGE (als INFO-Level behandelt)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Error Handling & Performance
|
||||||
|
|
||||||
|
#### Robuste Fehlerbehandlung
|
||||||
|
- Try-catch für jeden Log-Parser-Schritt
|
||||||
|
- Fallback bei nicht lesbaren Dateien
|
||||||
|
- Graceful Degradation bei API-Fehlern
|
||||||
|
|
||||||
|
#### Performance-Optimierungen
|
||||||
|
- Maximal 10 Log-Dateien verarbeitet
|
||||||
|
- Maximal 500 Zeilen pro Datei
|
||||||
|
- Maximal 50 Einträge pro Datei
|
||||||
|
- UTF-8 Encoding mit Fehler-Ignorierung
|
||||||
|
|
||||||
|
### 6. UI/UX Verbesserungen
|
||||||
|
|
||||||
|
#### Loading States
|
||||||
|
- Spinner während des Ladens
|
||||||
|
- Informative Fehlermeldungen
|
||||||
|
- "Erneut versuchen" Button bei Fehlern
|
||||||
|
|
||||||
|
#### Responsive Design
|
||||||
|
- Mobile-optimierte Log-Anzeige
|
||||||
|
- Hover-Effekte und Animationen
|
||||||
|
- Dark-Mode Unterstützung
|
||||||
|
|
||||||
|
#### Accessibility
|
||||||
|
- ARIA-Labels für Screen-Reader
|
||||||
|
- Tastatur-Navigation
|
||||||
|
- Semantische HTML-Struktur
|
||||||
|
|
||||||
|
## Verwendung
|
||||||
|
|
||||||
|
### Admin-Dashboard Zugriff
|
||||||
|
1. Als Administrator einloggen
|
||||||
|
2. Zum Admin-Dashboard navigieren
|
||||||
|
3. "Logs" Tab auswählen
|
||||||
|
4. Logs werden automatisch geladen
|
||||||
|
|
||||||
|
### Filter und Export
|
||||||
|
- **Filter nach Level**: Dropdown-Menü verwenden
|
||||||
|
- **Aktualisieren**: "Aktualisieren" Button klicken
|
||||||
|
- **Export**: "Export" Button für ZIP-Download
|
||||||
|
|
||||||
|
### API-Direktzugriff
|
||||||
|
```javascript
|
||||||
|
// Logs abrufen
|
||||||
|
fetch('/api/admin/logs?level=ERROR&limit=50')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => console.log(data.logs));
|
||||||
|
|
||||||
|
// Logs exportieren
|
||||||
|
window.location.href = '/api/admin/logs/export';
|
||||||
|
```
|
||||||
|
|
||||||
|
## Technische Details
|
||||||
|
|
||||||
|
### Abhängigkeiten
|
||||||
|
- **Frontend**: Admin-unified.js, Tailwind CSS
|
||||||
|
- **Backend**: Flask, SQLAlchemy, Python logging
|
||||||
|
- **Tools**: zipfile, glob, datetime
|
||||||
|
|
||||||
|
### Sicherheit
|
||||||
|
- Admin-Berechtigung erforderlich (`@admin_required`)
|
||||||
|
- CSRF-Token Validierung
|
||||||
|
- HTML-Escape für Log-Inhalte
|
||||||
|
- Input-Sanitization für Filter-Parameter
|
||||||
|
|
||||||
|
### Logs-Verzeichnis Struktur
|
||||||
|
```
|
||||||
|
backend/logs/
|
||||||
|
├── app/
|
||||||
|
├── auth/
|
||||||
|
├── jobs/
|
||||||
|
├── printers/
|
||||||
|
├── scheduler/
|
||||||
|
├── errors/
|
||||||
|
└── *.log (direkte Log-Dateien)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
### Manuelle Tests
|
||||||
|
1. ✅ Logs-Tab Laden
|
||||||
|
2. ✅ Level-Filter Funktionalität
|
||||||
|
3. ✅ Export-Funktionalität
|
||||||
|
4. ✅ Error-Handling bei fehlenden Logs
|
||||||
|
5. ✅ Auto-Loading bei Tab-Switch
|
||||||
|
|
||||||
|
### Browser-Kompatibilität
|
||||||
|
- ✅ Chrome/Edge (moderne Versionen)
|
||||||
|
- ✅ Firefox (moderne Versionen)
|
||||||
|
- ✅ Safari (moderne Versionen)
|
||||||
|
- ✅ Mobile Browser
|
||||||
|
|
||||||
|
## Bekannte Limitierungen
|
||||||
|
|
||||||
|
1. **Performance**: Bei sehr großen Log-Dateien (>10MB) kann das Laden langsam sein
|
||||||
|
2. **Memory**: Alle Logs werden im Speicher verarbeitet
|
||||||
|
3. **Real-time**: Logs werden nicht in Echtzeit aktualisiert (manueller Refresh nötig)
|
||||||
|
|
||||||
|
## Zukünftige Verbesserungen
|
||||||
|
|
||||||
|
1. **WebSocket Integration** für Real-time Log-Updates
|
||||||
|
2. **Paginierung UI** für bessere Navigation
|
||||||
|
3. **Erweiterte Filter** (Datum, Komponente, Benutzer)
|
||||||
|
4. **Log-Archivierung** und automatische Bereinigung
|
||||||
|
5. **Search Highlighting** in Log-Inhalten
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
**2025-06-01 - Initial Implementation**
|
||||||
|
- ✅ API-Endpunkte implementiert
|
||||||
|
- ✅ JavaScript-Funktionalität hinzugefügt
|
||||||
|
- ✅ HTML-Template Fixes
|
||||||
|
- ✅ Error-Handling verbessert
|
||||||
|
- ✅ Performance-Optimierungen
|
||||||
|
- ✅ UI/UX Verbesserungen
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
Bei Problemen mit der Log-Funktionalität:
|
||||||
|
1. Browser-Konsole auf Fehler prüfen
|
||||||
|
2. Netzwerk-Tab für API-Anfragen überprüfen
|
||||||
|
3. Server-Logs für Backend-Fehler analysieren
|
||||||
|
4. Admin-Berechtigung verifizieren
|
@ -27,9 +27,9 @@ Das neue konsolidierte `setup.sh` Skript ersetzt alle bisherigen Installationssk
|
|||||||
|
|
||||||
## Installationsmodi
|
## Installationsmodi
|
||||||
|
|
||||||
### 1. Nur Abhängigkeiten installieren
|
### 1. Abhängigkeiten installieren für manuelles Testen
|
||||||
|
|
||||||
**Zweck**: System vorbereiten ohne Kiosk-Modus zu aktivieren
|
**Zweck**: System vollständig vorbereiten für manuelle Tests und Entwicklung
|
||||||
|
|
||||||
**Was wird installiert**:
|
**Was wird installiert**:
|
||||||
- Python 3 und pip
|
- Python 3 und pip
|
||||||
@ -49,21 +49,31 @@ sudo ./setup.sh
|
|||||||
|
|
||||||
**Ideal für**:
|
**Ideal für**:
|
||||||
- Entwicklungsumgebungen
|
- Entwicklungsumgebungen
|
||||||
- Erste Installation und Tests
|
- Manuelle Tests und Debugging
|
||||||
- Systeme ohne Kiosk-Anforderungen
|
- Systeme ohne automatischen Kiosk-Modus
|
||||||
|
- Erste Installation und Validierung
|
||||||
|
|
||||||
### 2. Finale Kiosk-Installation
|
**Nach der Installation**:
|
||||||
|
- HTTPS-Backend manuell starten: `cd /opt/myp && python3 app.py`
|
||||||
|
- System bereit für Entwicklung und Tests
|
||||||
|
|
||||||
**Zweck**: Vollständige Kiosk-Modus-Konfiguration
|
### 2. Vollständige Kiosk-Installation mit Remote-Zugang
|
||||||
|
|
||||||
|
**Zweck**: Komplette Produktionsinstallation mit automatischem Kiosk-Modus
|
||||||
|
|
||||||
**Was wird konfiguriert**:
|
**Was wird konfiguriert**:
|
||||||
- Alle Abhängigkeiten (falls noch nicht installiert)
|
- Alle Abhängigkeiten (automatisch falls noch nicht installiert)
|
||||||
- Desktop-Environments entfernen
|
- Desktop-Environments vollständig entfernen
|
||||||
- Minimale X11-Umgebung installieren
|
- Minimale X11-Umgebung installieren
|
||||||
- Kiosk-Benutzer erstellen
|
- **SSH-Server** mit Benutzer `user:raspberry`
|
||||||
- Automatischen Login konfigurieren
|
- **RDP-Server (xrdp)** mit TLS für `root:744563017196A`
|
||||||
|
- **XFCE Desktop-Umgebung** für RDP-Sessions
|
||||||
|
- **firewalld** mit erweiterten Netzwerk-Regeln
|
||||||
|
- Kiosk-Benutzer erstellen und konfigurieren
|
||||||
|
- **Automatischen Login** auf tty1 konfigurieren
|
||||||
|
- **Automatischen Kiosk-Start** beim Login einrichten
|
||||||
- Systemd-Services installieren und aktivieren
|
- Systemd-Services installieren und aktivieren
|
||||||
- System-Test durchführen
|
- Umfassende System-Tests
|
||||||
- Alte Dateien aufräumen
|
- Alte Dateien aufräumen
|
||||||
|
|
||||||
**Verwendung**:
|
**Verwendung**:
|
||||||
@ -75,48 +85,13 @@ sudo ./setup.sh
|
|||||||
**Ideal für**:
|
**Ideal für**:
|
||||||
- Produktionsumgebungen
|
- Produktionsumgebungen
|
||||||
- Dedizierte Kiosk-Systeme
|
- Dedizierte Kiosk-Systeme
|
||||||
- Finale Deployment
|
- Finale Deployment mit Remote-Administration
|
||||||
|
- Vollautomatische Systeme
|
||||||
|
|
||||||
### 3. Nur Services installieren
|
**Nach der Installation**:
|
||||||
|
- **Neustart erforderlich**: `sudo reboot`
|
||||||
**Zweck**: Systemd-Services aktualisieren ohne Systemänderungen
|
- Automatischer Kiosk-Modus beim Boot
|
||||||
|
- Remote-Zugang verfügbar über SSH und RDP
|
||||||
**Was wird gemacht**:
|
|
||||||
- Service-Dateien aus `systemd/` nach `/etc/systemd/system/` kopieren
|
|
||||||
- systemd-Konfiguration neu laden
|
|
||||||
- Optional: Services aktivieren und starten
|
|
||||||
|
|
||||||
**Verwendung**:
|
|
||||||
```bash
|
|
||||||
sudo ./setup.sh
|
|
||||||
# Wähle Option 3
|
|
||||||
```
|
|
||||||
|
|
||||||
**Ideal für**:
|
|
||||||
- Service-Updates
|
|
||||||
- Konfigurationsänderungen
|
|
||||||
- Wartung bestehender Installationen
|
|
||||||
|
|
||||||
### 4. System-Test
|
|
||||||
|
|
||||||
**Zweck**: Funktionalität der Installation überprüfen
|
|
||||||
|
|
||||||
**Was wird getestet**:
|
|
||||||
- HTTPS-Verbindung zu localhost:443
|
|
||||||
- SSL-Zertifikat-Gültigkeit
|
|
||||||
- Service-Status aller systemd-Services
|
|
||||||
- Systemressourcen
|
|
||||||
|
|
||||||
**Verwendung**:
|
|
||||||
```bash
|
|
||||||
sudo ./setup.sh
|
|
||||||
# Wähle Option 4
|
|
||||||
```
|
|
||||||
|
|
||||||
**Ideal für**:
|
|
||||||
- Fehlerdiagnose
|
|
||||||
- Wartung
|
|
||||||
- Regelmäßige Systemprüfungen
|
|
||||||
|
|
||||||
## Systemd-Services
|
## Systemd-Services
|
||||||
|
|
||||||
@ -145,6 +120,17 @@ sudo ./setup.sh
|
|||||||
- **Zweck**: Python-basierte Überwachung
|
- **Zweck**: Python-basierte Überwachung
|
||||||
- **Ergänzung**: Zusätzliche Überwachungsfunktionen
|
- **Ergänzung**: Zusätzliche Überwachungsfunktionen
|
||||||
|
|
||||||
|
### myp-firewall.service
|
||||||
|
- **Zweck**: Automatische Firewall-Konfiguration beim Systemstart
|
||||||
|
- **Benutzer**: root
|
||||||
|
- **Abhängigkeiten**: firewalld.service
|
||||||
|
- **Funktionen**:
|
||||||
|
- Zone `myp-backend` für Netzwerk 192.168.0.0/24
|
||||||
|
- HTTPS-Port 443/tcp
|
||||||
|
- SSH-Port 22/tcp
|
||||||
|
- RDP-Port 3389/tcp
|
||||||
|
- Automatische Aktivierung beim Boot
|
||||||
|
|
||||||
## Konfiguration
|
## Konfiguration
|
||||||
|
|
||||||
### SSL-Zertifikate
|
### SSL-Zertifikate
|
||||||
@ -166,6 +152,79 @@ sudo ./setup.sh
|
|||||||
- Gruppen: audio, video, input, dialout, plugdev, users
|
- Gruppen: audio, video, input, dialout, plugdev, users
|
||||||
- Passwortlos für Sicherheit
|
- Passwortlos für Sicherheit
|
||||||
|
|
||||||
|
### Remote-Zugang
|
||||||
|
|
||||||
|
**SSH-Zugang**:
|
||||||
|
- Benutzer: `user`
|
||||||
|
- Passwort: `raspberry`
|
||||||
|
- Port: 22
|
||||||
|
- Sudo-Berechtigung: ja
|
||||||
|
|
||||||
|
**RDP-Zugang**:
|
||||||
|
- Benutzer: `root`
|
||||||
|
- Passwort: `744563017196A`
|
||||||
|
- Port: 3389
|
||||||
|
- Desktop: XFCE
|
||||||
|
- Verschlüsselung: TLS 1.2/1.3
|
||||||
|
|
||||||
|
**Firewall-Konfiguration**:
|
||||||
|
- Zone: `myp-backend`
|
||||||
|
- Quell-Netzwerke:
|
||||||
|
- `192.168.0.0/16` (erweitertes lokales Netzwerk)
|
||||||
|
- `127.0.0.1/32` (localhost IPv4)
|
||||||
|
- `raspberrypi` (lokaler Hostname - automatisch gesetzt)
|
||||||
|
- `m040tbaraspi001` (Frontend-Server - falls auflösbar)
|
||||||
|
- Erlaubte Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)
|
||||||
|
- **IPv6 vollständig deaktiviert und blockiert**
|
||||||
|
- Automatische Konfiguration beim Systemstart
|
||||||
|
|
||||||
|
### Hostname-Konfiguration
|
||||||
|
|
||||||
|
**Automatische Hostname-Setzung**:
|
||||||
|
- Lokaler Hostname wird automatisch auf `raspberrypi` gesetzt
|
||||||
|
- `/etc/hostname` und `/etc/hosts` werden entsprechend aktualisiert
|
||||||
|
- Hostname-Auflösung wird getestet und konfiguriert
|
||||||
|
- Firewall-Integration für lokalen Hostname
|
||||||
|
|
||||||
|
**Frontend-Server Integration**:
|
||||||
|
- `m040tbaraspi001` wird als separater Frontend-Server behandelt
|
||||||
|
- Automatische IP-Auflösung für `m040tbaraspi001` und `m040tbaraspi001.de040.corpintra.net`
|
||||||
|
- Firewall-Regel wird hinzugefügt, falls der Server auflösbar ist
|
||||||
|
- Keine Abhängigkeit - System funktioniert auch ohne Frontend-Server
|
||||||
|
|
||||||
|
### Netzwerk-Sicherheit
|
||||||
|
|
||||||
|
**IPv6-Deaktivierung**:
|
||||||
|
- Vollständige Deaktivierung auf Kernel-Ebene
|
||||||
|
- GRUB-Konfiguration: `ipv6.disable=1`
|
||||||
|
- Sysctl-Konfiguration für alle Interfaces
|
||||||
|
- NetworkManager/systemd-networkd Konfiguration
|
||||||
|
- Firewall blockiert alle IPv6-Pakete
|
||||||
|
|
||||||
|
**IP-Spoofing-Schutz**:
|
||||||
|
- Reverse Path Filtering aktiviert
|
||||||
|
- Source Routing deaktiviert
|
||||||
|
- ICMP Redirects ignoriert
|
||||||
|
- Secure Redirects deaktiviert
|
||||||
|
|
||||||
|
**DDoS-Schutz**:
|
||||||
|
- SYN-Flood-Schutz mit SYN-Cookies
|
||||||
|
- Optimierte TCP-Backlog-Größe
|
||||||
|
- Begrenzte SYN/SYNACK-Wiederholungen
|
||||||
|
- Broadcast-Ping-Schutz (Smurf-Angriffe)
|
||||||
|
|
||||||
|
**TCP-Optimierungen**:
|
||||||
|
- RFC-konforme Retry-Limits
|
||||||
|
- Optimierte Window-Skalierung
|
||||||
|
- Deaktivierte TCP-Timestamps (Anti-Fingerprinting)
|
||||||
|
- Deaktivierte TCP-SACK (Sicherheit)
|
||||||
|
- Time-Wait-Assassination-Schutz
|
||||||
|
|
||||||
|
**Logging und Monitoring**:
|
||||||
|
- Martian-Pakete werden geloggt
|
||||||
|
- Verdächtige Netzwerkaktivitäten protokolliert
|
||||||
|
- Bogus ICMP-Antworten ignoriert
|
||||||
|
|
||||||
### Verzeichnisstruktur
|
### Verzeichnisstruktur
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -209,7 +268,7 @@ sudo ./setup.sh
|
|||||||
3. **SSL-Zertifikat-Probleme**
|
3. **SSL-Zertifikat-Probleme**
|
||||||
```bash
|
```bash
|
||||||
sudo ./setup.sh
|
sudo ./setup.sh
|
||||||
# Option 4 für System-Test
|
# Option 5 für System-Test
|
||||||
```
|
```
|
||||||
|
|
||||||
4. **Service-Neustart**
|
4. **Service-Neustart**
|
||||||
@ -218,20 +277,67 @@ sudo ./setup.sh
|
|||||||
sudo systemctl restart kiosk-watchdog
|
sudo systemctl restart kiosk-watchdog
|
||||||
```
|
```
|
||||||
|
|
||||||
|
5. **SSH-Verbindung fehlgeschlagen**
|
||||||
|
```bash
|
||||||
|
# SSH-Service prüfen
|
||||||
|
sudo systemctl status ssh
|
||||||
|
|
||||||
|
# SSH-Port prüfen
|
||||||
|
sudo ss -tlnp | grep :22
|
||||||
|
|
||||||
|
# Firewall-Regeln prüfen
|
||||||
|
sudo firewall-cmd --list-all
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **RDP-Verbindung fehlgeschlagen**
|
||||||
|
```bash
|
||||||
|
# xrdp-Service prüfen
|
||||||
|
sudo systemctl status xrdp
|
||||||
|
|
||||||
|
# RDP-Port prüfen
|
||||||
|
sudo ss -tlnp | grep :3389
|
||||||
|
|
||||||
|
# xrdp-Logs prüfen
|
||||||
|
sudo journalctl -u xrdp -f
|
||||||
|
```
|
||||||
|
|
||||||
|
7. **Firewall-Probleme**
|
||||||
|
```bash
|
||||||
|
# Firewall-Status prüfen
|
||||||
|
sudo systemctl status firewalld
|
||||||
|
|
||||||
|
# Aktive Zonen anzeigen
|
||||||
|
sudo firewall-cmd --get-active-zones
|
||||||
|
|
||||||
|
# Zone-Konfiguration prüfen
|
||||||
|
sudo firewall-cmd --zone=myp-backend --list-all
|
||||||
|
|
||||||
|
# Firewall neu konfigurieren
|
||||||
|
sudo ./setup.sh
|
||||||
|
# Option 4 für Remote-Zugang
|
||||||
|
```
|
||||||
|
|
||||||
### Manuelle Service-Verwaltung
|
### Manuelle Service-Verwaltung
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Services aktivieren
|
# Services aktivieren
|
||||||
sudo systemctl enable myp-https myp-kiosk kiosk-watchdog
|
sudo systemctl enable myp-https myp-kiosk kiosk-watchdog myp-firewall
|
||||||
|
|
||||||
# Services starten
|
# Services starten
|
||||||
sudo systemctl start myp-https myp-kiosk kiosk-watchdog
|
sudo systemctl start myp-https myp-kiosk kiosk-watchdog
|
||||||
|
|
||||||
|
# Remote-Services aktivieren
|
||||||
|
sudo systemctl enable ssh xrdp firewalld
|
||||||
|
sudo systemctl start ssh xrdp firewalld
|
||||||
|
|
||||||
# Status prüfen
|
# Status prüfen
|
||||||
sudo systemctl status myp-https myp-kiosk kiosk-watchdog
|
sudo systemctl status myp-https myp-kiosk kiosk-watchdog myp-firewall
|
||||||
|
sudo systemctl status ssh xrdp firewalld
|
||||||
|
|
||||||
# Logs anzeigen
|
# Logs anzeigen
|
||||||
sudo journalctl -u myp-https -f
|
sudo journalctl -u myp-https -f
|
||||||
|
sudo journalctl -u xrdp -f
|
||||||
|
sudo journalctl -u firewalld -f
|
||||||
```
|
```
|
||||||
|
|
||||||
## Wartung
|
## Wartung
|
||||||
@ -254,7 +360,7 @@ sudo journalctl -u myp-https -f
|
|||||||
4. **System-Test**
|
4. **System-Test**
|
||||||
```bash
|
```bash
|
||||||
sudo ./setup.sh
|
sudo ./setup.sh
|
||||||
# Option 4
|
# Option 5
|
||||||
```
|
```
|
||||||
|
|
||||||
## Sicherheit
|
## Sicherheit
|
||||||
@ -299,7 +405,7 @@ Wenn Sie eine bestehende Installation mit `combined.sh` oder `installer.sh` habe
|
|||||||
Bei Problemen:
|
Bei Problemen:
|
||||||
|
|
||||||
1. **Log-Dateien prüfen**
|
1. **Log-Dateien prüfen**
|
||||||
2. **System-Test durchführen** (Option 4)
|
2. **System-Test durchführen** (Option 5)
|
||||||
3. **Services neu starten**
|
3. **Services neu starten**
|
||||||
4. **Installation wiederholen** mit entsprechender Option
|
4. **Installation wiederholen** mit entsprechender Option
|
||||||
|
|
||||||
|
@ -1 +1,269 @@
|
|||||||
|
# Wartungs-Modal Reparatur - Dokumentation
|
||||||
|
|
||||||
|
## Problem-Analyse
|
||||||
|
|
||||||
|
Das Wartungs-Modal im Admin-Bereich funktionierte nicht korrekt aufgrund mehrerer Probleme:
|
||||||
|
|
||||||
|
### 1. Fehlende `setLoadingState` Methode
|
||||||
|
- **Problem**: Die JavaScript-Klasse `MaintenanceModal` rief `this.setLoadingState()` auf, aber die Methode war nicht definiert
|
||||||
|
- **Symptom**: JavaScript-Fehler beim Ausführen von Wartungsaktionen
|
||||||
|
- **Lösung**: Vollständige `setLoadingState` Methode implementiert mit:
|
||||||
|
- Button-Deaktivierung während Loading
|
||||||
|
- Spinner-Animation hinzufügen/entfernen
|
||||||
|
- Loading-Overlay-Management
|
||||||
|
|
||||||
|
### 2. Fehlende API-Endpunkte
|
||||||
|
- **Problem**: Das Modal rief API-Endpunkte auf, die nicht existierten:
|
||||||
|
- `/api/admin/maintenance/clear-cache`
|
||||||
|
- `/api/admin/maintenance/optimize-database`
|
||||||
|
- `/api/admin/maintenance/create-backup`
|
||||||
|
- **Symptom**: 404-Fehler bei API-Aufrufen
|
||||||
|
- **Lösung**: Vollständige API-Endpunkte implementiert
|
||||||
|
|
||||||
|
### 3. Template-Syntax-Fehler
|
||||||
|
- **Problem**: Jinja2-Template-Syntax `{{ url_for("optimization_settings") }}` wurde im JavaScript verwendet
|
||||||
|
- **Symptom**: JavaScript-Syntax-Fehler
|
||||||
|
- **Lösung**: Direkte URL-Navigation implementiert
|
||||||
|
|
||||||
|
### 4. Doppelte Event-Listener / Event-Handler-Konflikt ⚠️ **KRITISCH**
|
||||||
|
- **Problem**: Modal wurde mehrfach initialisiert und es gab konkurrierende Event-Handler
|
||||||
|
- **Symptom**: Modal öffnet sich und schließt sich sofort wieder automatisch
|
||||||
|
- **Ursache**:
|
||||||
|
- `MaintenanceModal` Klasse in `admin.html` registrierte Event-Handler
|
||||||
|
- `AdminDashboard` Klasse in `admin-unified.js` registrierte ebenfalls Event-Handler für denselben Button
|
||||||
|
- Beide Handler wurden gleichzeitig ausgeführt, was zu Konflikten führte
|
||||||
|
- **Lösung**:
|
||||||
|
- Event-Handler-Konflikt durch Deaktivierung des konkurrierenden Handlers behoben
|
||||||
|
- Singleton-Pattern für `MaintenanceModal` implementiert
|
||||||
|
- Event-Propagation mit `stopImmediatePropagation()` verhindert
|
||||||
|
|
||||||
|
## Implementierte Lösungen
|
||||||
|
|
||||||
|
### 1. JavaScript-Reparaturen in `templates/admin.html`
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
class MaintenanceModal {
|
||||||
|
constructor() {
|
||||||
|
this.modal = document.getElementById('maintenance-modal');
|
||||||
|
this.triggerBtn = document.getElementById('maintenance-btn');
|
||||||
|
this.closeBtn = document.getElementById('close-maintenance-modal');
|
||||||
|
this.isOpen = false;
|
||||||
|
this.isLoading = false;
|
||||||
|
this.isInitialized = false; // ✅ Neu hinzugefügt
|
||||||
|
|
||||||
|
// ✅ Verhindere doppelte Initialisierung
|
||||||
|
if (window.maintenanceModalInstance) {
|
||||||
|
return window.maintenanceModalInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.initializeEventListeners();
|
||||||
|
this.isInitialized = true;
|
||||||
|
window.maintenanceModalInstance = this; // ✅ Singleton-Pattern
|
||||||
|
}
|
||||||
|
|
||||||
|
initializeEventListeners() {
|
||||||
|
// ✅ Modal öffnen - mit Event-Delegation und Konflikt-Vermeidung
|
||||||
|
if (this.triggerBtn) {
|
||||||
|
// Entferne alle existierenden Event-Listener
|
||||||
|
this.triggerBtn.removeEventListener('click', this.handleTriggerClick);
|
||||||
|
|
||||||
|
// Füge neuen Event-Listener hinzu
|
||||||
|
this.handleTriggerClick = (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
e.stopImmediatePropagation(); // ✅ Verhindert andere Handler
|
||||||
|
|
||||||
|
console.log('🛠️ Wartungs-Modal wird geöffnet...');
|
||||||
|
this.openModal();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.triggerBtn.addEventListener('click', this.handleTriggerClick, { capture: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Modal schließen - verbesserte Event-Behandlung
|
||||||
|
if (this.closeBtn) {
|
||||||
|
this.closeBtn.addEventListener('click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
this.closeModal();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Modal schließen bei Klick außerhalb - aber nur auf das Overlay
|
||||||
|
if (this.modal) {
|
||||||
|
this.modal.addEventListener('click', (e) => {
|
||||||
|
// Nur schließen wenn direkt auf das Modal-Overlay geklickt wird
|
||||||
|
if (e.target === this.modal) {
|
||||||
|
this.closeModal();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ ESC-Taste zum Schließen
|
||||||
|
document.addEventListener('keydown', (e) => {
|
||||||
|
if (e.key === 'Escape' && this.isOpen) {
|
||||||
|
e.preventDefault();
|
||||||
|
this.closeModal();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Wartungs-Aktionen
|
||||||
|
this.initializeMaintenanceActions();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Verbesserte openModal Methode
|
||||||
|
openModal() {
|
||||||
|
if (this.modal && !this.isOpen) {
|
||||||
|
console.log('✅ Modal wird geöffnet');
|
||||||
|
this.modal.classList.remove('hidden');
|
||||||
|
this.isOpen = true;
|
||||||
|
document.body.style.overflow = 'hidden';
|
||||||
|
|
||||||
|
// Focus-Management für Barrierefreiheit
|
||||||
|
setTimeout(() => {
|
||||||
|
const firstFocusable = this.modal.querySelector('button:not(#close-maintenance-modal)');
|
||||||
|
if (firstFocusable) {
|
||||||
|
firstFocusable.focus();
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Verbesserte closeModal Methode
|
||||||
|
closeModal() {
|
||||||
|
if (this.modal && this.isOpen) {
|
||||||
|
console.log('❌ Modal wird geschlossen');
|
||||||
|
this.modal.classList.add('hidden');
|
||||||
|
this.isOpen = false;
|
||||||
|
document.body.style.overflow = '';
|
||||||
|
|
||||||
|
// Focus zurück zum Trigger-Button
|
||||||
|
if (this.triggerBtn) {
|
||||||
|
this.triggerBtn.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ... weitere Methoden ...
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Globale Instanz-Verwaltung mit Konflikt-Vermeidung
|
||||||
|
let maintenanceModal = null;
|
||||||
|
|
||||||
|
// ✅ Initialisierung nach DOM-Laden - aber nur einmal
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
// Verhindere doppelte Initialisierung
|
||||||
|
if (!window.maintenanceModalInstance && !maintenanceModal) {
|
||||||
|
console.log('🔧 Wartungs-Modal wird initialisiert...');
|
||||||
|
maintenanceModal = new MaintenanceModal();
|
||||||
|
|
||||||
|
// ✅ Deaktiviere andere Event-Handler für den Wartungs-Button
|
||||||
|
const maintenanceBtn = document.getElementById('maintenance-btn');
|
||||||
|
if (maintenanceBtn) {
|
||||||
|
// Entferne alle anderen Event-Listener durch Klonen
|
||||||
|
const newBtn = maintenanceBtn.cloneNode(true);
|
||||||
|
maintenanceBtn.parentNode.replaceChild(newBtn, maintenanceBtn);
|
||||||
|
|
||||||
|
// Füge nur unseren Event-Listener hinzu
|
||||||
|
newBtn.addEventListener('click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
|
||||||
|
if (maintenanceModal) {
|
||||||
|
maintenanceModal.openModal();
|
||||||
|
}
|
||||||
|
}, { capture: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Deaktivierung des konkurrierenden Event-Handlers in `static/js/admin-unified.js`
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
attachSystemButtons() {
|
||||||
|
// System Status Button
|
||||||
|
this.addEventListenerSafe('#system-status-btn', 'click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
this.showSystemStatus();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Analytics Button
|
||||||
|
this.addEventListenerSafe('#analytics-btn', 'click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
this.showAnalytics();
|
||||||
|
});
|
||||||
|
|
||||||
|
// ✅ Maintenance Button - DEAKTIVIERT wegen Konflikt mit MaintenanceModal
|
||||||
|
// Das Wartungs-Modal wird jetzt direkt in admin.html verwaltet
|
||||||
|
// this.addEventListenerSafe('#maintenance-btn', 'click', (e) => {
|
||||||
|
// e.preventDefault();
|
||||||
|
// e.stopPropagation();
|
||||||
|
// this.showMaintenance();
|
||||||
|
// });
|
||||||
|
|
||||||
|
// ... weitere Buttons ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Nächste Schritte
|
||||||
|
|
||||||
|
1. **API-Endpunkte hinzufügen**: Die oben gezeigten API-Endpunkte müssen in `app.py` eingefügt werden
|
||||||
|
2. **Testen**: Das Wartungs-Modal nach der Implementierung testen
|
||||||
|
3. **Logging**: Überprüfen der Log-Ausgaben für erfolgreiche Wartungsaktionen
|
||||||
|
4. **Backup-Verzeichnis**: Sicherstellen, dass das `database/backups` Verzeichnis existiert
|
||||||
|
|
||||||
|
## Funktionalitäten
|
||||||
|
|
||||||
|
Nach der Reparatur bietet das Wartungs-Modal folgende Funktionen:
|
||||||
|
|
||||||
|
### ✅ Cache leeren
|
||||||
|
- Löscht Flask-Cache (falls vorhanden)
|
||||||
|
- Entfernt temporäre MYP/TBA-Dateien
|
||||||
|
- Führt Python Garbage Collection durch
|
||||||
|
- Zeigt Anzahl der gelöschten Dateien an
|
||||||
|
|
||||||
|
### ✅ Datenbank optimieren
|
||||||
|
- SQLite VACUUM (Komprimierung)
|
||||||
|
- SQLite ANALYZE (Statistiken aktualisieren)
|
||||||
|
- SQLite REINDEX (Indizes neu aufbauen)
|
||||||
|
- Bereinigung verwaister Dateien (älter als 7 Tage)
|
||||||
|
- Detaillierte Ergebnisanzeige
|
||||||
|
|
||||||
|
### ✅ Backup erstellen
|
||||||
|
- ZIP-Backup mit Zeitstempel
|
||||||
|
- Enthält Datenbank, Konfigurationsdateien und wichtige Uploads
|
||||||
|
- Automatische Bereinigung alter Backups (nur 10 neueste behalten)
|
||||||
|
- Größenanzeige und Dateiliste
|
||||||
|
|
||||||
|
### ✅ Erweiterte Einstellungen
|
||||||
|
- Navigation zu Optimierungs-Einstellungen
|
||||||
|
- Fehlerbehandlung bei Navigation
|
||||||
|
|
||||||
|
## Benutzerfreundlichkeit
|
||||||
|
|
||||||
|
- **Loading-Zustände**: Buttons werden während Aktionen deaktiviert
|
||||||
|
- **Spinner-Animationen**: Visuelle Rückmeldung während Verarbeitung
|
||||||
|
- **Bestätigungsdialoge**: Sicherheitsabfragen vor kritischen Aktionen
|
||||||
|
- **Detaillierte Notifications**: Erfolgs- und Fehlermeldungen mit Details
|
||||||
|
- **Schließbare Notifications**: Benutzer können Meldungen manuell schließen
|
||||||
|
- **Keyboard-Support**: ESC-Taste schließt das Modal
|
||||||
|
- **Focus-Management**: Barrierefreie Navigation
|
||||||
|
|
||||||
|
## Sicherheit
|
||||||
|
|
||||||
|
- **Admin-Berechtigung**: Alle API-Endpunkte erfordern Admin-Rechte
|
||||||
|
- **CSRF-Schutz**: CSRF-Token bei allen API-Aufrufen
|
||||||
|
- **Logging**: Alle Wartungsaktionen werden geloggt
|
||||||
|
- **Fehlerbehandlung**: Robuste Fehlerbehandlung verhindert System-Crashes
|
||||||
|
- **Datei-Größen-Limits**: Backup-Dateien sind auf 10MB begrenzt
|
||||||
|
|
||||||
|
## Wartung
|
||||||
|
|
||||||
|
- **Automatische Bereinigung**: Alte Backups werden automatisch gelöscht
|
||||||
|
- **Fehler-Logging**: Alle Fehler werden in den App-Logs erfasst
|
||||||
|
- **Performance-Überwachung**: Optimierungszeiten werden gemessen
|
||||||
|
- **Benutzer-Tracking**: Wartungsaktionen werden Benutzern zugeordnet
|
474
backend/setup.sh
474
backend/setup.sh
@ -1083,50 +1083,41 @@ install_remote_access() {
|
|||||||
echo "user:raspberry" | chpasswd || warning "Konnte Passwort für SSH-Benutzer nicht aktualisieren"
|
echo "user:raspberry" | chpasswd || warning "Konnte Passwort für SSH-Benutzer nicht aktualisieren"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# RDP-Server (xrdp) installieren
|
# RDP-Server (xrdp) installieren - vereinfachter Ansatz
|
||||||
progress "Installiere RDP-Server (xrdp)..."
|
progress "Installiere RDP-Server (xrdp) - vereinfachte Installation..."
|
||||||
|
|
||||||
# Minimale Desktop-Umgebung für RDP installieren
|
# Alle bestehenden xrdp-Installationen entfernen
|
||||||
progress "Installiere minimale Desktop-Umgebung für RDP..."
|
progress "Entferne vorherige xrdp-Installationen..."
|
||||||
|
systemctl stop xrdp xrdp-sesman 2>/dev/null || true
|
||||||
|
systemctl disable xrdp xrdp-sesman 2>/dev/null || true
|
||||||
|
apt-get remove --purge -y xrdp 2>/dev/null || true
|
||||||
|
rm -rf /etc/xrdp /var/log/xrdp* 2>/dev/null || true
|
||||||
|
|
||||||
# XFCE als leichtgewichtige Desktop-Umgebung installieren
|
# XFCE Desktop installieren (minimal)
|
||||||
progress "Installiere XFCE Desktop-Umgebung..."
|
progress "Installiere minimale XFCE-Umgebung..."
|
||||||
apt-get install -y xfce4 xfce4-goodies dbus-x11 || error "XFCE Installation fehlgeschlagen"
|
if ! apt-get install -y xfce4-session xfce4-panel xfce4-terminal xfce4-settings xfdesktop4 dbus-x11; then
|
||||||
|
warning "Minimale XFCE-Installation fehlgeschlagen - verwende Fallback..."
|
||||||
# xrdp installieren
|
apt-get install -y xfce4 dbus-x11 || error "XFCE Installation fehlgeschlagen"
|
||||||
apt-get install -y xrdp || error "xrdp Installation fehlgeschlagen"
|
|
||||||
|
|
||||||
# xrdp-Benutzer zur ssl-cert Gruppe hinzufügen
|
|
||||||
usermod -aG ssl-cert xrdp 2>/dev/null || true
|
|
||||||
|
|
||||||
# Erstelle xrdp-Session-Konfiguration für XFCE
|
|
||||||
progress "Konfiguriere XFCE für xrdp..."
|
|
||||||
|
|
||||||
# Erstelle .xsession für alle Benutzer
|
|
||||||
cat > /etc/skel/.xsession << 'EOF'
|
|
||||||
#!/bin/bash
|
|
||||||
# XFCE Session für xrdp
|
|
||||||
export XDG_SESSION_DESKTOP=xfce
|
|
||||||
export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share:/var/lib/snapd/desktop
|
|
||||||
export XDG_CONFIG_DIRS=/etc/xdg/xdg-xfce:/etc/xdg
|
|
||||||
startxfce4
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Kopiere .xsession für root
|
|
||||||
cp /etc/skel/.xsession /root/.xsession
|
|
||||||
chmod +x /root/.xsession
|
|
||||||
|
|
||||||
# Kopiere .xsession für user (falls vorhanden)
|
|
||||||
if id "user" &>/dev/null; then
|
|
||||||
cp /etc/skel/.xsession /home/user/.xsession
|
|
||||||
chown user:user /home/user/.xsession
|
|
||||||
chmod +x /home/user/.xsession
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# xrdp-Konfiguration vereinfachen
|
# xrdp neu installieren
|
||||||
progress "Konfiguriere xrdp..."
|
progress "Installiere xrdp neu..."
|
||||||
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.backup
|
apt-get update
|
||||||
|
apt-get install -y xrdp || error "xrdp Installation fehlgeschlagen"
|
||||||
|
|
||||||
|
# Benutzer zur xrdp-Gruppe hinzufügen
|
||||||
|
usermod -aG xrdp root 2>/dev/null || true
|
||||||
|
if id "user" &>/dev/null; then
|
||||||
|
usermod -aG xrdp user 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Erstelle minimale xrdp-Konfiguration
|
||||||
|
progress "Erstelle minimale xrdp-Konfiguration..."
|
||||||
|
|
||||||
|
# Backup der Original-Konfiguration
|
||||||
|
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.original 2>/dev/null || true
|
||||||
|
|
||||||
|
# Sehr einfache xrdp.ini
|
||||||
cat > /etc/xrdp/xrdp.ini << 'EOF'
|
cat > /etc/xrdp/xrdp.ini << 'EOF'
|
||||||
[Globals]
|
[Globals]
|
||||||
ini_version=1
|
ini_version=1
|
||||||
@ -1137,15 +1128,15 @@ tcp_keepalive=true
|
|||||||
security_layer=rdp
|
security_layer=rdp
|
||||||
autorun=
|
autorun=
|
||||||
allow_channels=true
|
allow_channels=true
|
||||||
allow_multimon=true
|
allow_multimon=false
|
||||||
bitmap_cache=true
|
bitmap_cache=true
|
||||||
bitmap_compression=true
|
bitmap_compression=true
|
||||||
bulk_compression=true
|
bulk_compression=false
|
||||||
max_bpp=32
|
max_bpp=24
|
||||||
new_cursors=true
|
new_cursors=true
|
||||||
use_fastpath=both
|
use_fastpath=both
|
||||||
require_credentials=true
|
require_credentials=true
|
||||||
ask_for_reconnect_reason=true
|
ask_for_reconnect_reason=false
|
||||||
enable_token_login=false
|
enable_token_login=false
|
||||||
|
|
||||||
[Xorg]
|
[Xorg]
|
||||||
@ -1156,20 +1147,10 @@ password=ask
|
|||||||
ip=127.0.0.1
|
ip=127.0.0.1
|
||||||
port=-1
|
port=-1
|
||||||
code=20
|
code=20
|
||||||
|
|
||||||
[Xvnc]
|
|
||||||
name=Xvnc
|
|
||||||
lib=libvnc.so
|
|
||||||
username=ask
|
|
||||||
password=ask
|
|
||||||
ip=127.0.0.1
|
|
||||||
port=-1
|
|
||||||
code=10
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# xrdp-sesman Konfiguration
|
# Einfache sesman.ini
|
||||||
progress "Konfiguriere xrdp-sesman..."
|
cp /etc/xrdp/sesman.ini /etc/xrdp/sesman.ini.original 2>/dev/null || true
|
||||||
cp /etc/xrdp/sesman.ini /etc/xrdp/sesman.ini.backup
|
|
||||||
|
|
||||||
cat > /etc/xrdp/sesman.ini << 'EOF'
|
cat > /etc/xrdp/sesman.ini << 'EOF'
|
||||||
[Globals]
|
[Globals]
|
||||||
@ -1178,24 +1159,18 @@ ListenPort=3350
|
|||||||
EnableUserWindowManager=true
|
EnableUserWindowManager=true
|
||||||
UserWindowManager=startxfce4
|
UserWindowManager=startxfce4
|
||||||
DefaultWindowManager=startxfce4
|
DefaultWindowManager=startxfce4
|
||||||
ReconnectSh=/etc/xrdp/reconnectwm.sh
|
|
||||||
|
|
||||||
[Security]
|
[Security]
|
||||||
AllowRootLogin=true
|
AllowRootLogin=true
|
||||||
MaxLoginRetry=4
|
MaxLoginRetry=4
|
||||||
TerminalServerUsers=tsusers
|
|
||||||
TerminalServerAdmins=tsadmins
|
|
||||||
AlwaysGroupCheck=false
|
AlwaysGroupCheck=false
|
||||||
RestrictOutboundClipboard=false
|
|
||||||
RestrictInboundClipboard=false
|
|
||||||
|
|
||||||
[Sessions]
|
[Sessions]
|
||||||
X11DisplayOffset=10
|
X11DisplayOffset=10
|
||||||
MaxSessions=50
|
MaxSessions=10
|
||||||
KillDisconnected=false
|
KillDisconnected=false
|
||||||
IdleTimeLimit=0
|
IdleTimeLimit=0
|
||||||
DisconnectedTimeLimit=0
|
DisconnectedTimeLimit=0
|
||||||
Policy=UBD
|
|
||||||
|
|
||||||
[Logging]
|
[Logging]
|
||||||
LogFile=xrdp-sesman.log
|
LogFile=xrdp-sesman.log
|
||||||
@ -1209,72 +1184,100 @@ param2=-nolisten
|
|||||||
param3=tcp
|
param3=tcp
|
||||||
param4=-dpi
|
param4=-dpi
|
||||||
param5=96
|
param5=96
|
||||||
|
|
||||||
[Xvnc]
|
|
||||||
param1=-bs
|
|
||||||
param2=-nolisten
|
|
||||||
param3=tcp
|
|
||||||
param4=-localhost
|
|
||||||
param5=-dpi
|
|
||||||
param6=96
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# Erstelle .xsession für XFCE
|
||||||
|
progress "Konfiguriere XFCE-Sessions..."
|
||||||
|
|
||||||
# Root-Passwort für RDP setzen
|
# Root .xsession
|
||||||
progress "Setze Root-Passwort für RDP-Zugang..."
|
cat > /root/.xsession << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
export XDG_SESSION_DESKTOP=xfce
|
||||||
|
export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share
|
||||||
|
export XDG_CONFIG_DIRS=/etc/xdg/xdg-xfce:/etc/xdg
|
||||||
|
exec startxfce4
|
||||||
|
EOF
|
||||||
|
chmod +x /root/.xsession
|
||||||
|
|
||||||
|
# User .xsession (falls user existiert)
|
||||||
|
if id "user" &>/dev/null; then
|
||||||
|
cat > /home/user/.xsession << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
export XDG_SESSION_DESKTOP=xfce
|
||||||
|
export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share
|
||||||
|
export XDG_CONFIG_DIRS=/etc/xdg/xdg-xfce:/etc/xdg
|
||||||
|
exec startxfce4
|
||||||
|
EOF
|
||||||
|
chown user:user /home/user/.xsession
|
||||||
|
chmod +x /home/user/.xsession
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Root-Passwort setzen
|
||||||
|
progress "Setze Root-Passwort für RDP..."
|
||||||
echo "root:744563017196A" | chpasswd || error "Kann Root-Passwort nicht setzen"
|
echo "root:744563017196A" | chpasswd || error "Kann Root-Passwort nicht setzen"
|
||||||
|
|
||||||
# Polkit-Regel für xrdp erstellen
|
# Log-Verzeichnisse erstellen mit korrekten Berechtigungen
|
||||||
progress "Erstelle Polkit-Regeln für xrdp..."
|
progress "Erstelle Log-Verzeichnisse..."
|
||||||
mkdir -p /etc/polkit-1/localauthority/50-local.d
|
mkdir -p /var/log
|
||||||
|
touch /var/log/xrdp.log /var/log/xrdp-sesman.log 2>/dev/null || true
|
||||||
|
chown xrdp:xrdp /var/log/xrdp*.log 2>/dev/null || true
|
||||||
|
chmod 644 /var/log/xrdp*.log 2>/dev/null || true
|
||||||
|
|
||||||
cat > /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla << 'EOF'
|
# Erstelle xrdp-Konfigurationsverzeichnisse
|
||||||
[Allow Colord all Users]
|
mkdir -p /etc/xrdp/cert /var/run/xrdp
|
||||||
Identity=unix-user:*
|
chown xrdp:xrdp /etc/xrdp/cert /var/run/xrdp 2>/dev/null || true
|
||||||
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
|
|
||||||
ResultAny=no
|
|
||||||
ResultInactive=no
|
|
||||||
ResultActive=yes
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# xrdp-Service aktivieren und starten
|
# Services aktivieren und starten
|
||||||
progress "Starte xrdp-Services..."
|
progress "Starte xrdp-Services..."
|
||||||
systemctl enable xrdp
|
|
||||||
|
# systemd daemon reload
|
||||||
|
systemctl daemon-reload
|
||||||
|
|
||||||
|
# Services aktivieren
|
||||||
systemctl enable xrdp-sesman
|
systemctl enable xrdp-sesman
|
||||||
|
systemctl enable xrdp
|
||||||
|
|
||||||
# Services stoppen falls sie laufen
|
# Services starten (sesman zuerst)
|
||||||
systemctl stop xrdp 2>/dev/null || true
|
|
||||||
systemctl stop xrdp-sesman 2>/dev/null || true
|
|
||||||
|
|
||||||
# Services neu starten
|
|
||||||
systemctl start xrdp-sesman
|
systemctl start xrdp-sesman
|
||||||
sleep 2
|
|
||||||
systemctl start xrdp
|
|
||||||
|
|
||||||
# Warte und prüfe Status
|
|
||||||
sleep 3
|
sleep 3
|
||||||
|
|
||||||
|
# Prüfe sesman-Status
|
||||||
|
if systemctl is-active --quiet xrdp-sesman; then
|
||||||
|
success "✅ xrdp-sesman erfolgreich gestartet"
|
||||||
|
|
||||||
|
# Jetzt xrdp starten
|
||||||
|
systemctl start xrdp
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
if systemctl is-active --quiet xrdp; then
|
||||||
|
success "✅ xrdp erfolgreich gestartet"
|
||||||
|
else
|
||||||
|
warning "⚠️ xrdp konnte nicht gestartet werden"
|
||||||
|
journalctl -u xrdp --no-pager -l | tail -10
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warning "⚠️ xrdp-sesman konnte nicht gestartet werden"
|
||||||
|
journalctl -u xrdp-sesman --no-pager -l | tail -10
|
||||||
|
fi
|
||||||
|
|
||||||
cd "$CURRENT_DIR"
|
cd "$CURRENT_DIR"
|
||||||
|
|
||||||
# Status prüfen
|
# Finaler Status-Check
|
||||||
if systemctl is-active --quiet xrdp; then
|
if systemctl is-active --quiet xrdp && systemctl is-active --quiet xrdp-sesman; then
|
||||||
log "✅ Remote-Zugang konfiguriert:"
|
log "✅ Remote-Zugang vollständig konfiguriert:"
|
||||||
log " 📡 SSH: user:raspberry (Port 22)"
|
log " 📡 SSH: user:raspberry (Port 22)"
|
||||||
log " 🖥️ RDP: root:744563017196A (Port 3389)"
|
log " 🖥️ RDP: root:744563017196A (Port 3389)"
|
||||||
|
log " 🖥️ RDP: user:raspberry (Port 3389)"
|
||||||
|
elif systemctl is-active --quiet ssh; then
|
||||||
|
log "✅ SSH-Zugang konfiguriert:"
|
||||||
|
log " 📡 SSH: user:raspberry (Port 22)"
|
||||||
|
warning "⚠️ RDP-Installation unvollständig"
|
||||||
|
info "Manuelle Überprüfung erforderlich:"
|
||||||
|
info " systemctl status xrdp"
|
||||||
|
info " systemctl status xrdp-sesman"
|
||||||
|
info " journalctl -u xrdp -f"
|
||||||
else
|
else
|
||||||
warning "⚠️ xrdp-Service konnte nicht gestartet werden - starte Debugging..."
|
error "❌ Weder SSH noch RDP konnten konfiguriert werden"
|
||||||
debug_xrdp_issues
|
|
||||||
|
|
||||||
# Nach Debugging nochmal prüfen
|
|
||||||
if systemctl is-active --quiet xrdp; then
|
|
||||||
log "✅ Remote-Zugang nach Debugging konfiguriert:"
|
|
||||||
log " 📡 SSH: user:raspberry (Port 22)"
|
|
||||||
log " 🖥️ RDP: root:744563017196A (Port 3389)"
|
|
||||||
else
|
|
||||||
log "✅ SSH-Zugang konfiguriert:"
|
|
||||||
log " 📡 SSH: user:raspberry (Port 22)"
|
|
||||||
warning "⚠️ RDP-Zugang konnte nicht konfiguriert werden"
|
|
||||||
info "Manuelle Fehlerbehebung erforderlich - siehe Logs"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1291,23 +1294,45 @@ configure_firewall() {
|
|||||||
systemctl start firewalld
|
systemctl start firewalld
|
||||||
|
|
||||||
# Warte kurz bis firewalld vollständig gestartet ist
|
# Warte kurz bis firewalld vollständig gestartet ist
|
||||||
sleep 3
|
sleep 5
|
||||||
|
|
||||||
progress "Konfiguriere firewalld-Zonen und -Regeln..."
|
progress "Konfiguriere firewalld-Zonen und -Regeln..."
|
||||||
|
|
||||||
# Zone definieren
|
# Firewall-Status prüfen
|
||||||
firewall-cmd --permanent --new-zone=myp-backend 2>/dev/null || true
|
if ! firewall-cmd --state >/dev/null 2>&1; then
|
||||||
|
error "firewalld ist nicht aktiv oder reagiert nicht"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Bestehende Zone entfernen falls vorhanden
|
||||||
|
progress "Entferne bestehende myp-backend Zone falls vorhanden..."
|
||||||
|
if firewall-cmd --permanent --get-zones | grep -q "myp-backend"; then
|
||||||
|
log "Entferne bestehende myp-backend Zone..."
|
||||||
|
firewall-cmd --permanent --delete-zone=myp-backend 2>/dev/null || true
|
||||||
|
firewall-cmd --reload
|
||||||
|
sleep 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Zone neu erstellen
|
||||||
|
progress "Erstelle neue myp-backend Zone..."
|
||||||
|
if ! firewall-cmd --permanent --new-zone=myp-backend; then
|
||||||
|
error "Fehler beim Erstellen der myp-backend Zone"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Konfiguration neu laden
|
||||||
|
firewall-cmd --reload
|
||||||
|
sleep 2
|
||||||
|
|
||||||
# Erweiterte Netzwerk-Quellen definieren (nur IPv4)
|
# Erweiterte Netzwerk-Quellen definieren (nur IPv4)
|
||||||
firewall-cmd --permanent --zone=myp-backend --add-source=192.168.0.0/16
|
progress "Füge Netzwerk-Quellen hinzu..."
|
||||||
firewall-cmd --permanent --zone=myp-backend --add-source=127.0.0.1/32
|
firewall-cmd --permanent --zone=myp-backend --add-source=192.168.0.0/16 || error "Fehler beim Hinzufügen des 192.168.0.0/16 Netzwerks"
|
||||||
|
firewall-cmd --permanent --zone=myp-backend --add-source=127.0.0.1/32 || error "Fehler beim Hinzufügen von localhost"
|
||||||
|
|
||||||
# Lokaler Hostname "raspberrypi" hinzufügen
|
# Lokaler Hostname "raspberrypi" hinzufügen
|
||||||
local local_hostname="raspberrypi"
|
local local_hostname="raspberrypi"
|
||||||
progress "Füge lokalen Hostname hinzu: $local_hostname"
|
progress "Füge lokalen Hostname hinzu: $local_hostname"
|
||||||
local local_ip=$(getent hosts "$local_hostname" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
|
local local_ip=$(getent hosts "$local_hostname" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
|
||||||
if [ -n "$local_ip" ]; then
|
if [ -n "$local_ip" ]; then
|
||||||
firewall-cmd --permanent --zone=myp-backend --add-source="$local_ip/32" 2>/dev/null || true
|
firewall-cmd --permanent --zone=myp-backend --add-source="$local_ip/32" 2>/dev/null || warning "Konnte lokalen Hostname nicht hinzufügen"
|
||||||
log "✅ Lokaler Hostname $local_hostname hinzugefügt: $local_ip"
|
log "✅ Lokaler Hostname $local_hostname hinzugefügt: $local_ip"
|
||||||
else
|
else
|
||||||
info "Lokaler Hostname $local_hostname nicht auflösbar - wird beim nächsten Boot verfügbar sein"
|
info "Lokaler Hostname $local_hostname nicht auflösbar - wird beim nächsten Boot verfügbar sein"
|
||||||
@ -1317,51 +1342,100 @@ configure_firewall() {
|
|||||||
progress "Füge Frontend-Server hinzu: m040tbaraspi001"
|
progress "Füge Frontend-Server hinzu: m040tbaraspi001"
|
||||||
local frontend_ip=$(getent hosts "m040tbaraspi001" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
|
local frontend_ip=$(getent hosts "m040tbaraspi001" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
|
||||||
if [ -n "$frontend_ip" ]; then
|
if [ -n "$frontend_ip" ]; then
|
||||||
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_ip/32" 2>/dev/null || true
|
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_ip/32" 2>/dev/null || warning "Konnte Frontend-Server IP nicht hinzufügen"
|
||||||
log "✅ Frontend-Server m040tbaraspi001 hinzugefügt: $frontend_ip"
|
log "✅ Frontend-Server m040tbaraspi001 hinzugefügt: $frontend_ip"
|
||||||
else
|
else
|
||||||
# Versuche auch mit FQDN
|
# Versuche auch mit FQDN
|
||||||
local frontend_fqdn_ip=$(getent hosts "m040tbaraspi001.de040.corpintra.net" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
|
local frontend_fqdn_ip=$(getent hosts "m040tbaraspi001.de040.corpintra.net" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
|
||||||
if [ -n "$frontend_fqdn_ip" ]; then
|
if [ -n "$frontend_fqdn_ip" ]; then
|
||||||
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_fqdn_ip/32" 2>/dev/null || true
|
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_fqdn_ip/32" 2>/dev/null || warning "Konnte Frontend-Server FQDN nicht hinzufügen"
|
||||||
log "✅ Frontend-Server m040tbaraspi001.de040.corpintra.net hinzugefügt: $frontend_fqdn_ip"
|
log "✅ Frontend-Server m040tbaraspi001.de040.corpintra.net hinzugefügt: $frontend_fqdn_ip"
|
||||||
else
|
else
|
||||||
info "Frontend-Server m040tbaraspi001 nicht auflösbar - überspringe"
|
info "Frontend-Server m040tbaraspi001 nicht auflösbar - überspringe"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Ports und Services hinzufügen
|
||||||
|
progress "Konfiguriere Ports und Services..."
|
||||||
|
|
||||||
# HTTPS für API & Kiosk zulassen
|
# HTTPS für API & Kiosk zulassen
|
||||||
firewall-cmd --permanent --zone=myp-backend --add-port=443/tcp
|
firewall-cmd --permanent --zone=myp-backend --add-port=443/tcp || error "Fehler beim Hinzufügen von Port 443"
|
||||||
|
|
||||||
# SSH für Wartung
|
# SSH für Wartung
|
||||||
firewall-cmd --permanent --zone=myp-backend --add-service=ssh
|
firewall-cmd --permanent --zone=myp-backend --add-service=ssh || error "Fehler beim Hinzufügen des SSH-Service"
|
||||||
|
|
||||||
# RDP für Remote-Desktop
|
# RDP für Remote-Desktop
|
||||||
firewall-cmd --permanent --zone=myp-backend --add-port=3389/tcp
|
firewall-cmd --permanent --zone=myp-backend --add-port=3389/tcp || error "Fehler beim Hinzufügen von Port 3389"
|
||||||
|
|
||||||
# IPv6 in firewalld deaktivieren
|
# IPv6 in firewalld deaktivieren
|
||||||
progress "Deaktiviere IPv6 in firewalld..."
|
progress "Deaktiviere IPv6 in firewalld..."
|
||||||
firewall-cmd --permanent --set-target=DROP --zone=public --family=ipv6 2>/dev/null || true
|
firewall-cmd --permanent --set-target=DROP --zone=public --family=ipv6 2>/dev/null || warning "IPv6 konnte nicht in public Zone deaktiviert werden"
|
||||||
firewall-cmd --permanent --set-target=DROP --zone=myp-backend --family=ipv6 2>/dev/null || true
|
firewall-cmd --permanent --set-target=DROP --zone=myp-backend --family=ipv6 2>/dev/null || warning "IPv6 konnte nicht in myp-backend Zone deaktiviert werden"
|
||||||
|
|
||||||
# Default-Zone setzen
|
# Default-Zone setzen
|
||||||
firewall-cmd --set-default-zone=myp-backend
|
progress "Setze Default-Zone..."
|
||||||
|
firewall-cmd --set-default-zone=myp-backend || error "Fehler beim Setzen der Default-Zone"
|
||||||
|
|
||||||
# Änderungen übernehmen
|
# Änderungen übernehmen
|
||||||
firewall-cmd --reload
|
progress "Lade Firewall-Konfiguration neu..."
|
||||||
|
firewall-cmd --reload || error "Fehler beim Neuladen der Firewall-Konfiguration"
|
||||||
|
|
||||||
|
# Kurz warten und Status prüfen
|
||||||
|
sleep 3
|
||||||
|
|
||||||
# Firewall-Status anzeigen
|
# Firewall-Status anzeigen
|
||||||
progress "Firewall-Konfiguration:"
|
progress "Firewall-Konfiguration:"
|
||||||
firewall-cmd --list-all-zones | grep -A 15 "myp-backend" || true
|
if firewall-cmd --list-all --zone=myp-backend 2>/dev/null; then
|
||||||
|
log "✅ Firewall-Konfiguration erfolgreich angezeigt"
|
||||||
|
else
|
||||||
|
warning "⚠️ Firewall-Status konnte nicht angezeigt werden"
|
||||||
|
fi
|
||||||
|
|
||||||
log "✅ Firewall konfiguriert:"
|
# Finale Validierung
|
||||||
log " 🔒 Zone: myp-backend"
|
progress "Validiere Firewall-Konfiguration..."
|
||||||
log " 🌐 Netzwerk: 192.168.0.0/16 (nur IPv4)"
|
local validation_errors=0
|
||||||
log " 🏠 Localhost: 127.0.0.1"
|
|
||||||
log " 🖥️ Lokaler Host: raspberrypi"
|
# Prüfe ob Zone existiert
|
||||||
log " 📡 Frontend-Server: m040tbaraspi001"
|
if ! firewall-cmd --get-zones | grep -q "myp-backend"; then
|
||||||
log " 🔌 Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)"
|
error "Zone myp-backend wurde nicht korrekt erstellt"
|
||||||
log " 🚫 IPv6 vollständig blockiert"
|
((validation_errors++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prüfe Default-Zone
|
||||||
|
if [ "$(firewall-cmd --get-default-zone)" != "myp-backend" ]; then
|
||||||
|
warning "Default-Zone ist nicht myp-backend"
|
||||||
|
((validation_errors++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prüfe Ports
|
||||||
|
if ! firewall-cmd --zone=myp-backend --query-port=443/tcp 2>/dev/null; then
|
||||||
|
warning "Port 443 nicht korrekt konfiguriert"
|
||||||
|
((validation_errors++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! firewall-cmd --zone=myp-backend --query-port=3389/tcp 2>/dev/null; then
|
||||||
|
warning "Port 3389 nicht korrekt konfiguriert"
|
||||||
|
((validation_errors++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! firewall-cmd --zone=myp-backend --query-service=ssh 2>/dev/null; then
|
||||||
|
warning "SSH-Service nicht korrekt konfiguriert"
|
||||||
|
((validation_errors++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $validation_errors -eq 0 ]; then
|
||||||
|
log "✅ Firewall konfiguriert und validiert:"
|
||||||
|
log " 🔒 Zone: myp-backend (als Default gesetzt)"
|
||||||
|
log " 🌐 Netzwerk: 192.168.0.0/16 (nur IPv4)"
|
||||||
|
log " 🏠 Localhost: 127.0.0.1"
|
||||||
|
log " 🖥️ Lokaler Host: raspberrypi"
|
||||||
|
log " 📡 Frontend-Server: m040tbaraspi001"
|
||||||
|
log " 🔌 Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)"
|
||||||
|
log " 🚫 IPv6 vollständig blockiert"
|
||||||
|
else
|
||||||
|
warning "⚠️ Firewall-Konfiguration mit $validation_errors Fehlern abgeschlossen"
|
||||||
|
info "System funktioniert möglicherweise trotzdem - manuelle Überprüfung empfohlen"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# =========================== REMOTE-ZUGANG TESTEN ===========================
|
# =========================== REMOTE-ZUGANG TESTEN ===========================
|
||||||
@ -1380,31 +1454,25 @@ test_remote_access() {
|
|||||||
warning "⚠️ SSH-Port 22 nicht erreichbar"
|
warning "⚠️ SSH-Port 22 nicht erreichbar"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
warning "⚠️ SSH-Service läuft nicht - versuche Neustart..."
|
warning "⚠️ SSH-Service läuft nicht"
|
||||||
systemctl restart ssh 2>/dev/null || true
|
|
||||||
sleep 2
|
|
||||||
if systemctl is-active --quiet ssh; then
|
|
||||||
success "✅ SSH-Service nach Neustart aktiv"
|
|
||||||
else
|
|
||||||
error "❌ SSH-Service konnte nicht gestartet werden"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# RDP-Service testen
|
# RDP-Services testen
|
||||||
progress "Teste RDP-Service..."
|
progress "Teste RDP-Services..."
|
||||||
|
|
||||||
|
local xrdp_sesman_status="❌"
|
||||||
|
local xrdp_status="❌"
|
||||||
|
|
||||||
# Prüfe xrdp-sesman zuerst
|
|
||||||
if systemctl is-active --quiet xrdp-sesman; then
|
if systemctl is-active --quiet xrdp-sesman; then
|
||||||
|
xrdp_sesman_status="✅"
|
||||||
success "✅ xrdp-sesman läuft"
|
success "✅ xrdp-sesman läuft"
|
||||||
else
|
else
|
||||||
warning "⚠️ xrdp-sesman läuft nicht - versuche Neustart..."
|
warning "⚠️ xrdp-sesman läuft nicht"
|
||||||
systemctl restart xrdp-sesman 2>/dev/null || true
|
|
||||||
sleep 2
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Prüfe xrdp
|
|
||||||
if systemctl is-active --quiet xrdp; then
|
if systemctl is-active --quiet xrdp; then
|
||||||
success "✅ RDP-Service läuft"
|
xrdp_status="✅"
|
||||||
|
success "✅ xrdp läuft"
|
||||||
|
|
||||||
# RDP-Port testen
|
# RDP-Port testen
|
||||||
if ss -tlnp | grep -q ":3389 "; then
|
if ss -tlnp | grep -q ":3389 "; then
|
||||||
@ -1413,16 +1481,7 @@ test_remote_access() {
|
|||||||
warning "⚠️ RDP-Port 3389 nicht erreichbar"
|
warning "⚠️ RDP-Port 3389 nicht erreichbar"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
warning "⚠️ RDP-Service läuft nicht - versuche Neustart..."
|
warning "⚠️ xrdp läuft nicht"
|
||||||
systemctl restart xrdp 2>/dev/null || true
|
|
||||||
sleep 3
|
|
||||||
if systemctl is-active --quiet xrdp; then
|
|
||||||
success "✅ RDP-Service nach Neustart aktiv"
|
|
||||||
else
|
|
||||||
warning "⚠️ RDP-Service konnte nicht gestartet werden"
|
|
||||||
info "Prüfe Logs mit: journalctl -u xrdp -f"
|
|
||||||
info "Prüfe sesman Logs mit: journalctl -u xrdp-sesman -f"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Firewall-Status testen
|
# Firewall-Status testen
|
||||||
@ -1430,10 +1489,6 @@ test_remote_access() {
|
|||||||
if systemctl is-active --quiet firewalld; then
|
if systemctl is-active --quiet firewalld; then
|
||||||
success "✅ Firewall läuft"
|
success "✅ Firewall läuft"
|
||||||
|
|
||||||
# Aktive Zone anzeigen
|
|
||||||
local active_zone=$(firewall-cmd --get-active-zones 2>/dev/null | head -1 || echo "Keine Zone aktiv")
|
|
||||||
info "Aktive Zone: $active_zone"
|
|
||||||
|
|
||||||
# Prüfe ob Ports offen sind
|
# Prüfe ob Ports offen sind
|
||||||
if firewall-cmd --zone=myp-backend --query-port=22/tcp 2>/dev/null; then
|
if firewall-cmd --zone=myp-backend --query-port=22/tcp 2>/dev/null; then
|
||||||
success "✅ SSH-Port in Firewall freigegeben"
|
success "✅ SSH-Port in Firewall freigegeben"
|
||||||
@ -1455,12 +1510,21 @@ test_remote_access() {
|
|||||||
local ip_address=$(ip route get 1.1.1.1 2>/dev/null | awk '{print $7}' | head -1 || echo "Unbekannt")
|
local ip_address=$(ip route get 1.1.1.1 2>/dev/null | awk '{print $7}' | head -1 || echo "Unbekannt")
|
||||||
if [ "$ip_address" != "Unbekannt" ]; then
|
if [ "$ip_address" != "Unbekannt" ]; then
|
||||||
success "✅ Netzwerk-Interface aktiv: $ip_address"
|
success "✅ Netzwerk-Interface aktiv: $ip_address"
|
||||||
info "SSH-Zugang: ssh user@$ip_address"
|
info "Zugang-URLs:"
|
||||||
info "RDP-Zugang: $ip_address:3389"
|
info " SSH: ssh user@$ip_address"
|
||||||
|
if [ "$xrdp_status" = "✅" ]; then
|
||||||
|
info " RDP: $ip_address:3389 (root:744563017196A oder user:raspberry)"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
warning "⚠️ Keine Netzwerk-IP ermittelt"
|
warning "⚠️ Keine Netzwerk-IP ermittelt"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Status-Zusammenfassung
|
||||||
|
log "📊 Service-Status:"
|
||||||
|
log " SSH: $(systemctl is-active --quiet ssh && echo "✅ Aktiv" || echo "❌ Inaktiv")"
|
||||||
|
log " xrdp-sesman: $xrdp_sesman_status $(systemctl is-active --quiet xrdp-sesman && echo "Aktiv" || echo "Inaktiv")"
|
||||||
|
log " xrdp: $xrdp_status $(systemctl is-active --quiet xrdp && echo "Aktiv" || echo "Inaktiv")"
|
||||||
|
|
||||||
log "✅ Remote-Zugang-Test abgeschlossen"
|
log "✅ Remote-Zugang-Test abgeschlossen"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1503,80 +1567,6 @@ configure_hostname() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# =========================== XRDP DEBUGGING ===========================
|
|
||||||
debug_xrdp_issues() {
|
|
||||||
log "=== XRDP DEBUGGING ==="
|
|
||||||
|
|
||||||
progress "Analysiere xrdp-Probleme..."
|
|
||||||
|
|
||||||
# Prüfe xrdp-Logs
|
|
||||||
if [ -f /var/log/xrdp.log ]; then
|
|
||||||
local xrdp_errors=$(tail -20 /var/log/xrdp.log | grep -i "error\|fail\|denied" | wc -l)
|
|
||||||
if [ "$xrdp_errors" -gt 0 ]; then
|
|
||||||
warning "⚠️ Fehler in xrdp.log gefunden:"
|
|
||||||
tail -10 /var/log/xrdp.log | grep -i "error\|fail\|denied" || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe sesman-Logs
|
|
||||||
if [ -f /var/log/xrdp-sesman.log ]; then
|
|
||||||
local sesman_errors=$(tail -20 /var/log/xrdp-sesman.log | grep -i "error\|fail\|denied" | wc -l)
|
|
||||||
if [ "$sesman_errors" -gt 0 ]; then
|
|
||||||
warning "⚠️ Fehler in xrdp-sesman.log gefunden:"
|
|
||||||
tail -10 /var/log/xrdp-sesman.log | grep -i "error\|fail\|denied" || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe Berechtigungen
|
|
||||||
progress "Prüfe xrdp-Berechtigungen..."
|
|
||||||
if [ ! -r /etc/xrdp/xrdp.ini ]; then
|
|
||||||
warning "⚠️ xrdp.ini nicht lesbar"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -r /etc/xrdp/sesman.ini ]; then
|
|
||||||
warning "⚠️ sesman.ini nicht lesbar"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe ob XFCE installiert ist
|
|
||||||
if ! command -v startxfce4 >/dev/null 2>&1; then
|
|
||||||
warning "⚠️ XFCE nicht gefunden - installiere..."
|
|
||||||
apt-get install -y xfce4 xfce4-goodies dbus-x11 || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe Polkit
|
|
||||||
if [ ! -f /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla ]; then
|
|
||||||
warning "⚠️ Polkit-Regel fehlt - erstelle..."
|
|
||||||
mkdir -p /etc/polkit-1/localauthority/50-local.d
|
|
||||||
cat > /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla << 'EOF'
|
|
||||||
[Allow Colord all Users]
|
|
||||||
Identity=unix-user:*
|
|
||||||
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
|
|
||||||
ResultAny=no
|
|
||||||
ResultInactive=no
|
|
||||||
ResultActive=yes
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Versuche Services neu zu starten
|
|
||||||
progress "Starte xrdp-Services neu..."
|
|
||||||
systemctl stop xrdp xrdp-sesman 2>/dev/null || true
|
|
||||||
sleep 2
|
|
||||||
systemctl start xrdp-sesman
|
|
||||||
sleep 2
|
|
||||||
systemctl start xrdp
|
|
||||||
sleep 3
|
|
||||||
|
|
||||||
if systemctl is-active --quiet xrdp; then
|
|
||||||
success "✅ xrdp nach Debugging erfolgreich gestartet"
|
|
||||||
else
|
|
||||||
warning "⚠️ xrdp konnte auch nach Debugging nicht gestartet werden"
|
|
||||||
info "Manuelle Prüfung erforderlich:"
|
|
||||||
info " journalctl -u xrdp -f"
|
|
||||||
info " journalctl -u xrdp-sesman -f"
|
|
||||||
info " tail -f /var/log/xrdp.log"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# =========================== HAUPTPROGRAMM ===========================
|
# =========================== HAUPTPROGRAMM ===========================
|
||||||
main() {
|
main() {
|
||||||
# Erstelle Log-Datei
|
# Erstelle Log-Datei
|
||||||
|
Loading…
x
Reference in New Issue
Block a user