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
This page is part of release 3.80 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at 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>.