User Sessions & systemd-logind (Artikel 077)
Verwaltung von Benutzersitzungen mit systemd-logind. Erfahren Sie, wie RHEL Sitzungen trackt, Ressourcen für eingeloggte User verwaltet und wie Sie das Session-Verhalten konfigurieren.
# systemd-logind: Sitzungsverwaltung im Enterprise-System
TL;DR / Management Summary Jedes Mal, wenn Sie sich per SSH einloggen oder an einer Konsole anmelden, tritt systemd-logind in Aktion. Dieser Dienst ist verantwortlich für das Tracking von Benutzersitzungen, das Verwalten von “Seats” (Hardware-Zuweisung) und das automatische Aufräumen von Prozessen nach dem Logout. In RHEL ist logind zudem eng mit dem Power-Management (Shutdown/Suspend) verknüpft. Wer logind beherrscht, kann verhindern, dass verwaiste Benutzersitzungen den Server ausbremsen.
# 1. Einführung & Architektur
Der Tracker der User.
Logind ist ein Hintergrunddienst, der Informationen über angemeldete Benutzer bereitstellt.
# Die logind-Kette (Mermaid)
graph LR
A[SSH Login / TTY] --> B[PAM: pam_systemd.so]
B --> C[systemd-logind]
C --> D[Create Session ID]
C --> E[Assign User Slice / Cgroups]
C --> F[Manage Seats / Inhibit Locks]
G[loginctl] -->|Query| C
# 2. loginctl: Das Interface für den Admin
Sitzungen überwachen.
Das Werkzeug loginctl erlaubt die Interaktion mit dem Dämon.
# Aktive Sitzungen anzeigen
loginctl list-sessions
# OUTPUT: SESSION UID USER SEAT TTY
# 1 1000 admin seat0 tty1
# Details zu einem User
loginctl user-status admin
Hier sehen Sie alle Prozesse, die aktuell zur Session dieses Benutzers gehören, gruppiert in einer Cgroup.
# 3. Konfiguration für Server (logind.conf)
Den Standard anpassen.
Die Datei /etc/systemd/logind.conf steuert das Verhalten bei Logins und Power-Events.
# Beispiel: Prozesse beim Logout killen
Standardmäßig erlaubt systemd, dass Prozesse (wie screen oder tmux) weiterlaufen. In hochsicheren Umgebungen will man das oft unterbinden.
[Login]
# Killt alle User-Prozesse nach dem Logout (Vorsicht: bricht tmux!)
KillUserProcesses=yes
# Verhindert, dass der Server bei Druck auf den Power-Button sofort ausgeht
HandlePowerKey=ignore
# 4. Day-2 Operations: Lingering & Sessions
Dienste am Leben erhalten.
Wie bereits in Artikel 011 erwähnt, ist Lingering die wichtigste Einstellung für Service-Accounts.
# User-Session “festpinnen”
# Erlaubt dem User, Prozesse auch ohne aktive Sitzung laufen zu lassen
sudo loginctl enable-linger serviceuser
# Sitzungen beenden
# Beendet eine hängende SSH-Sitzung sofort
sudo loginctl terminate-session 1
# 5. Troubleshooting & “War Stories”
Wenn die Sitzung hängen bleibt.
# Story 1: “Der Server fährt nicht runter”
Symptom: systemctl reboot dauert 90 Sekunden und bricht dann ab, oder der Server schaltet sich nicht aus.
Ursache: Ein Prozess (oft eine VM oder ein DB-Dienst) hält einen “Inhibit Lock”. Er sagt systemd-logind: “Ich bin noch nicht fertig, bitte warte.”
Lösung: Finden Sie den Lock:
loginctl list-inhibitors
Beenden Sie den blockierenden Prozess manuell.
# Story 2: “User-Prozesse werden zufällig gekillt”
Symptom: Ein Admin startet ein langes Skript in einer SSH-Session. Nach dem Logout des Admins wird das Skript beendet, obwohl es im Hintergrund laufen sollte.
Ursache: In RHEL ist oft KillUserProcesses=yes gesetzt (oder die Applikation ist nicht korrekt in der Cgroup isoliert).
Lösung: Nutzen Sie systemd-run --scope --user my-script.sh oder aktivieren Sie Lingering für den User.
# 6. Fazit & Empfehlung
- Audit: Nutzen Sie
loginctl list-users, um zu sehen, wer wirklich eingeloggt ist (besser alswho). - Sicherheit: Deaktivieren Sie das Handling des Power-Keys auf Rack-Servern, um versehentliches Ausschalten zu verhindern.
- Performance: logind nutzt Cgroups, um User voneinander zu trennen. Das verhindert, dass ein User alle CPU-Ressourcen des Hosts frisst.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Alle User listen | loginctl list-users |
| Session-Details | loginctl show-session <id> |
| Lingering Status | ls /var/lib/systemd/linger/ |
| Seat Status | loginctl list-seats |
| Alle Sitzungen eines Users killen | loginctl terminate-user <name> |
| Locks anzeigen | loginctl list-inhibitors |