BEZEICHNUNG¶
setfsuid - Benutzeridentität für Dateisystemprüfungen
setzen
ÜBERSICHT¶
#include <sys/fsuid.h>
int setfsuid(uid_t fsuid);
BESCHREIBUNG¶
Der Systemaufruf
setfsuid() ändert den Wert der
Dateisystembenutzer-ID des Aufrufenden – der Benutzer-ID, die der
Linux-Kernel zum Prüfen aller Zugriffe auf das Dateisystem benutzt.
Normalerweise stimmt der Wert der Benutzer-ID des Dateisystems mit der
effektiven Benutzer-ID überein. Jedenfalls wird immer, wenn die
effektive Benutzer-ID geändert wird, auch die Benutzer-ID des
Dateisystems auf den neuen Wert der effektiven Benutzer-ID geändert.
Explizite Aufrufe von
setfsuid() und
setfsgid(2) werden
gewöhnlich nur von Programmen wie dem Linux-NFS-Server benutzt. Sie
müssen die für Dateizugriffe verwendete Benutzer- und Gruppen-ID
ändern, ohne die reale oder effektive Gruppen-ID zu ändern. Eine
Änderung der normalen Benutzer-IDs bei Programmen wie dem NFS-Server
ist eine Sicherheitslücke, die es unerwünschten Signalen
aussetzen kann. (Aber lesen Sie Nachstehendes.)
setfsuid() wird nur erfolgreich sein, wenn der Aufrufende der Superuser
ist oder wenn
fsuid entweder der realen, effektiven Benutzer-ID, der
gesicherten SUID oder der aktuellen Dateisystembenutzer-ID entspricht.
RÜCKGABEWERT¶
Sowohl im Fehler- als auch im Erfolgsfall wird dieser Aufruf die vorherige
Dateisystembenutzer-ID des Aufrufenden zurückliefern.
VERSIONEN¶
Dieser Systemaufruf ist in Linux seit Version 1.2 vorhanden.
setfsuid ist Linux-spezifisch und sollte nicht in portierbaren Programmen
benutzt werden.
ANMERKUNGEN¶
Wenn Glibc feststellt, dass das Argument keine gültige Benutzer-ID ist,
wird -1 zurückgegeben und
errno auf
EINVAL gesetzt. Der
Systemaufruf unterbleibt.
Zum Zeitpunkt, an dem dieser Systemaufruf erfolgte, konnte ein Prozess ein
Signal an einen anderen Prozess mit der selben effektiven Benutzer-ID senden.
Dies bedeutete, dass ein privilegierter Prozess, falls er zum Prüfen
von Dateizugriffsrechten seine effektive Benutzer-ID änderte, in die
Lage versetzt wurde, Signale von einem anderen (nicht privilegierten) Prozess
mit der selben ID zu empfangen. Daher wurde das Benutzer-ID-Attribut des
Dateisystems hinzugefügt, um einem Prozess das Ändern seiner
Benutzer-ID zum Prüfen der Dateizugriffsrechte zu ermöglichen,
ohne gleichzeitig sensibel für den Empfang unerwünschter Signale
zu werden. Seit Linux 2.0 ist der Umgang mit Signalrechten anders
gelöst (siehe
kill(2)), was dazu führt, dass ein Prozess
seine effektive Benutzer-ID ändern kann, ohne empfänglich
für Signale von unerwünschten Prozessen zu werden. Daher wird
setfsuid() heutzutage nicht mehr benötigt und sollte in neuen
Anwendungen vermieden werden (ebenso
setfsgid(2)).
Der Original-Linux-Systemaufruf
setfsuid() unterstützte nur
16-Bit-Benutzer-IDs. Nachfolgend fügte Linux 2.4
setfsuid32()
hinzu, das 32-Bit-IDs unterstützte. Die Glibc-Wrapper-Funktion
setfsuid() stellt die Änderungen transparent über
Kernel-Versionen hinweg bereit.
FEHLER¶
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
setfsuid(-1)
zurückgreifen (der immer fehlschlägt), um zu bestimmen, ob ein
vorheriger Aufruf von
setfsuid() die Dateisystembenutzer-ID
geändert hat. Zumindest sollte
EPERM zurückgegeben
werden, wenn der Aufruf fehlschlägt (da dem Aufrufenden die
CAP_SETUID-Fähigkeit fehlt).
SIEHE AUCH¶
kill(2),
setfsgid(2),
capabilities(7),
credentials(7)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.74 des Projekts Linux-
man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler
gemeldet werden können sowie die aktuelle Version dieser Seite finden
sich unter
http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother
<krd@gulu.net>, Chris Leick <c.leick@vollbio.de> und Helge
Kreutzmann <debian@helgefjell.de> 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>.