setfsuid()
khusus Linux / setfsgid()
adalah per-utas daripada per-proses. Mereka dirancang khusus untuk kasus penggunaan ini (server file).
Perhatikan bahwa access()
masih akan memeriksa akses menggunakan uid dan gid yang sebenarnya - yaitu dengan desain (ini dimaksudkan untuk menjawab pertanyaan "haruskah pengguna yang menjalankan biner ini memiliki akses yang diberikan ke file ini" ). Untuk setfsuid()
/ setfsgid()
jika Anda hanya harus mencoba operasi yang diminta dan mendeteksi kegagalan karena kurangnya izin pada saat itu.
Untuk mengubah uid hanya untuk satu utas, Anda perlu menggunakan syscall secara langsung:syscall(SYS_setresuid, ...); Fungsi libc setresuid() akan menyinkronkannya untuk semua utas (menggunakan singal yang dikirim ke semua utas)!