Scroll to navigation

SETREUID(2) Linux-Programmierhandbuch SETREUID(2)

BEZEICHNUNG

setreuid, seteuid - reale und/oder effektive Benutzer- oder Gruppen-ID 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():
_BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

BESCHREIBUNG

setreuid() setzt die reale und effektive Benutzer-ID des aufrufenden Prozesses.
Wird ein Wert von -1 für entweder die reale oder effektive Benutzer-ID angegeben, so wird erzwungen, dass diese ID unverändert bleibt.
Unprivilegierte Prozesse dürfen die effektive Benutzer-ID nur auf die reale, die effektive oder die gespeicherte gesetzte Benutzer-ID setzen.
Unprivilegierte Benutzer dürfen nur die reale Benutzer-ID auf die reale Benutzer-ID oder die effektive Benutzer-ID setzen.
Wenn die reale Benutzer-ID gesetzt ist (d.h., ruid ist nicht -1)oder die effektive Benutzer-ID auf einen Wert gesetzt ist, der nicht gleich der vorherigen realen Benutzer-ID ist, so wird die gesicherte Benutzer-ID auf die neue effektive Benutzer-ID gesetzt.
Vollkommen analog setzt setregid() die reale und die effektive Gruppen-ID 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 Benutzer-ID 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 Benutzer-ID des Aufrufenden ändern (das heißt, ruid 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
ruid entspricht nicht der realen Benutzer-ID des Aufrufenden, und dieser Aufruf würde die Prozesse mit der realen Benutzer-ID 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 Gruppen-IDs ist in diesem Benutzer-Namensraum unzulässig.
EPERM
Der aufrufende Prozess ist nicht privilegiert (Linux: hat im Fall von setreuid() nicht die CAP_SETUID-Capability oder im Fall von setregid() nicht die CAP_SETGID-Capability) und eine andere Änderung als (i) Vertauschen der effektiven mit der realen Benutzer-ID oder (ii) Setzen einer dieser auf den Wert den anderen oder (iii) Setzen der effektiven Benutzer-ID (Gruppen-ID) auf den Wert der gesicherten Benutzer-ID wurde angestrebt.

KONFORM ZU

POSIX.1-2001, 4.3BSD (die Funktionsaufrufe setreuid() und setregid() erschienen erstmalig in 4.2BSD).

ANMERKUNGEN

Das Setzen der effektiven Benutzer-ID (Gruppen-ID) auf die gesicherte Benutzer-ID (Gruppen-ID) ist möglich seit Linux 1.1.37 (1.1.38).
POSIX.1 beschreibt nicht alle möglichen ID-Änderungen, die unter Linux für einen nicht privilegierten Prozess zulässig sind. Für setreuid() kann die effektive Benutzer-ID auf den Wert der realen Benutzer-ID oder die gespeicherte Set-User-ID gesetzt werden. Es ist nicht spezifiziert, ob unprivilegierte Prozesse die reale Benutzer-ID auf die reale Benutzer-ID [sic], die effektive Benutzer-ID oder die gespeicherte Set-User-ID setzen dürfen. Für setregid() kann die reale Gruppen-ID auf den Wert der gespeicherten Set-Group-ID geändert werden und die effektive Gruppen-ID kann auf den Wert der realen Gruppen-ID oder der gespeicherten Set-Group-ID geändert werden. Die genauen Details, welche ID-Ä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 Gruppen-IDs. Entsprechend fügte Linux 2.4 setreuid32() und setregid32() hinzu, die 32-Bit-IDs unterstützen. Die Wrapper-Funktionen setreuid() und setregid() von Glibc gehen damit transparent über Kernelversionen hinweg um.

SIEHE AUCH

getgid(2), getuid(2), seteuid(2), setgid(2), setresuid(2), setuid(2), capabilities(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 Patrick Rother <krd@gulu.net>, 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