Provided by: manpages-de-dev_4.21.0-2_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.

STANDARDS

       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)

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