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:
parent
785a2b6134
commit
821883141e
301
setup.sh
301
setup.sh
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user