• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

doc/H03-May-2022-3,8963,123

example/H04-Jan-2019-3,1152,405

include/H03-May-2022-5,6362,105

lib/H03-May-2022-14,84112,391

m4/H04-Jan-2019-9,0758,203

util/H04-Jan-2019-3,3492,830

AUTHORSH A D04-Jan-20191.4 KiB4940

COPYINGH A D04-Jan-201917.7 KiB340281

COPYING.LIBH A D04-Jan-201925.9 KiB

ChangeLogH A D04-Jan-2019106.7 KiB3,5742,175

Makefile.amH A D04-Jan-2019275 169

Makefile.inH A D04-Jan-201927.1 KiB872774

NEWSH A D04-Jan-20197.5 KiB304164

README.NFSH A D04-Jan-20191.3 KiB3425

README.mdH A D04-Jan-20194 KiB10980

aclocal.m4H A D04-Jan-201994.5 KiB2,5532,410

compileH A D04-Jan-20197.2 KiB348258

config.guessH A D04-Jan-201942.9 KiB1,4631,270

config.rpathH A D04-Jan-201918.1 KiB685588

config.subH A D04-Jan-201935.5 KiB1,8261,688

configureH A D04-Jan-2019482.5 KiB16,40813,977

configure.acH A D03-May-20223.8 KiB129112

depcompH A D04-Jan-201923 KiB792502

fuse.pc.inH A D04-Jan-2019265 1210

install-shH A D04-Jan-201914.8 KiB509329

ltmain.shH A D04-Jan-2019316.8 KiB11,1577,986

missingH A D04-Jan-20196.7 KiB216143

README.NFS

1NFS exporting is supported in Linux kernels 2.6.27 or later.
2
3You need to add an fsid=NNN option to /etc/exports to make exporting a
4FUSE directory work.
5
6Filesystem support
7------------------
8
9NFS exporting works to some extent on all fuse filesystems, but not
10perfectly.  This is due to the stateless nature of the protocol, the
11server has no way of knowing whether the client is keeping a reference
12to a file or not, and hence that file may be removed from the server's
13cache.  In that case there has to be a way to look up that object
14using the inode number, otherwise an ESTALE error will be returned.
15
161) low-level interface
17
18Filesystems need to implement special lookups for the names "." and
19"..".  The former may be requested on any inode, including
20non-directories, while the latter is only requested for directories.
21Otherwise these special lookups should behave identically to ordinary
22lookups.
23
242) high-level interface
25
26Because the high-level interface is path based, it is not possible to
27delegate looking up by inode to the filesystem.
28
29To work around this, currently a "noforget" option is provided, which
30makes the library remember nodes forever.  This will make the NFS
31server happy, but also results in an ever growing memory footprint for
32the filesystem.  For this reason if the filesystem is large (or the
33memory is small), then this option is not recommended.
34

README.md

1libfuse
2=======
3
4Warning: unresolved security issue
5----------------------------------
6
7Be aware that FUSE has an unresolved security bug
8([bug #15](https://github.com/libfuse/libfuse/issues/15)): the
9permission check for accessing a cached directory is only done once
10when the directory entry is first loaded into the cache. Subsequent
11accesses will re-use the results of the first check, even if the
12directory permissions have since changed, and even if the subsequent
13access is made by a different user.
14
15This bug needs to be fixed in the Linux kernel and has been known
16since 2006 but unfortunately no fix has been applied yet. If you
17depend on correct permission handling for FUSE file systems, the only
18workaround is to completely disable caching of directory
19entries. Alternatively, the severity of the bug can be somewhat
20reduced by not using the `allow_other` mount option.
21
22
23About
24-----
25
26FUSE (Filesystem in Userspace) is an interface for userspace programs
27to export a filesystem to the Linux kernel. The FUSE project consists
28of two components: the *fuse* kernel module (maintained in the regular
29kernel repositories) and the *libfuse* userspace library (maintained
30in this repository). libfuse provides the reference implementation
31for communicating with the FUSE kernel module.
32
33A FUSE file system is typically implemented as a standalone
34application that links with libfuse. libfuse provides functions to
35mount the file system, unmount it, read requests from the kernel, and
36send responses back. libfuse offers two APIs: a "high-level",
37synchronous API, and a "low-level" asynchronous API. In both cases,
38incoming requests from the kernel are passed to the main program using
39callbacks. When using the high-level API, the callbacks may work with
40file names and paths instead of inodes, and processing of a request
41finishes when the callback function returns. When using the low-level
42API, the callbacks must work with inodes and responses must be sent
43explicitly using a separate set of API functions.
44
45
46Installation
47------------
48
49    ./configure
50    make -j8
51    make install
52
53You may also need to add `/usr/local/lib` to `/etc/ld.so.conf` and/or
54run *ldconfig*. If you're building from the git repository (instead of
55using a release tarball), you also need to run `./makeconf.sh` to
56create the `configure` script.
57
58You'll also need a fuse kernel module (Linux kernels 2.6.14 or later
59contain FUSE support).
60
61For more details see the file `INSTALL`
62
63Security implications
64---------------------
65
66If you run `make install`, the *fusermount* program is installed
67set-user-id to root.  This is done to allow normal users to mount
68their own filesystem implementations.
69
70There must however be some limitations, in order to prevent Bad User from
71doing nasty things.  Currently those limitations are:
72
73  - The user can only mount on a mountpoint, for which it has write
74    permission
75
76  - The mountpoint is not a sticky directory which isn't owned by the
77    user (like /tmp usually is)
78
79  - No other user (including root) can access the contents of the
80    mounted filesystem (though this can be relaxed by allowing the use
81    of the `allow_other` and `allow_root` mount options in `fuse.conf`)
82
83
84Building your own filesystem
85------------------------------
86
87FUSE comes with several example file systems in the `examples`
88directory. For example, the *fusexmp* example mirrors the contents of
89the root directory under the mountpoint. Start from there and adapt
90the code!
91
92The documentation of the API functions and necessary callbacks is
93mostly contained in the files `include/fuse.h` (for the high-level
94API) and `include/fuse_lowlevel.h` (for the low-level API). An
95autogenerated html version of the API is available in the `doc/html`
96directory and at http://libfuse.github.io/doxygen.
97
98
99Getting Help
100------------
101
102If you need help, please ask on the <fuse-devel@lists.sourceforge.net>
103mailing list (subscribe at
104https://lists.sourceforge.net/lists/listinfo/fuse-devel).
105
106Please report any bugs on the GitHub issue tracker at
107https://github.com/libfuse/main/issues.
108
109