在Linux中只更改一个线程的UID / GID

有没有办法只改变multithreading进程中的一个线程的UID / GID?

原因是编写文件服务应用程序 – 除非调用者的uid / gid设置为正确的用户,否则不会执行ACL和配额,不会使用正确的uid / gid等创build新的文件/目录。

networking应用程序通常可以在开始时自己fork(),并在不同的进程中处理每个用户的请求。 如果需要共享数据,则必须通过某种共享内存。 然而,例如默认情况下,FUSE(linux用户文件系统)使用multithreading并结合python绑定,尝试使用分叉模型是不实际的。

整个过程的“一致”UID似乎是根据POSIX标准,然而旧的Linux并没有遵循POSIX标准,并允许不同的线程使用不同的uid。 新的内核似乎遵循POSIX,有没有办法让旧的“破”的行为?

你有没有检查setfsuid()/ setfsgid()是每线程或每进程? 他们是专门为这个用例(文件服务器)设计的。

要仅更改一个线程的uid,您需要直接使用syscall:syscall(SYS_setresuid,…); libc函数setresuid()将为所有线程同步它(使用发送给所有线程的信号)!