Füge Berechtigungsmanagement für Kiosk-User hinzu und erstelle ein Reparaturskript zur Korrektur von Berechtigungen nach npm-Installationen. Integriere die Funktionen zur Berechtigungsanpassung in die Installationsprozesse.

This commit is contained in:
Till Tomczak 2025-06-04 12:30:05 +02:00
parent 785a2b6134
commit 821883141e

301
setup.sh
View File

@ -1711,6 +1711,283 @@ EOF
log " 🛡️ Sichere Berechtigungen gesetzt"
}
# =========================== BERECHTIGEN-MANAGEMENT ===========================
fix_project_permissions() {
log "=== BERECHTIGEN-MANAGEMENT FÜR KIOSK-USER ==="
progress "Korrigiere Projekt-Berechtigungen für kiosk-User..."
# Prüfe ob kiosk User existiert
if ! id "$KIOSK_USER" &>/dev/null; then
warning "⚠️ Kiosk-User '$KIOSK_USER' existiert nicht - erstelle ihn zuerst"
create_kiosk_user
fi
local kiosk_home="/home/$KIOSK_USER"
# Erstelle Entwicklungs-/Arbeitsverzeichnis im kiosk home
local kiosk_project_dir="$kiosk_home/manage-your-printer"
progress "Erstelle kiosk-Arbeitsverzeichnis: $kiosk_project_dir"
if [ ! -d "$kiosk_project_dir" ]; then
mkdir -p "$kiosk_project_dir" 2>/dev/null || true
fi
# Kopiere/Synchronisiere Projekt-Dateien zum kiosk-Verzeichnis
progress "Synchronisiere Projekt-Dateien für kiosk-User..."
# Verwende rsync wenn verfügbar, sonst cp
if command -v rsync >/dev/null 2>&1; then
rsync -av --exclude='.git' --exclude='__pycache__' --exclude='*.pyc' \
--exclude='instance/ssl/*' --exclude='logs/*' \
"$CURRENT_DIR/" "$kiosk_project_dir/" 2>/dev/null || {
warning "⚠️ rsync fehlgeschlagen - verwende cp als Fallback"
cp -r "$CURRENT_DIR"/* "$kiosk_project_dir/" 2>/dev/null || true
}
else
cp -r "$CURRENT_DIR"/* "$kiosk_project_dir/" 2>/dev/null || true
fi
# Setze kiosk als Besitzer des Arbeitsverzeichnisses
progress "Setze kiosk-User als Besitzer des Arbeitsverzeichnisses..."
chown -R "$KIOSK_USER:$KIOSK_USER" "$kiosk_project_dir" 2>/dev/null || warning "⚠️ Ownership konnte nicht vollständig gesetzt werden"
# Spezielle Berechtigungen für verschiedene Bereiche
progress "Konfiguriere spezielle Berechtigungen..."
# node_modules: kiosk User soll vollen Zugriff haben
if [ -d "$kiosk_project_dir/node_modules" ]; then
chown -R "$KIOSK_USER:$KIOSK_USER" "$kiosk_project_dir/node_modules" 2>/dev/null || true
chmod -R 755 "$kiosk_project_dir/node_modules" 2>/dev/null || true
success "✅ node_modules Berechtigungen für kiosk-User gesetzt"
fi
# package.json und package-lock.json: kiosk User soll schreiben können
for file in package.json package-lock.json; do
if [ -f "$kiosk_project_dir/$file" ]; then
chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_project_dir/$file" 2>/dev/null || true
chmod 664 "$kiosk_project_dir/$file" 2>/dev/null || true
fi
done
# logs Verzeichnis: kiosk User soll schreiben können
if [ -d "$kiosk_project_dir/logs" ]; then
chown -R "$KIOSK_USER:$KIOSK_USER" "$kiosk_project_dir/logs" 2>/dev/null || true
chmod -R 755 "$kiosk_project_dir/logs" 2>/dev/null || true
fi
# uploads Verzeichnis: kiosk User soll schreiben können
if [ -d "$kiosk_project_dir/uploads" ]; then
chown -R "$KIOSK_USER:$KIOSK_USER" "$kiosk_project_dir/uploads" 2>/dev/null || true
chmod -R 755 "$kiosk_project_dir/uploads" 2>/dev/null || true
fi
# Auch die Original node_modules in APP_DIR korrigieren
progress "Korrigiere node_modules Berechtigungen in $APP_DIR..."
if [ -d "$APP_DIR/node_modules" ]; then
# Erstelle kiosk-Gruppe und füge root hinzu für geteilten Zugriff
groupadd -f kiosk-shared 2>/dev/null || true
usermod -a -G kiosk-shared root 2>/dev/null || true
usermod -a -G kiosk-shared "$KIOSK_USER" 2>/dev/null || true
# Setze Gruppe auf kiosk-shared für geteilten Zugriff
chgrp -R kiosk-shared "$APP_DIR/node_modules" 2>/dev/null || true
chmod -R 775 "$APP_DIR/node_modules" 2>/dev/null || true
success "✅ node_modules geteilte Berechtigungen gesetzt"
fi
# Erstelle npm-Konfiguration für kiosk User
progress "Konfiguriere npm für kiosk-User..."
if [ ! -d "$kiosk_home/.npm" ]; then
mkdir -p "$kiosk_home/.npm" 2>/dev/null || true
chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.npm" 2>/dev/null || true
fi
# Erstelle .npmrc für kiosk User
cat > "$kiosk_home/.npmrc" << 'EOF'
# npm-Konfiguration für kiosk User
fund=false
audit-level=moderate
progress=false
loglevel=warn
cache=/home/kiosk/.npm
prefix=/home/kiosk/.npm-global
EOF
chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.npmrc" 2>/dev/null || true
# npm global Verzeichnis erstellen
mkdir -p "$kiosk_home/.npm-global" 2>/dev/null || true
chown -R "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.npm-global" 2>/dev/null || true
success "✅ Projekt-Berechtigungen für kiosk-User konfiguriert"
info " 📁 Kiosk-Arbeitsverzeichnis: $kiosk_project_dir"
info " 👤 Besitzer: $KIOSK_USER"
info " 🔧 npm-Konfiguration erstellt"
}
create_permission_fix_script() {
log "=== ERSTELLE BERECHTIGEN-REPARATUR-SKRIPT ==="
local fix_script="$CURRENT_DIR/fix-permissions.sh"
progress "Erstelle automatisches Berechtigen-Reparatur-Skript..."
cat > "$fix_script" << 'EOF'
#!/bin/bash
# ===================================================================
# MYP Berechtigen-Reparatur-Skript
# Behebt Berechtigungsprobleme nach npm install als root
# Kann von jedem User ausgeführt werden
# ===================================================================
set -euo pipefail
KIOSK_USER="kiosk"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Farben für Ausgabe
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log() {
echo -e "${GREEN}[$(date '+%H:%M:%S')] $1${NC}"
}
warning() {
echo -e "${YELLOW}[WARNUNG] $1${NC}"
}
error() {
echo -e "${RED}[FEHLER] $1${NC}"
exit 1
}
info() {
echo -e "${BLUE}[INFO] $1${NC}"
}
# Prüfe root-Berechtigung
if [ "$EUID" -ne 0 ]; then
error "Dieses Skript muss als Root ausgeführt werden: sudo $0"
fi
log "=== MYP BERECHTIGEN-REPARATUR ==="
log "Arbeitsverzeichnis: $SCRIPT_DIR"
# Prüfe ob kiosk User existiert
if ! id "$KIOSK_USER" &>/dev/null; then
error "Kiosk-User '$KIOSK_USER' existiert nicht!"
fi
# Lösche node_modules wenn vorhanden (für saubere Neuinstallation)
if [ -d "$SCRIPT_DIR/node_modules" ]; then
log "Entferne bestehende node_modules für saubere Neuinstallation..."
rm -rf "$SCRIPT_DIR/node_modules"
fi
# Erstelle kiosk-shared Gruppe für geteilten Zugriff
log "Erstelle geteilte Berechtigen-Gruppe..."
groupadd -f kiosk-shared 2>/dev/null || true
usermod -a -G kiosk-shared root 2>/dev/null || true
usermod -a -G kiosk-shared "$KIOSK_USER" 2>/dev/null || true
# Führe npm install als kiosk User aus
log "Führe npm install als kiosk-User aus..."
if [ -f "$SCRIPT_DIR/package.json" ]; then
# Wechsle zu kiosk User für npm install
sudo -u "$KIOSK_USER" bash -c "
cd '$SCRIPT_DIR'
export HOME=/home/$KIOSK_USER
if npm install --no-optional --no-audit --no-fund 2>/dev/null; then
echo 'npm install erfolgreich (Standard)'
elif npm install --legacy-peer-deps --no-optional 2>/dev/null; then
echo 'npm install erfolgreich (Legacy-Modus)'
elif npm install --force 2>/dev/null; then
echo 'npm install erfolgreich (Force-Modus)'
else
echo 'npm install fehlgeschlagen'
exit 1
fi
"
if [ $? -eq 0 ]; then
log "✅ npm install als kiosk-User erfolgreich"
else
warning "⚠️ npm install als kiosk-User fehlgeschlagen - versuche als root mit Berechtigen-Korrektur"
# Fallback: npm install als root, dann Berechtigungen korrigieren
if npm install --no-optional --no-audit --no-fund 2>/dev/null; then
log "npm install als root erfolgreich - korrigiere Berechtigungen..."
# Korrigiere node_modules Berechtigungen
if [ -d "$SCRIPT_DIR/node_modules" ]; then
chown -R "$KIOSK_USER:kiosk-shared" "$SCRIPT_DIR/node_modules" 2>/dev/null || true
chmod -R 775 "$SCRIPT_DIR/node_modules" 2>/dev/null || true
log "✅ node_modules Berechtigungen korrigiert"
fi
else
error "npm install auch als root fehlgeschlagen"
fi
fi
else
warning "Keine package.json gefunden"
fi
# Korrigiere allgemeine Projekt-Berechtigungen
log "Korrigiere allgemeine Projekt-Berechtigungen..."
# package.json und package-lock.json
for file in package.json package-lock.json; do
if [ -f "$SCRIPT_DIR/$file" ]; then
chown "$KIOSK_USER:kiosk-shared" "$SCRIPT_DIR/$file" 2>/dev/null || true
chmod 664 "$SCRIPT_DIR/$file" 2>/dev/null || true
fi
done
# logs Verzeichnis
if [ -d "$SCRIPT_DIR/logs" ]; then
chown -R "$KIOSK_USER:kiosk-shared" "$SCRIPT_DIR/logs" 2>/dev/null || true
chmod -R 775 "$SCRIPT_DIR/logs" 2>/dev/null || true
fi
# uploads Verzeichnis
if [ -d "$SCRIPT_DIR/uploads" ]; then
chown -R "$KIOSK_USER:kiosk-shared" "$SCRIPT_DIR/uploads" 2>/dev/null || true
chmod -R 775 "$SCRIPT_DIR/uploads" 2>/dev/null || true
fi
# static Verzeichnis (falls der User dort Änderungen macht)
if [ -d "$SCRIPT_DIR/static" ]; then
chgrp -R kiosk-shared "$SCRIPT_DIR/static" 2>/dev/null || true
chmod -R 775 "$SCRIPT_DIR/static" 2>/dev/null || true
fi
log "✅ Berechtigen-Reparatur abgeschlossen"
info ""
info "📋 Zusammenfassung:"
info " - node_modules gehört jetzt dem kiosk-User"
info " - Geteilte kiosk-shared Gruppe erstellt"
info " - Entwicklungs-Dateien für kiosk-User beschreibbar"
info ""
info "🔧 Verwendung:"
info " - Als kiosk-User: cd $SCRIPT_DIR && npm install"
info " - Als root bei Problemen: sudo $0"
info ""
EOF
# Mache Skript ausführbar
chmod +x "$fix_script" 2>/dev/null || warning "⚠️ Konnte fix-permissions.sh nicht ausführbar machen"
success "✅ Berechtigen-Reparatur-Skript erstellt: $fix_script"
info " 💡 Verwendung nach Setup: sudo ./fix-permissions.sh"
}
install_npm_dependencies() {
log "=== NPM-ABHÄNGIGKEITEN INSTALLATION ==="
@ -1730,6 +2007,22 @@ install_npm_dependencies() {
warning "⚠️ npm install fehlgeschlagen - überspringe"
fi
# WICHTIG: Korrigiere Berechtigungen nach npm install
progress "Korrigiere npm-Berechtigungen für kiosk-User..."
if [ -d "$APP_DIR/node_modules" ]; then
# Erstelle geteilte Gruppe wenn noch nicht vorhanden
groupadd -f kiosk-shared 2>/dev/null || true
usermod -a -G kiosk-shared root 2>/dev/null || true
if id "$KIOSK_USER" &>/dev/null; then
usermod -a -G kiosk-shared "$KIOSK_USER" 2>/dev/null || true
chown -R "$KIOSK_USER:kiosk-shared" "$APP_DIR/node_modules" 2>/dev/null || true
success "✅ node_modules Berechtigungen für kiosk-User korrigiert"
else
warning "⚠️ Kiosk-User nicht gefunden - Berechtigungen werden später korrigiert"
fi
chmod -R 775 "$APP_DIR/node_modules" 2>/dev/null || true
fi
cd "$CURRENT_DIR"
else
info "Keine package.json gefunden - überspringe npm-Installation"
@ -2248,6 +2541,10 @@ install_dependencies_only() {
deploy_application
install_npm_dependencies
# Berechtigungen für kiosk-User korrigieren
fix_project_permissions
create_permission_fix_script
# Services für manuelles Testen vorbereiten
install_systemd_services
enable_and_start_services
@ -2338,6 +2635,10 @@ install_full_production_system() {
install_python_packages
deploy_application
install_npm_dependencies
# Berechtigungen für kiosk-User korrigieren
fix_project_permissions
create_permission_fix_script
else
info "Anwendung bereits deployed - überspringe Basis-Installation"
# Trotzdem Netzwerk-Sicherheit aktualisieren