table of contents
other versions
- jessie 1.8-1
- stretch 1.22-1
- testing 2.11-1
- stretch-backports 2.11-1~bpo9+2
- unstable 2.12-1
other sections
SETUID(2) | Linux-Programmierhandbuch | SETUID(2) |
BEZEICHNUNG¶
setuid - Benutzeridentität setzenÜBERSICHT¶
#include <sys/types.h>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.
KONFORM ZU¶
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>.21. September 2014 | Linux |