pam_systemd - Benutzersitzungen beim Systemd-Anmeldeverwalter
registrieren
pam_systemd registriert Benutzersitzungen beim
Systemd-Anmeldeverwalter systemd-logind.service(8) und damit in der
Systemd-Control-Gruppen-Hierarchie.
Das Modul wendet auch verschiedene Ressourcenverwaltungs- und
Laufzeitparameter auf die neue Sitzung an, wie dies in dem
JSON-Benutzerdatensatz[1] des Benutzers, falls dieser definiert ist,
konfiguriert wurde.
Bei der Anmeldung stellt dieses Modul in Zusammenarbeit mit
systemd-logind.service Folgendes sicher:
1.Falls es noch nicht existiert, wird das
Benutzerlaufzeitverzeichnis /run/user/$UID entweder erstellt oder als neues
»tmpfs«-Dateisystem mit Quota angewandt und dessen
Eigentümerschaft auf den sich anmeldenden Benutzer
geändert.
2.Die Umgebungsvariable $XDG_SESSION_ID wird
initialisiert. Falls Auditierung verfügbar ist und
pam_loginuid.so vor diesem Modul ausgeführt wurde (was
nachdrücklich empfohlen wird), wird die Variable aus der
Auditierungssitzungskennung (/proc/self/sessionid) initialisiert. Andernfalls
wird ein unabhängiger Sitzungszähler verwandt.
3.Für die Sitzung wird eine neue
Systemd-Bereichs-Unit erstellt. Falls dies die erste parallele Sitzung des
Benutzer ist, wird automatisch eine implizite benutzerbezogene Scheiben-Unit
unterhalb user.slice erstellt und die Bereichs-Unit dorthinein gelegt. Es wird
eine Instanz des Systemdienstes user@.service, der als
Systemd-Benutzerverwalterinstanz läuft, gestartet.
4.Die Umgebungsvariablen »$TZ«,
»$EMAIL« und »$LANG« werden für den
Benutzer basierend auf den entsprechenden Daten aus dem JSON-Benutzerdatensatz
(falls dieser definiert ist), konfiguriert. Desweiteren werden alle
Umgebungsvariablen, die in dem Benutzerdatensatz explizit konfiguriert sind,
importiert und die Umask, die Nice-Stufe sowie die Ressourcenbegrenzungen
initialisiert.
Bei der Abmeldung stellt dieses Modul Folgendes sicher:
1.Falls in
logind.conf(5)
(
KillUserProcesses=) aktiviert, werden alle Prozesse der Sitzung
beendet. Falls die letzte parallele Sitzung eines Benutzers endet, wird auch
die Systemd-Instanz sowie die Scheiben-Unit des Benutzer beendet.
2.Falls die letzte parallele Benutzersitzung endet, wird
auch das Benutzerlaufzeitverzeichnis und alle seine Inhalte entfernt.
Falls das System nicht mit Systemd als Init-System hochgefahren
wurde, wird dieses Modul nichts machen und sofort PAM_SUCCESS
zurückliefern.
Die folgenden Optionen werden verstanden:
class=
Akzeptiert ein Zeichenkettenargument, das die
Sitzungsklasse setzt. Die Umgebungsvariable
XDG_SESSION_CLASS (siehe
unten) hat Vorrang. Entweder »user«, »greeter«,
»lock-screen« oder »background«. Siehe
sd_session_get_class(3) für Details über die
Sitzungsklasse.
type=
Akzeptiert ein Zeichenkettenargument, das den Sitzungstyp
setzt. Die Umgebungsvariable
XDG_SESSION_TYPE (siehe unten) hat
Vorrang. Entweder »unspecified«, »tty«,
»x11«, »wayland« oder »mir«. Siehe
sd_session_get_type(3) für Details über den
Sitzungstyp.
desktop=
Akzeptiert eine einzelne, kurze
Identifikationszeichenkette für die Desktop-Umgebung. Die
Umgebungsvariable
XDG_SESSION_DESKTOP (siehe unten) hat Vorrang. Dies
kann zum Hinweis auf die eingesetzte Desktop-Sitzung verwandt werden, auf die
dies zutrifft und falls die Information verfügbar ist. Beispielsweise
»GNOME« oder »KDE«. Es wird empfohlen, die
gleichen Kennzeichner und die gleiche Groß-/Kleinschreibung wie
für
$XDG_CURRENT_DESKTOP, wie dies durch die
Desktop-Eintragsspezifikation[2] festgelegt ist, zu verwenden.
(Beachten Sie allerdings, dass die Option nur einen einzelnen Eintrag und
keine durch Doppelpunkt getrennte Liste wie
$XDG_CURRENT_DESKTOP
akzeptiert.) Siehe
sd_session_get_desktop(3) für weitere
Details.
debug[=]
Akzeptiert ein optionales logisches Argument. Falls
»yes« oder ohne Argument, wird das Modul Fehlersuchinformationen
beim Betrieb protokollieren.
Es wird nur session bereitgestellt.
Die folgenden Umgebungsvariablen werden durch das Modul
initialisiert und stehen den Prozessen der Sitzung des Benutzers zur
Verfügung:
$XDG_SESSION_ID
Ein kurzer, zur Verwendung in Dateinamen geeigneter
Sitzungskennzeichner. Die Zeichenkette selbst sollte als opak betrachtet
werden, obwohl es oft nur die durch /proc/self/sessionid gemeldete
Auditsitzungskennung ist. Jede Kennung wird während der
Maschinenlaufzeit nur einmal vergeben. Sie kann daher zur eindeutigen
Kennzeichnung von Dateien oder anderer Ressourcen während dieser
Sitzung verwandt werden. Kombinieren Sie diese Kennzeichnung mit der durch
sd_id128_get_boot(3) zurückgelieferten Systemstartkennzeichnung,
um eine global eindeutige Kennzeichnung zu erhalten.
$XDG_RUNTIME_DIR
Pfad zu einem für den Benutzer privaten und
beschreibbaren Verzeichnis, das nur während der Anmeldezeit des
Benutzers an der Maschine existiert. Es wird beim erstmaligen Anmelden eines
Benutzers an der Maschine automatisch erstellt und bei der letzten Abmeldung
entfernt. Falls der Benutzer sich zweimal zur gleichen Zeit anmeldet, werden
beide Sitzungen die gleiche $XDG_RUNTIME_DIR und die gleichen Inhalte
sehen. Falls sich ein Benutzer einmal anmeldet und dann wieder abmeldet und
wieder anmeldet, werden die Inhalte des Verzeichnisses dazwischen verloren
gehen; Anwendungen sollten sich aber nicht auf dieses Verhalten verlassen und
müssen mit verbliebenen alten Dateien umgehen können. Um
sitzungsbezogene Daten in diesem Verzeichnis zu speichern, sollte der Benutzer
den Wert von $XDG_SESSION_ID im Dateinamen einschließen. Dieses
Verzeichnis muss für Laufzeitsystemobjekte wie AF_UNIX-Sockets,
FIFOs, PID-Dateien und Ähnliches verwandt werden. Es wird garantiert,
dass dieses Verzeichnis lokal ist und die größtmögliche
Menge an Dateisystemfunktionalitäten bereitstellt, die das
Betriebssystem anbietet. Für weitere Details siehe die
XDG-Basisverzeichnisspezifikation[3]. $XDG_RUNTIME_DIR wird
nicht gesetzt, falls der aktuelle Benutzer nicht der ursprüngliche
Benutzer der Sitzung ist.
$TZ, $EMAIL, $LANG
Falls für den anmeldenden Benutzer ein
JSON-Benutzerdatensatz bekannt ist, werden diese Variablen aus den
entsprechenden Einträgen in dem Datensatz initialisiert.
Die folgenden Umgebungsvariablen werden vom Modul gelesen und
können vom PAM-Dienst verwandt werden, um Metadaten an das Modul zu
übergeben. Falls diese Variablen nicht beim Aufruf des PAM-Moduls
gesetzt sind, aber anderweitig bestimmt werden können, werden sie vom
Modul gesetzt, so dass diese Variablen für die Sitzung und
Anwendungen initialisiert sind, falls sie überhaupt bekannt sind.
$XDG_SESSION_TYPE
Der Sitzungstyp. Dies kann anstelle von type= auf
der Modulparameterzeile verwandt werden und wird normalerweise
bevorzugt.
$XDG_SESSION_CLASS
Die Sitzungsklasse. Dies kann anstelle von class=
auf der Modulparameterzeile verwandt werden und wird normalerweise
bevorzugt.
$XDG_SESSION_DESKTOP
Der Desktop-Kennzeichner. Dieser kann statt
desktop= auf der Modulparameterzeile verwandt werden und wird
normalerweise bevorzugt.
$XDG_SEAT
Der Name des Sitzes, für den die Sitzung
registriert werden soll, falls vorhanden.
$XDG_VTNR
Die Nummer des VTs, für das die Sitzung
registriert werden soll, falls vorhanden. (Gilt nur für Sitze mit einem
verfügbaren VT, wie »seat0«.)
pam_systemd wird $XDG_SEAT und $XDG_VTNR
basierend auf der Variablen $DISPLAY (falls letztere gesetzt ist)
initialisieren, falls sie nicht gesetzt sind.
PAM-Module, die früher im Stapel, d.h. vor
pam_systemd.so kommen, können mittels PAM-Kontextobjekten
Sitzungsbereichsbegrenzungen setzen. Die Daten für diese Objekte
werden als NUL-begrenzte C-Zeichenketten bereitgestellt und direkt in
die zugehörigen Unit-Ressourcensteuerungsdirektiven eingeblendet.
Beachten Sie, dass diese Begrenzungen für individuelle Sitzungen des
Benutzers gelten, sie gelten nicht für alle Benutzerprozesse
zusammengenommen. Insbesondere wird die benutzerbezogene
user@.service-Unit-Instanz, die innerhalb des systemd
--user-Verwalterprozesses und seiner Kinder läuft,
außerhalb jeglicher Sitzung nachverfolgt, von allen Benutzersitzungen
gemeinsam benutzt und ist nicht von diesen Begrenzungen betroffen.
Siehe systemd.resource-control(5) für weitere
Informationen über die Ressourcen. Siehe auch pam_set_data(3)
für zusätzliche Informationen über die Arten,
Kontextobjekte zu setzen.
systemd.memory_max=
Setzt Unit MemoryMax=.
systemd.tasks_max=
Setzt Unit TasksMax=.
systemd.cpu_weight=
Setzt Unit CPUWeight=.
systemd.io_weight=
Setzt Unit IOWeight=.
systemd.runtime_max_sec=
Setzt Unit RuntimeMaxSec=.
Beispieldaten können von einem anderen PAM-Modul
bereitgestellt werden:
pam_set_data(handle, "systemd.memory_max", (void *)"200M", cleanup);
pam_set_data(handle, "systemd.tasks_max", (void *)"50", cleanup);
pam_set_data(handle, "systemd.cpu_weight", (void *)"100", cleanup);
pam_set_data(handle, "systemd.io_weight", (void *)"340", cleanup);
pam_set_data(handle, "systemd.runtime_max_sec", (void *)"3600", cleanup);
Hier ist ein Beispiel-PAM-Konfigurationsfragment, das die
Verwaltung von Benutzersitzungen durch systemd-logind.service erlaubt:
#%PAM-1.0
auth sufficient pam_unix.so
-auth sufficient pam_systemd_home.so
auth required pam_deny.so
account required pam_nologin.so
-account sufficient pam_systemd_home.so
account sufficient pam_unix.so
account required pam_permit.so
-password sufficient pam_systemd_home.so
password sufficient pam_unix.so sha512 shadow try_first_pass try_authtok
password required pam_deny.so
-session optional pam_keyinit.so revoke
-session optional pam_loginuid.so
-session optional pam_systemd_home.so
-session optional pam_systemd.so
session required pam_unix.so
systemd(1), systemd-logind.service(8),
logind.conf(5), loginctl(1), pam_systemd_home(8),
pam.conf(5), pam.d(5), pam(8), pam_loginuid(8),
systemd.scope(5), systemd.slice(5),
systemd.service(5)
- 1.
- JSON-Benutzerdatensatz
https://systemd.io/USER_RECORD
- 2.
- Desktop-Eintragsspezifikation
http://standards.freedesktop.org/desktop-entry-spec/latest/
- 3.
- XDG-Basisverzeichnisspezifikation
http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von
Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU General
Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite
finden, schicken Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer.