有没有办法在多线程进程中只更改一个线程的UID/GID?
原因是编写文件服务应用程序-除非调用方的uid/gid设置为正确的用户,否则不会强制执行ACL和配额,并且不会使用正确的uid/gid创建新文件/目录等。
整个进程的“一致”UID似乎符合POSIX标准,但是旧的Linuxes没有遵循POSIX,允许不同线程使用不同的UID。新内核似乎遵循POSIX,有什么方法允许旧的“坏”行为吗?
要仅更改一个线程的uid,您需要直接使用syscall:syscall(SYS\u setresuid,…);libc函数setresuid()将为所有线程同步它(使用它发送给所有线程的信号)!
特定于Linux的 setfsuid() / setfsgid() 是每个线程,而不是每个进程。它们是专为此用例(文件服务器)设计的。
setfsuid()
setfsgid()
注意 access() 仍将使用真实的uid和gid检查访问-这是设计的(它旨在回答问题 “运行此二进制文件的用户是否应具有此文件的给定访问权限” /
access()