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"
|
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() {
|
install_npm_dependencies() {
|
||||||
log "=== NPM-ABHÄNGIGKEITEN INSTALLATION ==="
|
log "=== NPM-ABHÄNGIGKEITEN INSTALLATION ==="
|
||||||
|
|
||||||
@ -1730,6 +2007,22 @@ install_npm_dependencies() {
|
|||||||
warning "⚠️ npm install fehlgeschlagen - überspringe"
|
warning "⚠️ npm install fehlgeschlagen - überspringe"
|
||||||
fi
|
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"
|
cd "$CURRENT_DIR"
|
||||||
else
|
else
|
||||||
info "Keine package.json gefunden - überspringe npm-Installation"
|
info "Keine package.json gefunden - überspringe npm-Installation"
|
||||||
@ -2248,6 +2541,10 @@ install_dependencies_only() {
|
|||||||
deploy_application
|
deploy_application
|
||||||
install_npm_dependencies
|
install_npm_dependencies
|
||||||
|
|
||||||
|
# Berechtigungen für kiosk-User korrigieren
|
||||||
|
fix_project_permissions
|
||||||
|
create_permission_fix_script
|
||||||
|
|
||||||
# Services für manuelles Testen vorbereiten
|
# Services für manuelles Testen vorbereiten
|
||||||
install_systemd_services
|
install_systemd_services
|
||||||
enable_and_start_services
|
enable_and_start_services
|
||||||
@ -2338,6 +2635,10 @@ install_full_production_system() {
|
|||||||
install_python_packages
|
install_python_packages
|
||||||
deploy_application
|
deploy_application
|
||||||
install_npm_dependencies
|
install_npm_dependencies
|
||||||
|
|
||||||
|
# Berechtigungen für kiosk-User korrigieren
|
||||||
|
fix_project_permissions
|
||||||
|
create_permission_fix_script
|
||||||
else
|
else
|
||||||
info "Anwendung bereits deployed - überspringe Basis-Installation"
|
info "Anwendung bereits deployed - überspringe Basis-Installation"
|
||||||
# Trotzdem Netzwerk-Sicherheit aktualisieren
|
# Trotzdem Netzwerk-Sicherheit aktualisieren
|
||||||
|
Loading…
x
Reference in New Issue
Block a user