Der Linux-spezifische setfsuid()
/ setfsgid()
sind pro Thread und nicht pro Prozess. Sie sind speziell für diesen Anwendungsfall (Dateiserver) konzipiert.
Beachten Sie, dass access()
prüft weiterhin den Zugriff mit der echten UID und GID - das ist Absicht (es soll die Frage beantworten "sollte der Benutzer, der diese Binärdatei ausgeführt hat, den gegebenen Zugriff auf diese Datei haben" ). Für die setfsuid()
/ setfsgid()
In diesem Fall sollten Sie die angeforderte Operation einfach ausprobieren und an dieser Stelle einen Fehler aufgrund fehlender Berechtigungen feststellen.
Um die UID nur für einen Thread zu ändern, müssen Sie den Systemaufruf direkt verwenden:syscall(SYS_setresuid, ...); Die libc-Funktion setresuid() wird es für alle Threads synchronisieren (unter Verwendung eines Signals, das es an alle Threads sendet)!