credentials(7) | Miscellaneous Information Manual | credentials(7) |
credentials - Prozesskennzeichner
Jeder Prozess hat einen eindeutigen, nicht negativen, ganzzahligen Kennzeichner, der ihm zugewiesen wird, wenn er mittels fork(2) erstellt wird. Ein Prozess kann seine PID mittels getpid(2) ermitteln. Eine PID wird mit dem Typ pid_t (definiert in <sys/types.h>) dargestellt.
PIDs werden in einer Reihe von Systemaufrufen verwandt, um den vom Aufruf betroffenen Prozess zu identifizieren. Beispiele: kill(2), ptrace(2), setpriority(2), setpgid(2), setsid(2), sigqueue(3) und waitpid(2).
Eine PID eines Prozesses bleibt über einen execve(2) hinweg erhalten.
Die Elternprozesskennung eines Prozesses kennzeichnet den Prozess, der diesen Prozess mit fork(2) erstellte. Ein Prozess kann seine PPID mittels getppid(2) ermitteln. Eine PPID wird mit dem Typ pid_t dargestellt.
Eine PPID eines Prozesses bleibt über einen execve(2) hinweg erhalten.
Jeder Prozess hat eine Sitzungskennung und eine Prozessgruppenkennung, beide mit dem Typ pid_t dargestellt. Ein Prozess kann seine Sitzungskennung mittels getsid(2) und seine Prozessgruppenkennung mittels getpgrp(2) ermitteln.
Ein mittels fork(2) erstellter Kindprozess erbt die Sitzungs- und Prozessgruppenkennung des Elternprozesses. Eine Prozesssitzungskennung und Prozessgruppenkennung bleibt über einen execve(2) hinweg erhalten.
Sitzungs- und Prozessgruppen sind eine Abstraktion, die zur Unterstützung von Shellauftragssteuerung entwickelt wurden. Eine Prozessgruppe (manchmal »Auftrag« (engl. »job«)) genannt, ist eine Sammlung von Prozessen, die die gleiche Prozessgruppenkennung haben; die Shell erstellt eine neue Prozessgruppe für den oder die Prozess(e), die zur Ausführung eines einzelnen Befehls oder einer Weiterleitung verwandt werden (z.B. werden die zwei Prozesse, die bei der Ausführung des Befehls »ls | wc« erstellt werden, in die gleiche Prozessgruppe gelegt). Eine Prozessgruppenmitgliedschaft kann mittels setpgid(2) gesetzt werden. Der Prozess, dessen Prozesskennung identisch zu der Prozessgruppenkennung ist, ist der Prozessgruppenleiter für diese Gruppe.
Eine Sitzung ist eine Sammlung von Prozessen, die die gleiche Sitzungskennung haben. Alle Mitglieder einer Prozessgruppe haben auch die gleiche Sitzungskennung (d.h. alle Mitglieder einer Prozessgruppe gehören immer zu der gleichen Sitzung, so dass die Sitzungs- und Prozessgruppen eine strenge, zweistufige Hierarchie von Prozessen bilden). Eine neue Sitzung wird erstellt, wenn ein Prozess setsid(2) aufruft. Dies erstellt eine neue Sitzung, deren Sitzungskennung identisch zu der PID des Prozesses ist, der setsid(2) aufrief. Der Ersteller der Sitzung wird Sitzungsleiter genannt.
Alle Prozesse einer Sitzung teilen sich ein steuerndes Terminal. Das steuernde Terminal wird etabliert, wenn der Sitzungsleiter erstmalig ein Terminal öffnet (außer beim Aufruf von open(2) ist der Schalter O_NOCTTY angegeben). Ein Terminal kann nicht das steuernde Terminal für mehrere Sitzungen gleichzeitig sein.
Nur einer der Aufträge in einer Sitzung kann der Vordergrundauftrag sein; andere Aufträge in der Sitzung sind Hintergrundaufträge. Nur der Vordergrundauftrag kann vom Terminal lesen; wenn ein Prozess im Hintergrund versucht, vom Terminal zu lesen, wird der Prozessgruppe ein Signal SIGTTIN gesandt, wodurch der Auftrag suspendiert wird. Falls der Schalter TOSTOP für das Terminal gesetzt wurde (siehe termios(3)), dann darf nur der Vordergrundauftrag auf das Terminal schreiben; Schreibzugriffe von Hintergrundaufträgen führen zur Erstellung eines Signals SIGTTOU, wodurch der Auftrag suspendiert wird. Wenn Terminal-Tasten, die ein Signal erzeugen (wie die Unterbrechen-Taste, normalerweise Strg-C) gedrückt werden, wird das Signal an den Prozess im Vordergrundauftrag gesandt.
Verschiedene Systemaufrufe und Bibliotheksfunktionen können auf alle Mitglieder einer Prozessgruppe agieren, einschließlich kill(2), killpg(3), getpriority(2), setpriority(2), ioprio_get(2), ioprio_set(2), waitid(2) und waitpid(2). Siehe auch die Diskussion der Aktionen F_GETOWN, F_GETOWN_EX, F_SETOWN und F_SETOWN_EX in fcntl(2).
Jedem Prozess sind verschiedene Benutzer- und Gruppenkennungen zugeordnet. Diese Kennungen sind Ganzzahlen bzw. werden durch die Typen uid_t und gid_t (definiert in <sys/types.h>) dargestellt.
Unter Linux hat jeder Prozess die folgenden Benutzer- und Gruppenkennungen:
Ein mit fork(2) erstellter Kindprozess kopiert die Benutzer- und Gruppenkennung seines Elternprozesses. Während eines execve(2) werden die realen Benutzer- und Gruppenkennungen und ergänzenden Gruppenkennungen erhalten; die effektiven und gespeicherten gesetzten Kennungen können geändert werden, wie in execve(2) beschrieben.
Abgesehen von den oben genannten Zwecken werden die Benutzerkennungen eines Prozesses auch in einer Reihe weiterer Kontexte eingesetzt:
Entsprechend der in den relevanten Handbuchseiten beschriebenen Regeln kann ein Prozess die folgenden APIs verwenden, um seine Benutzer- und Gruppenkennungen zu verändern:
Jede Änderung an der effektiven Benutzer- (Gruppen-)kennung des Prozesses wird automatisch zu der Dateisystembenutzer- (-gruppen-)kennung des Prozesses übertragen. Änderungen an einer effektiven Benutzer- oder Gruppenkennung können auch das Attribut »dumpable« des Prozesses beeinflussen, wie dies in prctl(2) beschrieben wird.
Änderungen an den Benutzer- und Gruppenkennungen eines Prozesses können die Capabilitys eines Prozesses beeinflussen, wie dies in capabilities(7) beschrieben ist.
Prozesskennungen, Elternprozesskennungen, Prozessgruppenkennungen und Sitzungskennungen sind in POSIX.1 spezifiziert. Die realen, effektiven und gespeicherten gesetzten Benutzer- und Gruppenkennungen und die ergänzenden Gruppenkennungen sind in POSIX.1 spezifiziert. Die Dateisystem-Benutzer- und -Gruppenkennungen sind eine Linux-Erweiterung.
Verschiedene Felder in der Datei /proc/PID/status zeigen die oben beschriebenen Prozesszugangsberechtigungen. Siehe proc(5) für weitere Informationen.
Die POSIX-Thread-Spezifikation verlangt, dass Zugangsberechtigungen von allen Threads in einem Prozess gemeinsam benutzt werden. Auf der Kernelebene verwaltet Linux allerdings separate Benutzer- und Gruppenzugangsberechtigungen für jeden Thread. Die NPTL-Threading-Implementierung erledigt einiges an Arbeit, um sicherzustellen, dass jede Änderungen an den Benutzer- oder Gruppenzugangsberechtigungen (z.B. Aufrufe von setuid(2), setresuid(2)) an alle POSIX-Threads in einem Prozess übertragen werden. Siehe nptl(7) für weitere Details.
bash(1), csh(1), groups(1), id(1), newgrp(1), ps(1), runuser(1), setpriv(1), sg(1), su(1), access(2), execve(2), faccessat(2), fork(2), getgroups(2), getpgrp(2), getpid(2), getppid(2), getsid(2), kill(2), setegid(2), seteuid(2), setfsgid(2), setfsuid(2), setgid(2), setgroups(2), setpgid(2), setresgid(2), setresuid(2), setsid(2), setuid(2), waitpid(2), euidaccess(3), initgroups(3), killpg(3), tcgetpgrp(3), tcgetsid(3), tcsetpgrp(3), group(5), passwd(5), shadow(5), capabilities(7), namespaces(7), path_resolution(7), pid_namespaces(7), pthreads(7), signal(7), system_data_types(7), unix(7), user_namespaces(7), sudo(8)
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.
5. Februar 2023 | Linux man-pages 6.03 |