Provided by: manpages-de-dev_1.11-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():
           _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

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 (Linux: hat im  Fall  von  setreuid()
              nicht   die   CAP_SETUID-Capability   oder   im   Fall  von  setregid()  nicht  die
              CAP_SETGID-Capability) 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
       At  the  kernel  level,  user IDs and group IDs are a per-thread attribute. However, POSIX
       requires that all threads in a process share the  same  credentials.  The  NPTL  threading
       implementation  handles  the  POSIX  requirements  by  providing wrapper functions for the
       various system calls that change process UIDs and GIDs. These wrapper functions (including
       those for setreuid()  and setregid())  employ a signal-based technique to ensure that when
       one thread changes credentials, all of the other threads in the process also change  their
       credentials. For details, see 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.04  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 http://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>.