我有两个旨在协同工作的链式 FUSE 文件系统,它们都以 root 身份运行:进程 P 尝试首先通过 FS1 访问文件 F; FS1 看向 FS2。现在 FS2 需要获取 P(而不是 FS1)的上下文信息(pid、用户和组),以验证 P 是否具有访问文件的权限。
推荐的方法是什么?
最佳答案
这里有效地回答了这个问题:Change UID/GID only of one thread in Linux
FS1 中访问 FS2 拥有的文件的文件系统操作(open、stat 等)需要作为调用进程的用户执行,以确保文件系统权限得到尊重。执行此操作的规范方法是使用特定于线程的 API setfsuid和 setfsgid允许 FS1 在以 root 身份运行时执行文件系统操作,就好像它以非 root 用户身份运行一样。在 fs 调用失败时,应立即捕获 errno。之后,应该使用 setfsuid 和 setfsgid 将有效的 uid/gid 还原为 root/root。
请参阅此处的 fs_unlink 示例:https://sourceforge.net/p/fuse/mailman/message/29362682/
关于linux - FUSE:链接基于 FUSE 的文件系统时如何获取调用进程的原始(非 root)用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36487879/