setresuid(2) System Calls Manual setresuid(2) BEZEICHNUNG setresuid, setresgid - reale, effektive und gespeicherte Benutzer- oder Gruppenkennung setzen BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #define _GNU_SOURCE /* siehe feature_test_macros(7) */ #include int setresuid(uid_t ruid, uid_t euid, uid_t suid); int setresgid(gid_t rgid, gid_t egid, gid_t sgid); BESCHREIBUNG setresuid() setzt die reale Benutzerkennung, die effektive Benutzerkennung und die gespeicherte set-user-ID des aufrufenden Prozesses. Ein unprivilegierter Prozess kann seine reale UID, die effektive UID und die gespeicherte set-user-ID jeweils zu einem der Folgenden andern: der aktuellen realen UID, der aktuellen effektiven UID oder der aktuellen gespeicherten set-user-ID. Ein privilegierter Prozess (unter Linux einer, der die CAP_SETUID-Capability hat) kann die reale UID, die effektive UID und die gespeicherte set-user-ID auf beliebige Werte setzen. Wenn eines der Argumente -1 ist, wird der dazugehorige Wert nicht geandert. Ohne Rucksicht auf die Anderungen an der realen UID, der effektiven UID und der gespeicherten set-user-ID wird die Dateisystem-UID stets auf den gleichen Wert wie die (moglicherweise neue) effektive UID gesetzt. setresgid() setzt vollstandig analog dazu die reale GID, die effektive GID und die gespeicherte SGID des aufrufenden Prozesses (und andert stets die GID des Dateisystems auf den gleichen Wert, wie die effektive GID) mit den gleichen Einschrankungen fur nicht privilegierte Prozesse. RUCKGABEWERT Bei Erfolg wird Null zuruckgegeben. Bei einem Fehler wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. Hinweis: In manchen Fallen kann setresuid() selbst dann fehlschlagen, wenn die UID des Aufrufenden 0 ist; es ist ein gravierender Sicherheitsfehler, wenn der Test auf einen Fehlschlag von setresuid() nicht ausgefuhrt wird. FEHLER EAGAIN Der Aufruf wurde die reale UID des Aufrufenden andern (das heisst, ruid wurde nicht mit der realen UID des Aufrufenden ubereinstimmen), aber es gab einen temporaren Fehlschlag beim Zuweisen der notigen Datenstrukturen des Kernels. EAGAIN ruid entspricht nicht der realen UID des Aufrufenden, und dieser Aufruf wurde die Prozesse mit der realen Benutzerkennung ruid die Ressourcenbegrenzung RLIMIT_NPROC des Aufrufenden ubersteigen lassen. Seit Linux 3.1 tritt dieser Fehler nicht mehr auf (aber robuste Anwendungen sollten die Moglichkeit dieses Fehlers prufen); siehe die Beschreibung von EAGAIN in execve(2). EINVAL Eine oder mehrere der Zielbenutzer- oder Gruppenkennungen ist in diesem Benutzer-Namensraum unzulassig. EPERM Der aufrufende Prozess ist nicht privilegiert (hatte nicht die notwendige Capability in seinem Benutzernamensraum) und versuchte, die Kennungen auf nicht erlaubte Werte zu andern. Fur setresuid() ist die notwendige Capability CAP_SETUID, fur setresgid() ist sie CAP_SETGID. VERSIONEN Unterschiede C-Bibliothek/Kernel Auf der Kernelebene sind Benutzer- und Gruppenkennungen Attribute pro Thread. POSIX verlangt aber, dass sich alle Threads in einem Prozess die gleichen Berechtigungsnachweise teilen. Die NPTL-Threading-Implementierung behandelt die POSIX-Anforderungen durch Bereitstellung von Wrapper-Funktionen fur die verschiedenen Systemaufrufe, die die UIDs und GIDs der Prozesse andern. Diese Wrapper-Funktionen (darunter die fur setresuid() und setresgid()) verwenden eine signalbasierte Technik, um sicherzustellen, dass bei der Anderung der Berechtigungsnachweise eines Threads auch alle anderen Threads des Prozesses ihre Berechtigungsnachweise andern. Fur Details siehe nptl(7). STANDARDS Keine. GESCHICHTE Linux 2.1.44, Glibc 2.3.2. HP-UX, FreeBSD. Der Original-Linux-Systemaufrufe setresuid() und setresgid() unterstutzen nur 16-Bit-Benutzer- und -Gruppenkennungen. Nachfolgend fugte Linux 2.4 setresuid32() und setresgid32() hinzu, die 32-Bit-Kennungen unterstutzen. Die Glibc-Wrapper-Funktionen setfsuid() setresgid() und stellen die Anderungen transparent uber Kernel-Versionen hinweg bereit. SIEHE AUCH getresuid(2), getuid(2), setfsgid(2), setfsuid(2), setreuid(2), setuid(2), capabilities(7), credentials(7), user_namespaces(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Chris Leick , Mario Blattermann und Dr. Tobias Quathamer erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 setresuid(2)