Durchsicht: Robustheit bei Neuinstallationen
- auth.py: .env auch in schreibgeschütztem Ordner aktualisieren (Server-Login) - Controller: ohne Spotify-Login warten statt abstürzen; Playlist darf fehlen; nicht abspielbare Wünsche überspringen statt hängen zu bleiben - install-server.sh: alle SSH-Ports freigeben (kein Aussperren), curl und python3-systemd (fail2ban) installieren - install-player.sh: Bluetooth per rfkill entsperren und Dienst starten Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -111,6 +111,9 @@ $SUDO systemctl enable raspotify >/dev/null 2>&1
|
||||
BT_MAC=""
|
||||
if [ $UPDATE = 0 ] && [ "$BLUETOOTH" = 1 ]; then
|
||||
schritt "Bluetooth-Lautsprecher"
|
||||
# Auf frischen Systemen ist Bluetooth oft per rfkill gesperrt (z. B. ohne gesetztes WLAN-Land)
|
||||
command -v rfkill >/dev/null && { $SUDO rfkill unblock bluetooth || true; }
|
||||
$SUDO systemctl enable --now bluetooth >/dev/null 2>&1 || warnung "Bluetooth-Dienst ließ sich nicht starten."
|
||||
# Der Player soll nicht selbst als Bluetooth-Empfänger für fremde Handys dienen
|
||||
$SUDO systemctl disable --now bluealsa-aplay >/dev/null 2>&1 || true
|
||||
info "Lautsprecher jetzt in den Kopplungsmodus versetzen (meist Bluetooth-Taste halten, bis die LED blinkt)."
|
||||
|
||||
@@ -43,9 +43,11 @@ if [ $UPDATE = 0 ]; then
|
||||
warnung "Das sieht nicht nach einer Playlist aus – bitte später im Admin-Bereich eintragen."
|
||||
PLAYLIST_ID=""
|
||||
fi
|
||||
SSH_PORT="$(${SUDO} sshd -T 2>/dev/null | awk '/^port /{print $2; exit}')"
|
||||
SSH_PORT="${SSH_PORT:-22}"
|
||||
ja_nein "Firewall (ufw) einrichten? Erlaubt SSH (Port $SSH_PORT), 80 und 443" j && FIREWALL=1 || FIREWALL=0
|
||||
# alle Ports, auf denen SSH lauscht, plus den der aktuellen Sitzung – damit sich niemand aussperrt
|
||||
SSH_PORTS="$( { ${SUDO} sshd -T 2>/dev/null | awk '/^port /{print $2}'; [ -n "${SSH_CONNECTION:-}" ] && awk '{print $4}' <<<"$SSH_CONNECTION"; } | sort -un | tr '\n' ' ')"
|
||||
SSH_PORTS="${SSH_PORTS:-22}"
|
||||
SSH_PORT="${SSH_PORTS%% *}" # für fail2ban: erster Port
|
||||
ja_nein "Firewall (ufw) einrichten? Erlaubt SSH (Port ${SSH_PORTS% }), 80 und 443" j && FIREWALL=1 || FIREWALL=0
|
||||
ja_nein "fail2ban für SSH einrichten?" j && FAIL2BAN=1 || FAIL2BAN=0
|
||||
ja_nein "Automatische Sicherheitsupdates aktivieren?" j && AUTOUPDATE=1 || AUTOUPDATE=0
|
||||
export DOMAIN ACME_EMAIL SSH_PORT
|
||||
@@ -54,10 +56,10 @@ fi
|
||||
# ------------------------------------------------------------------ Pakete
|
||||
schritt "Pakete"
|
||||
$SUDO apt-get update -qq
|
||||
PAKETE=(python3-venv sqlite3 caddy)
|
||||
PAKETE=(python3-venv sqlite3 caddy curl)
|
||||
if [ $UPDATE = 0 ]; then
|
||||
[ $FIREWALL = 1 ] && PAKETE+=(ufw)
|
||||
[ $FAIL2BAN = 1 ] && PAKETE+=(fail2ban)
|
||||
[ $FAIL2BAN = 1 ] && PAKETE+=(fail2ban python3-systemd)
|
||||
[ $AUTOUPDATE = 1 ] && PAKETE+=(unattended-upgrades)
|
||||
fi
|
||||
pakete "${PAKETE[@]}"
|
||||
@@ -128,11 +130,11 @@ if [ $UPDATE = 0 ]; then
|
||||
schritt "Firewall (ufw)"
|
||||
$SUDO ufw default deny incoming >/dev/null
|
||||
$SUDO ufw default allow outgoing >/dev/null
|
||||
$SUDO ufw allow "$SSH_PORT/tcp" comment "SSH" >/dev/null
|
||||
for p in $SSH_PORTS; do $SUDO ufw allow "$p/tcp" comment "SSH" >/dev/null; done
|
||||
$SUDO ufw allow 80/tcp comment "HTTP (Caddy/ACME)" >/dev/null
|
||||
$SUDO ufw allow 443/tcp comment "HTTPS (Caddy)" >/dev/null
|
||||
$SUDO ufw --force enable >/dev/null
|
||||
info "ufw aktiv: $SSH_PORT, 80, 443"
|
||||
info "ufw aktiv: SSH ${SSH_PORTS% }, 80, 443"
|
||||
fi
|
||||
if [ $FAIL2BAN = 1 ]; then
|
||||
schritt "fail2ban"
|
||||
|
||||
Reference in New Issue
Block a user