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

BEZEICHNUNG

       setuid - Benutzeridentität setzen

ÜBERSICHT

       #include <sys/types.h>
       #include <unistd.h>

       int setuid(uid_t uid);

BESCHREIBUNG

       setuid()  setzt  die effektive Benutzer-ID des aufrufenden Prozesses. Falls der aufrufende
       Prozess privilegiert ist (genauer: der Prozess verfügt über die Capability  CAP_SETUID  in
       seinem Namensraum), so wird die reale und die gesicherte ID auch gesetzt.

       Unter   Linux  ist  setuid()  wie  die  POSIX-Version  mit  dem  Merkmal  _POSIX_SAVED_IDS
       implementiert.  Damit  kann  ein  (von  root  verschiedenes)   setuid-Programm   sämtliche
       Privilegien  abgeben, unprivilegierte Arbeiten verrichten und anschließend auf sichere Art
       und Weise die ursprüngliche, effektive Benutzer-ID wieder erlangen.

       Wenn der Benutzer  root  oder  das  Programm  setuid  root  ist,  ist  besondere  Sorgfalt
       notwendig:  setuid()  überprüft  die effektive Benutzer-ID (UID) des Aufrufenden; falls es
       der Superuser ist, werden alle diesen Prozess betreffenden Benutzer-IDs auf  uid  gesetzt.
       Danach ist es für das Programm unmöglich, die root-Privilegien wiederzuerlangen.

       Somit  kann ein »setuid-root«-Programm setuid() nicht nutzen, um vorübergehend Root-Rechte
       abzugeben, die Identität eines  unprivilegierten  Benutzers  anzunehmen  und  dann  wieder
       erneut Root-Privilegien zu erlangen. Sie können dies mit seteuid(2) bewerkstelligen.

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 setuid() selbst dann fehlschlagen,  wenn  die  Benutzer-ID
       des  Aufrufenden 0 ist; es ist ein gravierender Sicherheitsfehler, wenn der Test auf einen
       Fehlschlag von setuid() nicht ausgeführt wird.

FEHLER

       EAGAIN Der Aufruf würde die reale Benutzer-ID des Aufrufenden ändern (das heißt, sie 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 uid entspricht nicht der realen Benutzer-ID  des  Aufrufenden,  und  dieser  Aufruf
              würde  die  Prozesse  mit  der  realen  Benutzer-ID  uid  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 Die in uid angegebene Benutzer-ID ist in diesem Benutzer-Namensraum unzulässig.

       EPERM  Der  Benutzer   ist   nicht   privilegiert   (Linux:   verfügt   nicht   über   die
              CAP_SETUID-Capability)  und  uid  entspricht  nicht der realen Benutzer-ID oder der
              gespeicherten »set-user«-ID des aufrufenden Prozesses.

KONFORM ZU

       POSIX.1-2001, POSIX.1-2008, SVr4. Nicht wirklich zum 4.4BSD-Aufruf kompatibel, der  sowohl
       die reale, gespeicherte als auch die effektive Benutzer-ID setzt.

ANMERKUNGEN

       Linux  verfügt  über  das  Konzept  der Dateisystem-Benutzer-ID, die normalerweise mit der
       effektiven  Benutzer-ID  identisch  ist.  Der  Aufruf  von   setuid()   setzt   auch   die
       Dateisystem-Benutzer-ID des aufrufenden Prozesses (siehe setfsuid(2)).

       Falls  sich  uid  von  der  alten  effektiven  Benutzer-ID unterscheidet, wird dem Prozess
       verboten, Speicherauszüge (»core dumps«) zu erstellen.

       Der ursprüngliche Linux-Systemaufruf setuid() unterstützte nur 16-Bit-Benutzer-IDs. Danach
       führte   Linux   2.4   mit   setuid32()   die  Unterstützung  für  32-Bit-IDs  hinzu.  Die
       Glibc-Wrapperfunktion setuid() behandelt die Unterschiede  zwischen  den  Kernel-Versionen
       transparent.

   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 setuid())
       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

       getuid(2),  seteuid(2),   setfsuid(2),   setreuid(2),   capabilities(7),   credentials(7),
       user_namespaces(7)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.15  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   Stefan   Janke
       <gonzo@burg.studfb.unibw-muenchen.de>,  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>.