blob: 4c1e64b16a000059728a5772c7aad141cfe33248 [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
14version: set the cvsroot to
15
16 :pserver:anonymous@cvs.avf.sourceforge.net:/cvsroot/avf
17
18and check out the 'fuse' module.
19
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
42steps:
43
44 1) Edit the file example/fusexmp.c to do whatever you want...
45
46 2) Build the fusexmp program
47
48 3) run 'util/fusermount /mnt/whatever example/fusexmp -d'
49
50 4) ls -al /mnt/whatever
51
52 5) Be glad!
53
54If it doesn't work out, you can ask the me. (Oh yeah, and you need to
55do 'insmod kernel/fuse.o' before running your program, in case you
56forgot).
57
58See the file 'include/fuse.h' for documentation of the library interface.
59
60
61Security
62========
63
64If you run 'make install', the fusermount program is installed
65set-user-id to root. This is done to allow normal users to mount
66their own filesystem implementations.
67
68There must however be some limitations to forbid the Bad User to do
69Naughty Things with your Beautiful system. Currently those
70limitations are:
71
72 - The user can only mount on a mountpoint, for which it has write
73 permission
74
75 - The mountpoint is not a sticky directory which isn't owned by the
76 user (like /tmp usually is)
77
78 - If the user doing the mount is not root, then no other user
79 (including root) can access the contents of the mounted
80 filesystem.
81
82When linux will have private namespaces (as soon as version 2.5 comes
83out) then this third condition is useless and can be gotten rid of.
84
85Currently the first two conditions are checked by the fusermount
86program before doing the mount. This has the nice feature, that it's
87totally useless. Here's why:
88
89 - user creates /tmp/mydir
90 - user starts fusermount
91 - user removes /tmp/mydir just after fusermount checked that it is OK
92 - user creates symlink: ln -s / /tmp/mydir
93 - fusermount actually mounts user's filesystem on '/'
94 - this is bad :(
95
96So to make this secure, the checks must be done by the kernel. And so
97there is a patch (patch/ms_permission.patch) which does exactly this.
98This is against 2.4.14, but applies to some earlier kernels (not too
99much earlier though), and possibly some later (I couldn't know, could
100I?).
101