setresuid, setresgid − setzt die reelle, effektive und gespeicherte Benutzer- oder Gruppenidentität
#include <unistd.h>
int setresuid(uid_t ruid, uid_t euid, uid_t suid);
int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
setresuid und setresgid ändern die wirkliche, effektive und die gespeicherte Benutzer- oder Gruppenidentität des aktuellen Prozesses.
Unprivilegierte Prozesse eines Benutzers (wenn die wirkliche, effektive und gespeicherte Identität nicht 0 ist) können die wirkliche, effektive und gespeicherte Benutzeridentität jeweils zu einem der Folgenden ändern: aktuelle uid, aktuelle effektive uid oder aktuelle gespeicherte uid. Das bedeutet also, dass Prozesse die nicht root gehören, die Identität auf ihre eigenen, nicht aber auf die eines anderen Benutzers (oder gar root) setzen können.
Der super-user (root) kann die wirkliche, effektive und gespeicherte Benutzeridentität auf beliebige Werte setzen.
Ist einer der Parameter -1, bleibt der entsprechende Wert (die dazugehörige Identität) unverändert.
setresgid ändert die wirkliche, effektive und gespeicherte Gruppenidentität des aktuellen Prozesses mit den Einschränkungen der wirklichen, effektiven und gespeicherten Benutzeridentität (falls nicht 0).
Bei Erfolg wird 0 zurück gegeben. Bei Fehlern wird −1 zurückgegeben und errno entsprechend gesetzt.
EPERM |
Der Prozess hat nicht die benötigten Rechte, versucht aber die IDs zu ändern. |
Diese Funktionen sind Linuxspezifisch.
Diese Systemaufrufe wurden zuerst in HP-UX eingeführt. Sie stehen seit Linux 2.1.44 auch unter Linux zur Verfügung. Inzwischen gibt es sie ebenfalls in FreeBSD (zur Emulierung von Linux-Programmen).
Unter HP-UX und FreeBSD befinden sich die Prototypen in <unistd.h>. Unter Linux gibt es bisher keine Include-Datei für die Prototypen, das ist ein Problem in der glibc. Programme, die diese Systemaufrufe verwenden möchten, müssen die Prototypen selbst zur Verfügung stellen.
getuid(2), setuid(2), setreuid(2), getresuid(2), getreuid(2).