PAM_SYSTEMD(8) pam_systemd PAM_SYSTEMD(8) BEZEICHNUNG pam_systemd - Benutzersitzungen beim Systemd-Anmeldeverwalter registrieren UBERSICHT pam_systemd.so BESCHREIBUNG 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-Benutzerdatensatze[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 Eigentumerschaft auf den sich anmeldenden Benutzer geandert. 2. Die Umgebungsvariable $XDG_SESSION_ID wird initialisiert. Falls Auditierung verfugbar ist und pam_loginuid.so vor diesem Modul ausgefuhrt wurde (was nachdrucklich empfohlen wird), wird die Variable aus der Auditierungssitzungskennung (/proc/self/sessionid) initialisiert. Andernfalls wird ein unabhangiger Sitzungszahler verwandt. 3. Fur 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 lauft, gestartet. 4. Die Umgebungsvariablen >>$TZ<<, >>$EMAIL<< und >>$LANG<< werden fur 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 zuruckliefern. OPTIONEN Die folgenden Optionen werden verstanden: class= Akzeptiert ein Zeichenkettenargument, das die Sitzungsklasse setzt. Die Umgebungsvariable XDG_SESSION_CLASS (siehe unten) hat Vorrang. Siehe sd_session_get_class(3) fur eine Moglichkeit, die Klasse einer Sitzung abzufragen. Die folgenden Sitzungsklassen sind definiert: Tabelle 1. Sitzungsklassen +-----------------+----------------------------------+ |Name | Erklarung | +-----------------+----------------------------------+ |user | Eine regulare, interaktive | | | Benutzersitzung. Dies ist die | | | Standardklasse fur Sitzungen, | | | bei denen ein TTY- oder | | | X-Display zum | | | Registrierungszeitpunkt der | | | Sitzung bekannt ist. | +-----------------+----------------------------------+ |user-early | Ahnlich zu user, aber Sitzungen | | | dieser Klasse werden nicht nach | | | systemd-user-sessions.service(8) | | | sortiert, d.h. sie konnten | | | gestartet werden, bevor das | | | Etablieren regularer Sitzungen | | | erlaubt ist. Diese | | | Sitzungsklasse ist fur Sitzungen | | | des Benutzers Root die Vorgabe, | | | da diese andernfalls fur die | | | Klasse user qualifiziert waren, | | | siehe oben. (Hinzugefugt in | | | v256.) | +-----------------+----------------------------------+ |user-light | Ahnlich zu >>user<<, aber | | | Sitzungen dieser Klasse werden | | | nicht user@.service(5) des | | | Benutzers reinziehen, und daher | | | lauft moglicherweise kein | | | Diensteverwalter des Benutzers. | | | (Hinzugefugt in v258.) | +-----------------+----------------------------------+ |user-early-light | Ahnlich zu >>user-early<<, aber | | | Sitzungen dieser Klasse werden | | | nicht user@.service(5) des | | | Benutzers reinziehen, und daher | | | lauft moglicherweise kein | | | Diensteverwalter des Benutzers. | | | (Hinzugefugt in v258.) | +-----------------+----------------------------------+ |user-incomplete | Ahnlich zu user, aber fur | | | Sitzungen, die noch nicht | | | vollstandig eingerichtet sind, | | | d.h. die kein eingehangtes | | | Home-Verzeichnis oder ahnliches | | | haben. Dies wird von | | | systemd-homed.service(8) | | | verwandt, um das Anmelden von | | | Benutzern via ssh(1) zu | | | ermoglichen, bevor ihr | | | Home-Verzeichnis eingehangt wird | | | und somit das Einhangen | | | verzogert, bis der Benutzer sein | | | Entsperrpasswort bereitgestellt | | | hat. Sitzungen aus dieser Klasse | | | werden zu der regularen Klasse | | | user angehoben, sobald das | | | Home-Verzeichnis aktiviert | | | wurde. | +-----------------+----------------------------------+ |greeter | Ahnlich zu user, aber fur | | | Sitzungen, die vorubergehend vom | | | Display-Manger gestartet werden | | | und die den Benutzer nach seinen | | | Anmelde-Zugangsberechtigungen | | | fragen. | +-----------------+----------------------------------+ |lock-screen | Ahnlich zu user, aber fur | | | Sitzungen, die vorubergehend vom | | | Display-Manger gestartet werden | | | und die einen Sperrbildschirm | | | anzeigen, der zum Entsperren | | | gesperrter Benutzerkonten oder | | | -sitzungen verwandt werden kann. | +-----------------+----------------------------------+ |background | Wird fur Sitzungen im | | | Hintergrund verwandt, wie | | | solche, die cron(8) und ahnliche | | | Werkzeuge aufrufen. Dies ist die | | | Standardklasse fur Sitzungen, | | | fur die beim | | | Sitzungsregistrierungszeitpunkt | | | kein TTY oder X-Display bekannt | | | ist. | +-----------------+----------------------------------+ |background-light | Ahnlich zu >>background<<, aber | | | Sitzungen dieser Klasse werden | | | nicht user@.service(5) des | | | Benutzers reinziehen, und daher | | | lauft moglicherweise kein | | | Diensteverwalter des Benutzers. | | | (Hinzugefugt in v256.) | +-----------------+----------------------------------+ |manager | Der Dienst user@.service(5) des | | | Benutzers wird unter dieser | | | Sitzungsklasse registriert. | | | (Hinzugefugt in v256.) | +-----------------+----------------------------------+ |manager-early | Ahnlich wie >>manager<<, aber | | | fur den Benutzer root. | | | Vergleichen Sie die Situation | | | bei user und user-early. | | | (Hinzugefugt in v256.) | +-----------------+----------------------------------+ |none | Uberspringt die Registrierung | | | dieser Sitzung mit Logind. Es | | | wird kein Sitzungs-Bereich | | | erstellt und der | | | Benutzer-Diensteverwalter wird | | | nicht gestartet. (Hinzugefugt in | | | v259.) | +-----------------+----------------------------------+ Falls uber die PAM-Moduloption oder mittels der Umgebungsvariablen $XDG_SESSION_CLASS keine Sitzungsklasse festgelegt ist, wird die Klasse automatisch basierend auf verschiedenen Sitzungsparametern ausgewahlt, wie der Sitzungstyp (falls bekannt), ob die Sitzung eine TTY oder eine X11-Anzeige hat und der Benutzerart. Beachten Sie, dass verschiedene Werkzeuge das Setzen der Sitzungsklasse fur neu reservierte PAM-Sitzungen explizit uber die Umgebungsvariable $XDG_SESSION_CLASS erlauben. Klassische UNIX-Cronjobs unterstutzen beispielsweise Umgebungsvariablenzuweisungen (siehe crontab(5)), die die individuelle Auswahl pro Cronjob zwischen den Sitzungsklassen background und background-light erlauben oder run0 --setenv=XDG_SESSION_CLASS=user-light kann zur Auswahl zwischen user und user-light fur aufgerufene privilegierte Sitzungen verwandt werden. Hinzugefugt in Version 197. type= Akzeptiert ein Zeichenkettenargument, das den Sitzungstyp setzt. Die Umgebungsvariable XDG_SESSION_TYPE (siehe unten) hat Vorrang. Entweder unspecified, tty, x11, wayland, mir oder web. Siehe sd_session_get_type(3) fur Details uber den Sitzungstyp. Hinzugefugt in Version 209. desktop= Akzeptiert eine einzelne, kurze Identifikationszeichenkette fur 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 verfugbar ist. Beispielsweise GNOME oder KDE. Es wird empfohlen, die gleichen Kennzeichner und die gleiche Gross-/Kleinschreibung wie fur $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) fur weitere Details. Hinzugefugt in Version 240. area= Akzeptiert einen Dateinamen als Parameter. Falls angegeben und der Benutzer sich an seinem Konto anmeldet, wird die Umgebungsvariable $HOME auf ~/Areas/ gesetzt, wobei die angegebene Zeichenkette angehangt wird, aber nur, falls das Verzeichnis existiert. Desweiteren wird die Variable $XDG_AREA auf den Parameter (ohne Prafix) gesetzt. Diese Funktionalitat kann zur Verwaltung mehrerer separater sekundarer Home-Verzeichnisse innerhalb des primaren Home-Verzeichnisses des Benutzer verwandt werden. Typischerweise wird der Bereich, an dem angemeldet werden soll, wahrend der Anmeldung angegeben, falls das Konto dies erlaubt (von pam_systemd_home(8) bereitgestellte Konten erlauben dies), aber dieser Parameter kann verwandt werden, um eine Vorgabe zu definieren, falls das nicht bereitgestellt wird. Beachten Sie, dass dies $HOME nur wahrend der Anmeldung anpasst, es betrifft keine anderweitig berichteten Home-Verzeichnisse des Benutzers. Insbesondere bedeutet dies, dass sshd(8) weiterhin nach SSH-Schlusseln des Benutzers nur in dem primaren Home-Verzeichnis des Benutzers sucht und nicht in einem der Bereiche. Beachten Sie, dass der Standard-Bereich, an dem angemeldet wird, auch als Teil des Benutzerkontos konfiguriert werden kann. Der mittels area= angegebene Bereich setzt den dort konfigurierten Standard-Bereich ausser Kraft. Beachten Sie auch, dass ein explizit vom Benutzer zum Anmeldezeitpunkt festgelegter Bereich beide ausser Kraft setzt. Beachten Sie ebenfalls, dass das Setzen dieses Parameters auf eine leere Zeichenkette dazu fuhrt, dass der Standard-Bereich, wie er vom Benutzerdatensatz konfiguriert wird, zuruckgesetzt wird, d.h. dass dadurch sichergestellt wird, dass sich der Benutzer am primaren Home-Verzeichnis seines Kontos anmeldet. Weitere Details zum Konzept der Bereiche finden Sie in pam_systemd_home(8). Hinzugefugt in Version 258. default-capability-bounding-set=, default-capability-ambient-set= Akzeptiert eine Kommata-getrennte Liste von Prozess-Capabilitys (z.B. CAP_WAKE_ALARM, CAP_BLOCK_SUSPEND, ), die fur aufgerufen Sitzungen des Prozesses gesetzt werden sollen, falls der Benutzerdatensatz nicht direkt angemessene Gruppen von Capabilitys setzt. Siehe capabilities(7) fur Details zum Capabilitys-Konzept. Falls nicht angegeben, verbleibt die standardmassige Begrenzungsmenge unverandert (d.h. sie enthalt die vollstandige Menge der Capabilitys). Die Standard-Umgebungsmenge wird auf CAP_WAKE_ALARM fur regulare Benutzer gesetzt, falls die PAM-Sitzung einem lokalen Sitz zugeordnet ist oder falls sie fur den Systemd-Benutzerdienst user@.service aufgerufen wird. Andernfalls ist die Vorgabe die leere Menge. Hinzugefugt in Version 254. debug[=] Akzeptiert ein optionales logisches Argument. Falls >>yes<< oder ohne Argument, wird das Modul Fehlersuchinformationen beim Betrieb protokollieren. BEREITGESTELLTE MODULTYPEN Es wird nur session bereitgestellt. UMGEBUNGSVARIABLEN Die folgenden Umgebungsvariablen werden durch das Modul initialisiert und stehen den Prozessen der Sitzung des Benutzers zur Verfugung: $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 wahrend der Maschinenlaufzeit nur einmal vergeben. Sie kann daher zur eindeutigen Kennzeichnung von Dateien oder anderer Ressourcen wahrend dieser Sitzung verwandt werden. Kombinieren Sie diese Kennzeichnung mit der durch sd_id128_get_boot(3) zuruckgelieferten Systemstartkennzeichnung, um eine global eindeutige Kennzeichnung zu erhalten. $XDG_RUNTIME_DIR Pfad zu einem fur den Benutzer privaten und beschreibbaren Verzeichnis, das nur wahrend 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 mussen mit verbliebenen alten Dateien umgehen konnen. Um sitzungsbezogene Daten in diesem Verzeichnis zu speichern, sollte der Benutzer den Wert von $XDG_SESSION_ID im Dateinamen einschliessen. Dieses Verzeichnis muss fur Laufzeitsystemobjekte wie AF_UNIX-Sockets, FIFOs, PID-Dateien und Ahnliches verwandt werden. Es wird garantiert, dass dieses Verzeichnis lokal ist und die grosstmogliche Menge an Dateisystemfunktionalitaten bereitstellt, die das Betriebssystem anbietet. Fur weitere Details siehe die XDG-Basisverzeichnisspezifikation[3]. $XDG_RUNTIME_DIR wird nicht gesetzt, falls der aktuelle Benutzer nicht der ursprungliche Benutzer der Sitzung ist. $TZ, $EMAIL, $LANG Falls fur den anmeldenden Benutzer ein JSON-Benutzerdatensatz bekannt ist, werden diese Variablen aus den entsprechenden Eintragen in dem Datensatz initialisiert. Hinzugefugt in Version 245. $SHELL_PROMPT_PREFIX, $SHELL_PROMPT_SUFFIX, $SHELL_WELCOME Diese Umgebungsvariablen werden von den Dienste-Zugangsberechtigungen >>shell.prompt.prefix<<, >>shell.prompt.suffix<< und >>shell.welcome<< falls gesetzt initialisiert. Sie werden an den aufgerufenen Diensteprozess ubergeben, wo sie in jede Shell-Eingabeaufforderung importiert werden (insbesondere wird $SHELL_PROMPT_PREFIX als Prafix fur $PS1 und $SHELL_PROMPT_SUFFIX als Suffix hinzugefugt) oder auf dem Bildschirm ausgegeben, wenn sich eine Shell erstmalig initialisiert. Hinzugefugt in Version 257. Die folgenden Umgebungsvariablen werden vom Modul gelesen und konnen vom PAM-Dienst verwandt werden, um Metadaten an das Modul zu ubergeben. Falls diese Variablen nicht beim Aufruf des PAM-Moduls gesetzt sind, aber anderweitig bestimmt werden konnen, werden sie vom Modul gesetzt, so dass diese Variablen fur die Sitzung und Anwendungen initialisiert sind, falls sie uberhaupt bekannt sind. $XDG_SESSION_TYPE Der Sitzungstyp. Dies kann anstelle von type= auf der Modulparameterzeile verwandt werden und wird normalerweise bevorzugt. Hinzugefugt in Version 209. $XDG_SESSION_CLASS Die Sitzungsklasse. Dies kann anstelle von class= auf der Modulparameterzeile verwandt werden und wird normalerweise bevorzugt. Hinzugefugt in Version 209. $XDG_SESSION_DESKTOP Der Desktop-Kennzeichner. Dieser kann statt desktop= auf der Modulparameterzeile verwandt werden und wird normalerweise bevorzugt. Hinzugefugt in Version 209. $XDG_SEAT Der Name des Sitzes, fur den die Sitzung registriert werden soll, falls vorhanden. Hinzugefugt in Version 209. $XDG_VTNR Die Nummer des VTs, fur das die Sitzung registriert werden soll, falls vorhanden. (Gilt nur fur Sitze mit einem verfugbaren VT, wie >>seat0<<.) Hinzugefugt in Version 209. $XDG_AREA Falls ein Bereich (ein sekundares Home-Verzeichnis des Benutzers, innerhalb des primaren Home-Verzeichnisses) zur Anmeldung ausgewahlt wurde, wird diese Variable auf den Bereichsnamen gesetzt (ohne vorangestellten Pfad). Andernfalls ist sie nicht gesetzt. Details zu Bereichen finden Sie oben. Hinzugefugt in Version 258. $XDG_SESSION_EXTRA_DEVICE_ACCESS Die Gruppe der zusatzlichen Hardware-Gerate, auf die der Sitzung Zugriff gewahrt werden soll. Fur jede KENNUNG in der Liste wird der Sitzung Zugriff auf alle Gerate, die in udev(7) mit >>xaccess-KENNUNG<< markiert sind, gewahren. Hinzugefugt in Version 260. pam_systemd wird $XDG_SEAT und $XDG_VTNR basierend auf der Variablen $DISPLAY (falls letztere gesetzt ist) initialisieren, falls sie nicht gesetzt sind. SITZUNGSBEGRENZUNGEN PAM-Module, die fruher im Stapel, d.h. vor pam_systemd.so kommen, konnen mittels PAM-Kontextobjekten Sitzungsbereichsbegrenzungen setzen. Die Daten fur diese Objekte werden als NUL-begrenzte C-Zeichenketten bereitgestellt und direkt in die zugehorigen Unit-Ressourcensteuerungsdirektiven eingeblendet. Beachten Sie, dass diese Begrenzungen fur individuelle Sitzungen des Benutzers gelten, sie gelten nicht fur alle Benutzerprozesse zusammengenommen. Insbesondere wird die benutzerbezogene user@.service-Unit-Instanz, die innerhalb des systemd --user-Verwalterprozesses und seiner Kinder lauft, ausserhalb jeglicher Sitzung nachverfolgt, von allen Benutzersitzungen gemeinsam benutzt und ist nicht von diesen Begrenzungen betroffen. Siehe systemd.resource-control(5) fur weitere Informationen uber die Ressourcen. Siehe auch pam_set_data(3) fur zusatzliche Informationen uber die Arten, Kontextobjekte zu setzen. systemd.memory_max= Setzt Unit MemoryMax=. Hinzugefugt in Version 239. systemd.tasks_max= Setzt Unit TasksMax=. Hinzugefugt in Version 239. systemd.cpu_weight= Setzt Unit CPUWeight=. Hinzugefugt in Version 239. systemd.io_weight= Setzt Unit IOWeight=. Hinzugefugt in Version 239. systemd.runtime_max_sec= Setzt Unit RuntimeMaxSec=. Hinzugefugt in Version 244. Beispieldaten konnen 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); BEISPIEL Hier ist ein Beispiel-PAM-Konfigurationsfragment, das die Verwaltung von Benutzersitzungen durch systemd-logind.service erlaubt: #%PAM-1.0 -auth [success=done authtok_err=bad perm_denied=bad maxtries=bad default=ignore] pam_systemd_home.so auth sufficient pam_unix.so auth required pam_deny.so account required pam_nologin.so -account [success=done authtok_expired=bad new_authtok_reqd=bad maxtries=bad acct_expired=bad default=ignore] pam_systemd_home.so account required pam_unix.so -password sufficient pam_systemd_home.so password sufficient pam_unix.so sha512 shadow try_first_pass 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 SIEHE AUCH systemd(1), systemd-user-sessions.service(8), user@.service(5), 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) ANMERKUNGEN 1. JSON-Benutzerdatensatze https://systemd.io/USER_RECORD 2. Desktop-Eintragsspezifikation https://standards.freedesktop.org/desktop-entry-spec/latest/ 3. XDG-Basisverzeichnisspezifikation https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . systemd 260.2 PAM_SYSTEMD(8)