blob: 051bc7ab6caf186c66039e492d4fa4d9ab36b5fb [file] [log] [blame]
Miklos Szeredi8cffdb92001-11-09 14:49:18 +00001General Information
2===================
3
4FUSE (Filesystem in USErspace) is a simple interface for userspace
5programs to export a virtual filesystem to the linux kernel. FUSE
6also aims to provide a secure method for non privileged users to
7create and mount their own filesystem implementations.
8
9You can download the source code releases from
10
11 http://sourceforge.net/projects/avf
12
13or alternatively you can use CVS to get the very latest development
Miklos Szeredi0a7077f2001-11-11 18:20:17 +000014version by setting the cvsroot to
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000015
16 :pserver:anonymous@cvs.avf.sourceforge.net:/cvsroot/avf
17
Miklos Szeredi0a7077f2001-11-11 18:20:17 +000018and checking out the 'fuse' module.
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000019
20Installation
21============
22
23See the file 'INSTALL'
24
25IMPORTANT NOTE: If you run a system with untrusted users, installing
26this program is not recommended, as it could be used to breach
27security (see the 'Security' section for explanation).
28
29How To Use
30==========
31
32FUSE is made up of three main parts:
33
34 - A kernel filesystem module (kernel/fuse.o)
35
36 - A userspace library (lib/libfuse.a)
37
38 - A mount/unmount program (util/fusermount)
39
40
41Here's how to create your very own virtual filesystem in five easy
Miklos Szerediddc862a2002-01-09 13:46:10 +000042steps (after installing FUSE):
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000043
44 1) Edit the file example/fusexmp.c to do whatever you want...
45
46 2) Build the fusexmp program
47
Miklos Szerediddc862a2002-01-09 13:46:10 +000048 3) run 'example/fusexmp /mnt/whatever -d'
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000049
50 4) ls -al /mnt/whatever
51
Miklos Szeredi0a7077f2001-11-11 18:20:17 +000052 5) Be glad
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000053
Miklos Szeredi0a7077f2001-11-11 18:20:17 +000054If it doesn't work out, please ask! Also see the file 'include/fuse.h' for
55detailed documentation of the library interface.
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000056
Miklos Szerediddc862a2002-01-09 13:46:10 +000057You can also mount your filesystem like this:
58
59 fusermount /mnt/whatever example/fusexmp -d
60
61The fusermount program now accepts a couple of additional options.
62Run it with the '-h' option to see a description.
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000063
64Security
65========
66
67If you run 'make install', the fusermount program is installed
68set-user-id to root. This is done to allow normal users to mount
69their own filesystem implementations.
70
Miklos Szeredi0a7077f2001-11-11 18:20:17 +000071There must however be some limitations, in order to prevent Bad User from
72doing nasty things. Currently those limitations are:
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000073
74 - The user can only mount on a mountpoint, for which it has write
75 permission
76
77 - The mountpoint is not a sticky directory which isn't owned by the
78 user (like /tmp usually is)
79
Miklos Szeredi0a7077f2001-11-11 18:20:17 +000080 - No other user (including root) can access the contents of the mounted
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000081 filesystem.
82
Miklos Szeredi0a7077f2001-11-11 18:20:17 +000083When linux will have private namespaces (as soon as version 2.5 comes out
84hopefully) then this third condition is useless and can be gotten rid of.
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000085
Miklos Szeredi0a7077f2001-11-11 18:20:17 +000086Currently the first two conditions are checked by the fusermount program
87before doing the mount. This has the nice feature, that it's totally
88useless. Here's why:
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000089
90 - user creates /tmp/mydir
91 - user starts fusermount
92 - user removes /tmp/mydir just after fusermount checked that it is OK
93 - user creates symlink: ln -s / /tmp/mydir
94 - fusermount actually mounts user's filesystem on '/'
95 - this is bad :(
96
97So to make this secure, the checks must be done by the kernel. And so
98there is a patch (patch/ms_permission.patch) which does exactly this.
99This is against 2.4.14, but applies to some earlier kernels (not too
Miklos Szeredi0a7077f2001-11-11 18:20:17 +0000100much earlier though), and possibly some later.
Miklos Szeredi8cffdb92001-11-09 14:49:18 +0000101