有一种在多线程处理来改变仅一个线程UID / GID?

这样做的原因是写一个文件服务应用 - ACL的和配额不会强制执行,除非调用者的UID / GID被设置为正确的用户,新的文件/目录不正确的UID / GID等创建

在网络应用程序通常可以叉()本身在开始和过程在分开的处理每个用户请求。如果有需要共享数据,它必须通过某种共享内存。然而,例如所述保险丝(Linux用户文件系统)默认使用多线程和与Python绑定一起选择这将是不实际的尝试使用分叉模型。

有一个全过程的“一致” UID似乎按照POSIX标准是,但是老Linux版本没有按照POSIX并允许不同的线程不同的UID。新的内核似乎遵循POSIX,有一些方法,让旧的“破”的行为?

有帮助吗?

解决方案

在Linux特有setfsuid() / setfsgid()是每个线程而不是每个进程。他们用于该用途的情况下(文件服务器)而设计的。

请注意access()使用真正的UID和GID仍然会检查访问 - 这是由设计(它的目的是回答这个问题的“应该谁跑这个二进制文件的用户具有给定的访问此文件” )。对于setfsuid() / setfsgid()情况下,你应该只是尝试请求的操作和检测故障是由于在这一点上缺少权限。

其他提示

要更改UID只有一个线程需要直接使用系统调用:系统调用(SYS_setresuid,...);的libc函数setresuid()将所有线程(使用它发送到的全部线程的葛)同步它!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top