setresgid

SETRESUID(2)                Linux-Programmierhandbuch               SETRESUID(2)



BEZEICHNUNG
       setresuid, setresgid - reale, effektive und gespeicherte Benutzer- oder
       Gruppenkennung setzen

ÜBERSICHT
       #define _GNU_SOURCE         /* siehe feature_test_macros(7) */
       #include <unistd.h>

       int setresuid(uid_t ruid, uid_t euid, uid_t suid);
       int setresgid(gid_t rgid, gid_t egid, gid_t sgid);

BESCHREIBUNG
       setresuid() setzt die reale Benutzerkennung, die effektive
       Benutzerkennung und die gespeicherte set-user-ID des aufrufenden
       Prozesses.

       Ein unprivilegierter Prozess kann seine reale UID, die effektive UID und
       die gespeicherte set-user-ID jeweils zu einem der Folgenden ändern: der
       aktuellen realen UID, der aktuellen effektiven UID oder der aktuellen
       gespeicherten set-user-ID.

       Ein privilegierter Prozess (unter Linux einer, der die
       CAP_SETUID-Capability hat) kann die reale UID, die effektive UID und die
       gespeicherte set-user-ID auf beliebige Werte setzen.

       Wenn eines der Argumente -1 ist, wird der dazugehörige Wert nicht
       geändert.

       Ohne Rücksicht auf die Änderungen an der realen UID, der effektiven UID
       und der gespeicherten set-user-ID wird die Dateisystem-UID stets auf den
       gleichen Wert wie die (möglicherweise neue) effektive UID gesetzt.

       setresgid() setzt vollständig analog dazu die reale GID, die effektive
       GID und die gespeicherte SGID des aufrufenden Prozesses (und ändert stets
       die GID des Dateisystems auf den gleichen Wert, wie die effektive GID)
       mit den gleichen Einschränkungen für nicht privilegierte Prozesse.

RÜCKGABEWERT
       Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1
       zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.

       Hinweis: In manchen Fällen kann setresuid() selbst dann fehlschlagen,
       wenn die UID des Aufrufenden 0 ist; es ist ein gravierender
       Sicherheitsfehler, wenn der Test auf einen Fehlschlag von setresuid()
       nicht ausgeführt wird.

FEHLER
       EAGAIN Der Aufruf würde die reale UID des Aufrufenden ändern (das heißt,
              ruid würde nicht mit der realen UID des Aufrufenden
              übereinstimmen), aber es gab einen temporären Fehlschlag beim
              Zuweisen der nötigen Datenstrukturen des Kernels.

       EAGAIN ruid entspricht nicht der realen UID des Aufrufenden, und dieser
              Aufruf würde die Prozesse mit der realen Benutzerkennung ruid die
              Ressourcenbegrenzung RLIMIT_NPROC des Aufrufenden übersteigen
              lassen. Seit Linux 3.1 tritt dieser Fehler nicht mehr auf (aber
              robuste Anwendungen sollten die Möglichkeit dieses Fehlers
              prüfen); siehe die Beschreibung von EAGAIN in execve(2).

       EINVAL Eine oder mehrere der Zielbenutzer- oder Gruppenkennungen ist in
              diesem Benutzer-Namensraum unzulässig.

       EPERM  Der aufrufende Prozess ist nicht privilegiert (hatte nicht die
              notwendige Capability in seinem Benutzernamensraum) und versuchte,
              die Kennungen auf nicht erlaubte Werte zu ändern. Für setresuid()
              ist die notwendige Capability CAP_SETUID, für setresgid() ist sie
              CAP_SETGID.

VERSIONEN
       Diese Systemaufrufe sind unter Linux seit Linux 2.1.44 verfügbar.

KONFORM ZU
       Diese Systemaufrufe sind nicht standardisiert. Sie kommen auch in HP-UX
       und einigen BSDs vor.

ANMERKUNGEN
       Unter HP-UX und FreeBSD befinden sich die Prototypen in <unistd.h>. Unter
       Linux wird der Prototyp durch Glibc seit Version 2.3.2 bereitgestellt.

       Der Original-Linux-Systemaufrufe setresuid() und setresgid() unterstützen
       nur 16-Bit-Benutzer- und -Gruppenkennungen. Nachfolgend fügte Linux 2.4
       setresuid32() und setresgid32() hinzu, die 32-Bit-Kennungen unterstützen.
       Die Glibc-Wrapper-Funktionen setfsuid() setresgid() und stellen die
       Änderungen transparent über Kernel-Versionen hinweg bereit.

   Unterschiede C-Bibliothek/Kernel
       Auf der Kernelebene sind Benutzer- und Gruppenkennungen Attribute pro
       Thread. POSIX verlangt aber, dass sich alle Threads in einem Prozess die
       gleichen Berechtigungsnachweise teilen. Die
       NPTL-Threading-Implementierung behandelt die POSIX-Anforderungen durch
       Bereitstellung von Wrapper-Funktionen für die verschiedenen
       Systemaufrufe, die die UIDs und GIDs der Prozesse ändern. Diese
       Wrapper-Funktionen (darunter die für setresuid() und setresgid())
       verwenden eine signalbasierte Technik, um sicherzustellen, dass bei der
       Änderung der Berechtigungsnachweise eines Threads auch alle anderen
       Threads des Prozesses ihre Berechtigungsnachweise ändern. Für Details
       siehe nptl(7).

SIEHE AUCH
       getresuid(2), getuid(2), setfsgid(2), setfsuid(2), setreuid(2),
       setuid(2), capabilities(7), credentials(7), user_namespaces(7)

KOLOPHON
       Diese Seite ist Teil der Veröffentlichung 5.13 des Projekts
       Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie
       Fehler gemeldet werden können sowie die aktuelle Version dieser Seite
       finden sich unter https://www.kernel.org/doc/man-pages/.


ÜBERSETZUNG
       Die deutsche Übersetzung dieser Handbuchseite wurde von Chris Leick
       <c.leick@vollbio.de>, Mario Blättermann <mario.blaettermann@gmail.com>
       und Dr. Tobias Quathamer <toddy@debian.org> erstellt.

       Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General
       Public License Version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 ⟨debian-l10n-
       german@lists.debian.org⟩.



Linux                             22. März 2021                     SETRESUID(2)