Nextcloud sicherer machen: Automatischer Logout

  Lars Müller   Lesezeit: 3 Minuten  🗪 1 Kommentar Auf Mastodon ansehen

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.

nextcloud sicherer machen: automatischer logout

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 auf 0 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, PHP gc_maxlifetime = 1800, Remember-Cookie 0.
  • Etwas großzügiger (Büro, ohne Dauer-Logins): session_lifetime = 60*60, keepalive = false, auto_logout = true, PHP gc_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.

Tags

Nextcloud, PHP, Secure

Thomas
Geschrieben von Thomas am 9. September 2025 um 16:00

Gibt es auch einen automatischen login des Desktop Clients beim Start des Systems, ohne Passwortspeicher, wie zum Beispiel KWallet oder GNOME-keyring?