Frage

Gibt es eine Möglichkeit UID / GID zu ändern, dass nur von einem Thread in einem Multithread-Prozess?

Der Grund dafür ist eine File-Serving-Anwendung zu schreiben - die ACL und Quote nicht durchgesetzt werden, es sei denn die uid / gid des Anrufers auf den richtigen Benutzer eingestellt ist, neue Dateien / Verzeichnisse werden nicht mit dem richtigen uid / gid etc erstellt .

Die Netzwerk-Anwendungen können in der Regel fork () selbst am Anfang und Prozess jeder Benutzeranfrage in separaten Prozess. Wenn es ein Bedarf für gemeinsam genutzte Daten ist, muss sie durch eine Art von gemeinsam genutzten Speicher gehen. Jedoch z.B. Das Sicherung (Linux-Benutzer-Dateisystem) verwendet standardmäßig Multithreading und in Verbindung mit Python-Anbindung wäre es nicht sinnvoll sein, zu versuchen, ein Forking Modell zu verwenden.

Die ‚konsistent‘ UID für einen gesamten Prozess scheint nach dem POSIX-Standard zu sein, aber alte Linux-Versionen folgen nicht dem POSIX und verschiedene uids für verschiedene Threads erlaubt. Die neuen Kernel scheinen POSIX zu folgen, ist es eine Möglichkeit, die alte ‚gebrochen‘ Verhalten zu erlauben?

War es hilfreich?

Lösung

Die Linux-spezifische setfsuid() / setfsgid() sind pro Thread und nicht pro-Prozess. Sie sind speziell für diesen Anwendungsfall (Dateiserver) ausgelegt.

, dass access() Hinweis noch Zugriff überprüfen Sie die reale uid und gid mit - das ist von Entwurf (es beabsichtigt ist, die Frage zu beantworten „sollte der Benutzer, die diese binären liefen den angegebenen Zugriff auf diese Datei“ ). Für die setfsuid() / setfsgid() Fall sollten Sie versuchen, nur die angeforderte Operation und erkennen Fehler aufgrund fehlender Erlaubnis an diesem Punkt.

Andere Tipps

Um die uid nur für einen Thread ändern Sie den syscall verwenden müssen direkt: syscall (SYS_setresuid, ...); Die libc-Funktion setresuid () synchronisiert es für alle Threads (unter Verwendung eines singal, die sie an alle Threads sendet)!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top