Provided by: manpages-de-dev_2.16-1_all bug

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
       entsprechend gesetzt.

       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.03  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  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 <debian-l10n-german@lists.debian.org>.