跳到内容

libfuse/libfuse

存储库文件导航

libfuse公司

关于

FUSE(Userspace中的文件系统)是用户空间程序的接口将文件系统导出到Linux内核。FUSE项目包括两个组件的保险丝内核模块(在常规中维护内核存储库)和libfuse公司用户空间库(维护在此存储库中)。libfuse提供了参考实现用于与FUSE内核模块通信。

FUSE文件系统通常作为独立的实现与libfuse链接的应用程序。libfuse提供了以下功能装载文件系统,卸载它,读取来自内核的请求,以及发送回复。libfuse提供了两个API:“高级”、,同步API和“低级”异步API。在这两种情况下,来自内核的传入请求通过以下方式传递给主程序回调。使用高级API时,回调可以与文件名和路径而不是inode,以及请求的处理当回调函数返回时完成。使用低级API,回调必须使用索引节点,并且必须发送响应显式使用一组单独的API函数。

发展现状

libfuse由所有主要的Linux发行版提供多年来,在广泛的系统中进行生产使用。然而,目前libfuse没有任何活跃的、定期的贡献者。这个当前的维护者继续应用pull请求并定期发布,但不幸的是没有能力进行任何开发超越了解决高影响问题。报告错误时,请理解,除非您包含拉取请求或报告一个关键问题,你可能不会得到回应。如果您正在使用libfuse,请考虑为该项目做出贡献。

支持的平台

  • Linux(完全)
  • BSD(大部分/尽最大努力)
  • 对于OS-X,请使用OSX使用

安装

您可以从下载libfusehttps://github.com/libfuse/libfuse/releases网站.建造和安装,必须使用介子忍者。下载tarball和.sig码文件,验证它使用表示:

表示-V-m保险丝-X.Y.Z.tar.gz-p保险丝-X.Y.pub

这个保险丝-X.Y.pub文件包含签名密钥,需要从可靠来源。每个libfuse发行版都包含其后发行版的签名密钥在中表示目录,因此您只需要手动获取此文件一次第一次安装libfuse。

验证tarball后,提取它,创建一个(临时)构建目录,然后运行Meson:

$tar xzf fuse-X.Y.Z.tar.gz;cd保险丝-X.Y.Z$mkdir构建;cd内部版本$meson设置。。

通常,默认的构建选项将正常工作。如果你尽管如此,要调整它们,您可以使用介子组态命令:

$meson配置#列表选项$meson configure-D disable-mtab=true#设置选项q$#确保所有介子选项都应用于最终构建系统$meson设置--重新配置/

要构建、测试和安装libfuse,您可以使用Ninja:

$忍者$sudo python3-m pytest测试/$sudo ninja安装

运行测试需要py.test测试Python模块。大多数如果满足以下条件,测试也可以作为常规用户运行实用程序/保险丝模块3是制造的setuid root优先:

$sudo chown root:root util/fusermount3$sudo chmod 4755实用程序/fusermount3$python3-m pytest测试/

安全影响

这个保险丝座3程序已安装setuid root。这样做是为了允许普通用户挂载他们自己的文件系统实现。

为了限制恶意用户这样做的危害,保险丝座3实施以下限制:

  • 用户只能在其已写入的装入点上装入许可

  • 装入点不能是不属于的粘性目录用户(通常是/tmp)

  • 没有其他用户(包括root用户)可以访问挂载的文件系统(尽管可以通过允许使用允许_其他允许根(_R)装载选项/等/fuse.conf)

如果您打算使用允许其他装载选项,请注意FUSE有一个未解决的安全缺陷:如果默认权限(_P)未使用mount选项时文件系统对目录执行的第一次权限检查条目将重新用于后续访问,只要访问的条目存在于内核缓存中-即使权限已更改,即使后续访问由其他用户创建。如果文件系统只有安装用户才能访问文件系统),但当其他用户允许访问文件系统(因为他们可以利用此漏洞在他们实际上没有的文件系统上执行操作的权限)。

这个bug需要在Linux内核中修复,并且已经知道了自2006年以来,但遗憾的是尚未应用任何修复程序。如果你取决于FUSE文件系统的正确权限处理解决方法是使用默认权限(_P)(目前没有支持ACL),或完全禁用目录项缓存属性。

构建自己的文件系统

FUSE在例子目录。例如直通(passthrough)示例反映了内容装入点下根目录的。从那里开始并适应密码!

API函数和必要回调的文档是大部分包含在文件中包括/保险丝。小时(对于高层API)和include/fuse_lowlevel。小时(对于低级API)。一个API的自动生成html版本可在文档/html目录和位于http://libfuse.github.io/doxygen.

获取帮助

如果你需要帮助,请在fuse-devel@lists.sourceforge.net邮件列表(订阅地址:https://lists.sourceforge.net/lists/listinfo/fuse-devel).

请报告GitHub问题跟踪器上的任何错误,网址为https://github.com/libfuse/libfuse/issues.