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

BEZEICHNUNG

       setreuid, seteuid - reale und/oder effektive Benutzer- oder Gruppen-ID setzen

ÜBERSICHT

       #include <sys/types.h>
       #include <unistd.h>

       int setreuid(uid_t ruid, uid_t euid);
       int setregid(gid_t rgid, gid_t egid);

   Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

       setreuid(), setregid():
           _XOPEN_SOURCE >= 500
               || /* Seit Glibc 2.19: */ _DEFAULT_SOURCE
               || /* Glibc-Versionen <= 2.19: */ _BSD_SOURCE

BESCHREIBUNG

       setreuid() setzt die reale und effektive Benutzer-ID des aufrufenden Prozesses.

       Wird  ein Wert von -1 für entweder die reale oder effektive Benutzer-ID angegeben, so wird
       erzwungen, dass diese ID unverändert bleibt.

       Unprivilegierte Prozesse dürfen die effektive Benutzer-ID nur auf die reale, die effektive
       oder die gespeicherte gesetzte Benutzer-ID setzen.

       Unprivilegierte  Benutzer  dürfen nur die reale Benutzer-ID auf die reale Benutzer-ID oder
       die effektive Benutzer-ID setzen.

       Wenn die reale Benutzer-ID gesetzt  ist  (d.h.,  ruid  ist  nicht  -1)oder  die  effektive
       Benutzer-ID auf einen Wert gesetzt ist, der nicht gleich der vorherigen realen Benutzer-ID
       ist, so wird die gesicherte Benutzer-ID auf die neue effektive Benutzer-ID gesetzt.

       Vollkommen analog setzt setregid() die reale und die effektive Gruppen-ID des  aufrufenden
       Prozesses  und alles oben gesagte bleibt gültig, wenn »Gruppe« anstatt »Benutzer« verwandt
       wird.

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 Benutzer-ID
       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  Benutzer-ID des Aufrufenden ändern (das heißt, ruid
              würde nicht mit der realen Benutzer-ID des Aufrufenden übereinstimmen), aber es gab
              einen temporären Fehlschlag beim Zuweisen der nötigen Datenstrukturen des Kernels.

       EAGAIN ruid  entspricht  nicht  der  realen Benutzer-ID des Aufrufenden, und dieser Aufruf
              würde die  Prozesse  mit  der  realen  Benutzer-ID  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   Gruppen-IDs   ist   in  diesem
              Benutzer-Namensraum unzulässig.

       EPERM  Der  aufrufende  Prozess  ist  nicht  privilegiert  (Unter  Linux:  hat  nicht  die
              notwendige Capability in seinem Namensraum: CAP_SETUID im Falle von setreuid() oder
              CAP_SETGID im Falle von setregid()) und eine andere Änderung  als  (i)  Vertauschen
              der  effektiven  mit  der  realen Benutzer-ID oder (ii) Setzen einer dieser auf den
              Wert den anderen oder (iii) Setzen der effektiven Benutzer-ID (Gruppen-ID) auf  den
              Wert der gesicherten Benutzer-ID wurde angestrebt.

KONFORM ZU

       POSIX.1-2001,  POSIX.1-2008,  4.3BSD  (setreuid()  und  setregid() erschienen erstmalig in
       4.2BSD).

ANMERKUNGEN

       Das  Setzen  der  effektiven  Benutzer-ID  (Gruppen-ID)  auf  die  gesicherte  Benutzer-ID
       (Gruppen-ID) ist möglich seit Linux  1.1.37 (1.1.38).

       POSIX.1  beschreibt  nicht  alle  möglichen  UID-Änderungen,  die  Linux  für  einen nicht
       privilegierten Prozess zulässt. Für setreuid() kann die effektive Benutzer-ID auf den Wert
       der  realen  Benutzer-ID  oder  die  gespeicherte Set-User-ID gesetzt werden. Es ist nicht
       spezifiziert, ob unprivilegierte Prozesse die reale Benutzer-ID auf die reale  Benutzer-ID
       [sic],  die  effektive  Benutzer-ID  oder  die gespeicherte Set-User-ID setzen dürfen. Für
       setregid() kann die reale Gruppen-ID auf den Wert der gespeicherten Set-Group-ID  geändert
       werden  und  die  effektive  Gruppen-ID  kann auf den Wert der realen Gruppen-ID  oder der
       gespeicherten Set-Group-ID geändert werden.  Die  genauen  Details,  welche  ID-Änderungen
       zulässig sind, unterscheiden sich implementierungsabhängig.

       POSIX.1  macht  keine  Angaben  zum  Effekt dieser Aufrufe auf die gespeicherten Werte von
       Set-User-ID und Set-Group-ID.

       Die  ursprünglichen  Linux-Systemaufrufe  setreuid()  und  setregid()  unterstützten   nur
       16-Bit-Benutzer-   und   Gruppen-IDs.   Entsprechend  fügte  Linux  2.4  setreuid32()  und
       setregid32() hinzu, die 32-Bit-IDs unterstützen.  Die  Wrapper-Funktionen  setreuid()  und
       setregid() von Glibc gehen damit transparent über Kernelversionen hinweg um.

   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 setreuid() und
       setregid()) 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

       getgid(2), getuid(2), seteuid(2),  setgid(2),  setresuid(2),  setuid(2),  capabilities(7),
       credentials(7), user_namespaces(7)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.15  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 Patrick Rother <krd@gulu.net>,
       Helge Kreutzmann <debian@helgefjell.de>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>
       und Mario Blättermann <mario.blaettermann@gmail.com> 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>.