linux - FUSE:链接基于 FUSE 的文件系统时如何获取调用进程的原始(非 root)用户

标签 linux posix file-permissions fuse

我有两个旨在协同工作的链式 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 setfsuidsetfsgid允许 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/

相关文章:

c++ - 是 GCC 错误吗?

linux - bash 删除脚本不起作用

c - 如何在 LynxOS/POSIX 中同步对共享内存的访问?

c - 在Linux操作系统的C程序中,如何检查用户是否具有文件的读取权限?

git - 我的 src 文件夹在 react-native 项目中被锁定为只读权限

c++ - 如何在Linux终端应用程序中检测XOFF和XON

linux - 为 cortex-a8 设备交叉编译时出现链接器问题

windows - 撤销_访问 : how to remove 'revoke' an inherited ACE?

c - 使用 POSIX 消息队列的单进程线程安全

c - 哪些系统调用可以返回 EINTR 或 EAGAIN 错误代码?