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. Wird
diese Funktion durch Root aufgerufen, 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. Die Funktion
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.
SVr4, POSIX.1-2001. 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.
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 3.74 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
http://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>.