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

BEZEICHNUNG

       setreuid, seteuid - reale und/oder effektive Benutzer- oder Gruppenkennung 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 realen und effektiven Benutzerkennungen des aufrufenden Prozesses.

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

       Unprivilegierte Prozesse dürfen die effektive  Benutzerkennung  nur  auf  die  reale,  die
       effektive oder die gespeicherte set-user-ID setzen.

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

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

       Vollkommen  analog  setzt  setregid()  die  reale  und  die  effektive  Gruppenkennung 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  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  (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 Benutzerkennung  (Gruppenkennung)  oder  (ii)  Setzen
              einer   dieser   auf  den  Wert  den  anderen  oder  (iii)  Setzen  der  effektiven
              Benutzerkennung  (Gruppenkennung)  auf  den  Wert  der  gespeicherten   set-user-ID
              (gespeicherten set-group-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  Benutzerkennung  (Gruppenkennung)   auf   die   gespeicherte
       set-user-ID (set-group-ID) ist seit Linux 1.1.37 (1.1.38) möglich.

       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 Benutzerkennung auf  den
       Wert  der  realen Benutzerkennung oder die gespeicherte set-user-ID gesetzt werden. Es ist
       nicht spezifiziert, ob unprivilegierte Prozesse die reale Benutzerkennung  auf  die  reale
       Benutzerkennung,  die  effektive  Benutzerkennung oder die gespeicherte set-user-ID setzen
       dürfen. Für setregid() kann die  reale  Gruppenkennung  auf  den  Wert  der  gespeicherten
       set-group-ID geändert werden und die effektive Gruppenkennung kann auf den Wert der realen
       Gruppenkennung oder der gespeicherten set-group-ID geändert werden. Die  genauen  Details,
       welche Kennungsä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  Gruppenkennungen.  Entsprechend  fügte  Linux  2.4 setreuid32() und
       setregid32() hinzu, die 32-Bit-Kennungen 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  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 Patrick Rother <krd@gulu.net>,
       Martin     Eberhard     Schauer     <Martin.E.Schauer@gmx.de>,      Mario      Blättermann
       <mario.blaettermann@gmail.com> und 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 <debian-l10n-german@lists.debian.org>.