Go to file
2016-01-28 16:40:17 -08:00
doc clean up man page 2012-01-26 18:01:14 +01:00
example Add FALLOCATE operation 2012-06-18 13:32:43 +02:00
include Extend write_buf documentation 2016-01-14 09:23:18 -08:00
lib Enable subdir-objects automake option 2016-01-14 10:19:12 -08:00
test test improvements 2012-04-06 11:47:16 +02:00
util fusermount, libfuse: send value as unsigned in "user_id=" and "group_id=" 2014-07-21 18:59:05 +02:00
.gitignore Fix option escaping for fusermount. 2010-09-28 19:22:24 +02:00
AUTHORS Update maintainer and contributor list 2016-01-14 09:55:47 -08:00
ChangeLog Released 2.9.5 2016-01-14 11:20:22 -08:00
configure.ac Released 2.9.5 2016-01-14 11:20:22 -08:00
COPYING Update COPYING* 2011-05-26 15:36:35 +02:00
COPYING.LIB Update COPYING* 2011-05-26 15:36:35 +02:00
fuse.pc.in Fix -pthread in fuse.pc 2012-05-16 16:45:27 +02:00
makeconf.sh Update makeconf.sh 2016-01-14 10:14:35 -08:00
Makefile.am Removed hopelessly outdated files. 2016-01-14 10:39:08 -08:00
NEWS Add fallocate to NEWS 2012-07-19 15:02:02 +02:00
README.md Remove "credits" section, we now have an AUTHORS file. 2016-01-28 16:40:17 -08:00
README.NFS Add fuse_getgroups (high level lib) and fuse_req_getgroups (low 2009-06-19 10:27:38 +00:00

libfuse

About

FUSE (Filesystem in Userspace) is an interface for userspace programs to export a filesystem to the Linux kernel. The FUSE project consists of two components: the fuse kernel module (maintained in the regular kernel repositories) and the libfuse userspace library (maintained in this repository). libfuse provides the reference implementation for communicating with the FUSE kernel module.

A FUSE file system is typically implemented as a standalone application that links with libfuse. libfuse provides functions to mount the file system, unmount it, read requests from the kernel, and send responses back. libfuse offers two APIs: a "high-level", synchronous API, and a "low-level" asynchronous API. In both cases, incoming requests from the kernel are passed to the main program using callbacks. When using the high-level API, the callbacks may work with file names and paths instead of inodes, and processing of a request finishes when the callback function returns. When using the low-level API, the callbacks must work with inodes and responses must be sent explicitly using a separate set of API functions.

Installation

./configure
make -j8
make install

You may also need to add /usr/local/lib to /etc/ld.so.conf and/or run ldconfig. If you're building from the git repository (instead of using a release tarball), you also need to run ./makeconf.sh to create the configure script.

You'll also need a fuse kernel module (Linux kernels 2.6.14 or later contain FUSE support).

For more details see the file INSTALL

Security implications

If you run make install, the fusermount program is installed set-user-id to root. This is done to allow normal users to mount their own filesystem implementations.

There must however be some limitations, in order to prevent Bad User from doing nasty things. Currently those limitations are:

  • The user can only mount on a mountpoint, for which it has write permission

  • The mountpoint is not a sticky directory which isn't owned by the user (like /tmp usually is)

  • No other user (including root) can access the contents of the mounted filesystem (though this can be relaxed)

Building your own filesystem

FUSE comes with several example file systems in the examples directory. For example, the fusexmp example mirrors the contents of the root directory under the mountpoint. Start from there and adapt the code!

The documentation of the API functions and necessary callbacks is mostly contained in the files include/fuse.h (for the high-level API) and include/fuse_lowlevel.h (for the low-level API).

Getting Help

If you need help, please ask on the fuse-devel@lists.sourceforge.net mailing list (subscribe at https://lists.sourceforge.net/lists/listinfo/fuse-devel).

Please report any bugs on the GitHub issue tracker at https://github.com/libfuse/main/issues.