focal (2) setreuid.2.gz

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