代码之家  ›  专栏  ›  技术社区  ›  ondra

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

  •  6
  • ondra  · 技术社区  · 16 年前

    有没有办法在多线程进程中只更改一个线程的UID/GID?

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

    整个进程的“一致”UID似乎符合POSIX标准,但是旧的Linuxes没有遵循POSIX,允许不同线程使用不同的UID。新内核似乎遵循POSIX,有什么方法允许旧的“坏”行为吗?

    2 回复  |  直到 16 年前
        1
  •  9
  •   asn    11 年前

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

        2
  •  9
  •   caf    7 年前

    特定于Linux的 setfsuid() / setfsgid() 是每个线程,而不是每个进程。它们是专为此用例(文件服务器)设计的。

    注意 access() 仍将使用真实的uid和gid检查访问-这是设计的(它旨在回答问题 “运行此二进制文件的用户是否应具有此文件的给定访问权限” /

    推荐文章