setfsgid - Gruppenidentität für Dateisystemprüfungen setzen
Standard-C-Bibliothek (
libc,
-lc)
#include <sys/fsuid.h>
int setfsgid(gid_t dsgid);
Unter Linux hat ein Prozess sowohl eine Dateisystemgruppenkennung als auch eine
effektive Gruppenkennung. Die (Linux-spezifische) Dateisystemgruppenkennung
wird für die Berechtigungsprüfung beim Zugriff auf
Dateisystemobjekte verwandt, während die effektive Gruppenkennung
für andere Arten von Berechtigungsprüfungen verwandt wird (siehe
credentials(7)).
Normalerweise ist der Wert der Dateisystemgruppenkennung des Prozesses identisch
zu dem Wert seiner effektiven Gruppenkennung. Dies kommt daher, dass der
Kernel auch die Dateisystemgruppenkennung zu dem gleichen Wert der effektiven
Gruppenkennung ändert, wenn sich die effektive Gruppenkennung eines
Prozesses ändert. Mittels
setfsgid() kann ein Prozess
veranlassen, dass sich der Wert seiner Dateisystemgruppenkennung von dem Wert
seiner effektiven Gruppenkennung unterscheidet, womit dieser den Wert der
Dateisystemgruppenkennung auf den in
dsgid angegeben Wert
ändert.
setfsgid() wird nur erfolgreich sein, falls der Aufrufende der Superuser
ist oder wenn
dsgid entweder der realen Gruppenkennung des Aufrufenden,
der effektiven Gruppenkennung, der gesicherten SGID oder der aktuellen
Dateisystembenutzerkennung entspricht.
Sowohl im Erfolgs- wie auch im Fehlerfall liefert dieser Aufruf die
vorhergehende Dateisystem-Gruppenkennung des Aufrufenden zurück.
Dieser Systemaufruf ist in Linux seit Version 1.2 vorhanden.
setfsgid ist Linux-spezifisch und sollte nicht in portierbaren Programmen
benutzt werden.
Das Konzept der Dateisystemgruppenkennung und der Systemaufruf
setfsgid()
wurden aus historischen Gründen, die auf modernen Linux-Kerneln nicht
mehr zutreffen, erfunden. Lesen Sie
setfsuid(2) für eine
Abhandlung, warum die Verwendung von sowohl
setfsuid(2) als auch
setfsgid() heutzutage nicht benötigt wird.
Der Original-Linux-Systemaufruf
setfsgid() unterstützte nur
16-Bit-Gruppenkennungen. Nachfolgend fügte Linux 2.4
setfsgid32() hinzu, das 32-Bit-Kennungen unterstützte. Die
Glibc-Wrapper-Funktion
setfsgid() stellt die Änderungen
transparent über Kernel-Versionen hinweg bereit.
Wenn der Wrapper für diesen Systemaufruf unter Glibc 2.15 und
älter feststellt, dass das Argument nicht ohne Ganzzahlschnitt an den
Kernel übergeben werden kann (weil der Kernel alt ist und keine
32-Bit-Gruppenkennungen unterstützt), wird -1 zurückgegeben und
errno auf
EINVAL gesetzt. Der Systemaufruf unterbleibt.
Es werden keine Anhaltspunkte für Fehler an den Aufrufenden
zurückgegeben und die Tatsache, dass sowohl erfolgreiche als auch nicht
erfolgreiche Aufrufe den selben Wert zurückgeben, macht es
unmöglich, direkt zu bestimmen, ob der Aufruf erfolgreich war oder
fehlschlug. Stattdessen musste der Aufrufende auf die Betrachtung des
Rückgabewerts eines weiteren Prozesses wie
setfsgid(-1)
zurückgreifen (der immer fehlschlägt), um zu bestimmen, ob ein
vorheriger Aufruf von
setfsgid() die Dateisystemgruppen-ID
geändert hat. Zumindest sollte
EPERM zurückgegeben
werden, wenn der Aufruf fehlschlägt (da dem Aufrufenden die
CAP_SETGID-Capability fehlt).
kill(2),
setfsuid(2),
capabilities(7),
credentials(7)
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother
<
[email protected]>, Chris Leick <
[email protected]>, Helge Kreutzmann
<
[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