Provided by: manpages-de-dev_4.23.1-1_all bug

BEZEICHNUNG

       setreuid, seteuid - reale und/oder effektive Benutzer- oder Gruppenkennung setzen

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <unistd.h>

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

   Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):

       setreuid(), setregid():
           _XOPEN_SOURCE >= 500
               || /* Seit Glibc 2.19: */ _DEFAULT_SOURCE
               || /* Glibc <= 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
       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  (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  des  Anderen  oder  (iii)  Setzen  der  effektiven
              Benutzerkennung  (Gruppenkennung)  auf  den  Wert  der  gespeicherten   set-user-ID
              (gespeicherten set-group-ID) wurde angestrebt.

VERSIONEN

       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.

STANDARDS

       POSIX.1-2008.

GESCHICHTE

       POSIX.1-2001, 4.3BSD (erschien zuerst in 4.2BSD).

       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.

       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)

Ü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 ⟨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⟩.