setgid - setzt die Gruppenidentität (GID)
Standard-C-Bibliothek (
libc,
-lc)
#include <unistd.h>
int setgid(gid_t gid);
setgid() setzt die effektive Gruppen-ID des aufrufenden Prozesses. Falls
der aufrufende Prozess privilegiert ist (genauer: über die Capability
CAP_SETGID in seinem Benutzernamensraum verfügt), werden auch
die reale und die gespeicherte set-group-ID gesetzt.
Unter Linux ist
setgid() wie die POSIX-Version mit dem
_POSIX_SAVED_IDS-Merkmal implementiert. Das ermöglicht einem
set-group-ID-Programm, das nicht set-user-ID-root ist, alle seine
Gruppenprivilegien abzugeben, einige nicht privilegierte Arbeiten zu erledigen
und dann auf sichere Art und Weise weiter die ursprüngliche effektive
Gruppenkennung zu nutzen.
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1
zurückgegeben und
errno gesetzt, um den Fehler anzuzeigen.
- EINVAL
- Die in GID angegebene Gruppenkennung ist in diesem
Benutzer-Namensraum unzulässig.
- EPERM
- Der aufrufende Prozess ist nicht privilegiert
(verfügt nicht über die CAP_SETGID-Capability in
seinem Benutzernamensraum) und gid entspricht nicht der realen
Gruppenkennung oder der gespeicherten set-group-ID des aufrufenden
Prozesses.
POSIX.1-2001, POSIX.1-2008, SVr4.
Der ursprüngliche
setgid()-Systemaufruf unterstützte nur
16-Bit-Gruppen-IDs. Danach führte Linux 2.4 mit
setgid32() die
Unterstützung für 32-Bit-IDs hinzu. Die Glibc-Wrapperfunktion
setgid() behandelt die Unterschiede zwischen den Kernel-Versionen
transparent.
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 für
die verschiedenen Systemaufrufe, die die UIDs und GIDs der Prozesse
ändern. Diese Wrapper-Funktionen (darunter die für
setgid()) verwenden eine signalbasierte Technik, um sicherzustellen,
dass bei der Änderung der Berechtigungsnachweise eines Threads auch
alle anderen Threads des Prozesses ihre Berechtigungsnachweise ändern.
Für Details siehe
nptl(7).
getgid(2),
setegid(2),
setregid(2),
capabilities(7),
credentials(7),
user_namespaces(7)
Die deutsche Übersetzung dieser Handbuchseite wurde von Stefan Janke
<
[email protected]>, Martin Eberhard Schauer
<
[email protected]> und Mario Blättermann
<
[email protected]> 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 die
Mailingliste
der Übersetzer