Sitzungen, die ewig offen bleiben, sind wie der Wohnungsschlüssel unter der Fußmatte: bequem, aber ein Sicherheitsrisiko. Ich nutze teilweise auf einem Arbeitsrechner meine Cloud und habe dort festgestellt, dass teilweise am nächsten Tag die Sitzung aktiv war. Das ist ungünstig, wenn der Rechner von mehreren Personen genutzt wird. In Nextcloud lässt sich das sauber regeln – mit klaren Timeouts und einem echten Auto-Logout. Hier zeige ich, wie ihr das serverseitig und in Nextcloud selbst korrekt konfiguriert – konkret für PHP 8.4 (geht ebenso mit PHP 8.3).
Was wir erreichen wollen
- Inaktive Web-Sitzungen laufen nach X Minuten/Stunden ab.
- Ein Auto-Logout beendet die Sitzung verlässlich – auch wenn Hintergrund-„Herzschläge“ sie sonst verlängern würden.
- PHP 8.4 und das System (Debian/Ubuntu) sind so eingestellt, dass die Garbage-Collection (GC) die Sessions auch wirklich entfernt.
1) Nextcloud: Session-Parameter setzen
Die relevanten Optionen stehen in config/config.php
. Öffnet diese Datei und ergänzt bzw. ändert folgende Werte:
// config/config.php
'session_lifetime' => 60 * 60, // 1 Stunde Inaktivität
'session_keepalive' => false, // keine künstlichen Herzschläge aus dem Web-UI
'auto_logout' => true, // clientseitiger Auto-Logout nach session_lifetime
'remember_login_cookie_lifetime' => 0, // "Angemeldet bleiben" global deaktivieren (optional)
Erläuterung
session_lifetime
definiert die Inaktivitätsdauer bis zum Ablauf.session_keepalive
sendet sonst regelmäßig „Heartbeats“, die die Sitzung verlängern – das wollen wir hier nicht.auto_logout
erzwingt den Logout, selbst wenn Heartbeats aktiv wären.remember_login_cookie_lifetime
auf0
schaltet „Angemeldet bleiben“ ab; ohne diesen Schritt kann die Web-Sitzung schneller enden, aber ein gesetztes Remember-Cookie die Re-Anmeldung vereinfachen. (Je nach Sicherheitsbedarf entscheiden.)
2) PHP 8.4 richtig konfigurieren (FPM)
Damit Nextclouds Timeout nicht von PHP ausgebremst wird, muss PHPs Session-Aufräumen mitspielen.
Pfade für PHP 8.4 (Debian/Ubuntu)
/etc/php/8.4/fpm/php.ini
- optional pro Pool:
/etc/php/8.4/fpm/pool.d/www.conf
Falls ihr PHP 8.4 neu aufgesetzt habt, achtet bei Apache/Nginx auf die aktualisierte FPM-Socket-Konfiguration (z. B. a2enconf php8.4-fpm
bei Apache, fastcgi_pass
auf den neuen Socket bei Nginx).
Wichtige INI-Werte
Öffnet /etc/php/8.4/fpm/php.ini
und setzt:
; PHP: Sitzung maximal so lange wie (oder länger als) Nextcloud erlauben
session.gc_maxlifetime = 3600 ; muss >= session_lifetime sein (hier: 1h)
; Auf Debian/Ubuntu wird GC meist per Cron erledigt.
; Lasst gc_probability daher auf 0 (Standard der Distribution).
session.gc_probability = 0
session.gc_maxlifetime
ist die Obergrenze, ab der PHP Session-Dateien als Müll betrachtet und löschen darf. Setzt diesen Wert mindestens so hoch wie Nextclouds session_lifetime
. Debian/Ubuntu deaktiviert die Zufalls-GC oft und räumt stattdessen zweimal pro Stunde per System-Cronjob (/usr/lib/php/sessionclean
über /etc/cron.d/php
) auf. Damit das funktioniert, muss der Wert in der php.ini
stimmen; ini_set()
zur Laufzeit bringt hier nichts.
Neustarten/Reload
sudo systemctl reload php8.4-fpm
# und ggf. Webserver neu laden
sudo systemctl reload nginx # oder: apache2
3) Empfohlene Kombinationen
- Streng und bequem genug (typisch privat):
session_lifetime = 30*60
(30 min),keepalive = false
,auto_logout = true
, PHPgc_maxlifetime = 1800
, Remember-Cookie0
. - Etwas großzügiger (Büro, ohne Dauer-Logins):
session_lifetime = 60*60
,keepalive = false
,auto_logout = true
, PHPgc_maxlifetime >= 3600
, Remember-Cookie > 0 nur, wenn organisatorisch gewünscht.
Beachtet: auto_logout
ist clientseitig – es sorgt für Logout im Browser-Tab; es ersetzt keine Maximallebensdauer für kompromittierte Tokens oder App-Passwörter.
4) Bonus: Allgemeine Härtung
- Aktiviert und pflegt
fail2ban
für den Web-Login (Brute-Force-Schutz). - Nutzt
Redis
für transaktionales File-Locking (stabiler und schneller).
5) Checkliste & Troubleshooting
- Nachstellen: Einloggen, länger als
session_lifetime
warten, Seite neu laden – ihr solltet abgemeldet sein. - Es greift nicht? Prüft, ob
gc_maxlifetime
in/etc/php/8.4/fpm/php.ini
angepasst und FPM neu geladen wurde. Auf Debian/Ubuntu löscht der Cron nur, wenn dort der richtige Wert steht. - Docker/Snaps: Manche Pakete abstrahieren die Pfade; die Parameter bleiben gleich, aber die Datei liegt woanders (z. B. Snap-Volume).
Quellen:
– Nextcloud Admin-Doku: auto_logout, session_keepalive, session_lifetime, hardening Server
– PHP-Handbuch: session.gc_maxlifetime, GC-Verhalten, session_gc().
– Debian/Ubuntu: Session-Cleanup via Cron (/usr/lib/php/sessionclean
, /etc/cron.d/php
).
– Hinweise zu PHP 8.4 (FPM) unter Debian/Ubuntu.
Weiterdenken: Wer besonders strenge Policies braucht, ergänzt serverseitig eine absolute Maximallebensdauer (z. B. regelmäßiges Token-Rotating via OCC-Jobs) und erzwingt MFA. Sessions sind nur eine Schicht im Schweizer-Käse-Modell der Sicherheit.
Gibt es auch einen automatischen login des Desktop Clients beim Start des Systems, ohne Passwortspeicher, wie zum Beispiel KWallet oder GNOME-keyring?