9. September 2025 Lars Müller Lesezeit: 3 Minuten
Nextcloud-Sitzungen offen über Nacht? Mit PHP 8.4 lassen sich Timeouts und Auto-Logout sauber konfigurieren. So schützt ihr eure Cloud vor neugierigen Augen auf gemeinsam genutzten Rechnern.>
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 PHP8.4 (geht ebenso mit PHP8.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.
- PHP8.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_lifetimedefiniert die Inaktivitätsdauer bis zum Ablauf.session_keepalivesendet sonst regelmäßig „Heartbeats“, die die Sitzung verlängern – das wollen wir hier nicht.auto_logouterzwingt den Logout, selbst wenn Heartbeats aktiv wären.remember_login_cookie_lifetimeauf0schaltet „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) PHP8.4 richtig konfigurieren (FPM)
Damit Nextclouds Timeout nicht von PHP ausgebremst wird, muss PHPs Session-Aufräumen mitspielen.
Pfade für PHP8.4 (Debian/Ubuntu)
/etc/php/8.4/fpm/php.ini- optional pro Pool:
/etc/php/8.4/fpm/pool.d/www.conf
Falls ihr PHP8.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 = 0session.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
fail2banfür den Web-Login (Brute-Force-Schutz). - Nutzt
Redisfür transaktionales File-Locking (stabiler und schneller).
5) Checkliste & Troubleshooting
- Nachstellen: Einloggen, länger als
session_lifetimewarten, Seite neu laden – ihr solltet abgemeldet sein. - Es greift nicht? Prüft, ob
gc_maxlifetimein/etc/php/8.4/fpm/php.iniangepasst 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 PHP8.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.

