This document describes how FAT and VFAT file system permissions work
in Linux with a focus on configuring them for Wine.

Introduction
------------
Linux is able to access DOS and Windows file systems using either the
FAT (older 8.3 DOS filesystems) or VFAT (newer Windows 95 or later
long filename filesystems) modules.  Mounted FAT or VFAT filesystems
provide the primary means for which existing applications and their
data are accessed through Wine for dual boot (Linux + Windows)
systems.

Wine maps mounted FAT filesystems, such as "/c", to driver letters,
such as "c:", as indicated by the wine.conf file.  The following
excerpt from a wine.conf file does this:
    [Drive C]
    Path=/c
    Type=hd

Although VFAT filesystems are preferable to FAT filesystems for their
long filename support the term "FAT" will be used throughout the
remainder of this document to refer to FAT filesystems and their
derivatives.  Also, "/c" will be used as the FAT mount point in
examples throughout this document.

Most modern Linux distributions either detect or allow existing FAT
file systems to be configured so that can be mounted, in a location
such as /c, either persistently (on bootup) or on an as needed basis.
In either case, by default, the permissions will probably be configured
so that they look something like:
    ~>cd /c
    /c>ls -l
    -rwxr-xr-x   1 root     root           91 Oct 10 17:58 autoexec.bat
    -rwxr-xr-x   1 root     root          245 Oct 10 17:58 config.sys
    drwxr-xr-x  41 root     root        16384 Dec 30  1998 windows
where all the files are owned by "root", are in the "root" group and
are only writable by "root" (755 permissions).  This is restrictive in
that it requires that Wine be run as root in order for applications to
be able to write to any part of the filesystem.

There three major approaches to overcoming the restrictive permissions
mentioned in the previous paragraph:
    1) Run Wine as root
    2) Mount the FAT filesystem with less restrictive permissions
    3) Shadow the FAT filesystem by completely or partially copying it
Each approach will be discusses in the following "Running Wine as
root", "Mounting FAT filesystems" and "Shadowing FAT filesystems"
sections.

Running Wine as root
--------------------
Running Wine as root is the easiest and most thorough way of giving
applications that Wine runs unrestricted access to FAT files systems.
Running wine as root also allows applications to do things unrelated
to FAT filesystems, such as listening to ports that are less than
1024.  Running Wine as root is dangerous since there is no limit to
what the application can do to the system.

Mounting FAT filesystems
------------------------
The FAT filesystem can be mounted with permissions less restrictive
than the default.  This can be done by either changing the user that
mounts the FAT filesystem or by explicitly changing the permissions
that the FAT filesystem is mounted with.  The permissions are
inherited from the process that mounts the FAT filesystem.  Since the
process that mounts the FAT filesystem is usually a startup script
running as root the FAT filesystem inherits root's permissions.  This
results in the files on the FAT filesystem having permissions similar
to files created by root.  For example:
    ~>whoami
    root
    ~>touch root_file
    ~>ls -l root_file
    -rw-r--r--   1 root     root            0 Dec 10 00:20 root_file

which matches the owner, group and permissions of files seen on the
FAT filesystem except for the missing 'x's.  The permissions on the
FAT filesystem can be changed by changing root's umask (unset
permissions bits).  For example:
    ~>umount /c
    ~>umask
    022
    ~>umask 073
    ~>mount /c
    ~>cd /c
    /c>ls -l
    -rwx---r--   1 root     root           91 Oct 10 17:58 autoexec.bat
    -rwx---r--   1 root     root          245 Oct 10 17:58 config.sys
    drwx---r--  41 root     root        16384 Dec 30  1998 windows
Mounting the FAT filesystem with a umask of 000 gives all users
complete control over the it.
Explicitly specifying the permissions of the FAT filesystem when it is
mounted provides additional control.  There are three mount options
that are relevant to FAT permissions: "uid", "gid" and "umask".  They
can each be specified when the filesystem is manually mounted.  For
example:
    ~>umount /c
    ~>mount -o uid=500 -o gid=500 -o umask=002 /c
    ~>cd /c
    /c>ls -l
    -rwxrwxr-x   1 sle      sle            91 Oct 10 17:58 autoexec.bat
    -rwxrwxr-x   1 sle      sle           245 Oct 10 17:58 config.sys
    drwxrwxr-x  41 sle      sle         16384 Dec 30  1998 windows
which gives "sle" complete control over /c.  The options listed above
can be made permanent by adding them to the /etc/fstab file:
    ~>grep /c /etc/fstab
    /dev/hda1  /c  vfat  uid=500,gid=500,umask=002,exec,dev,suid,rw 1 1
Note that the umask of 002 is common in the user private group file
permission scheme.  On FAT file systems this umask assures that all
files are fully accessible by all users in the specified group (gid).

Shadowing FAT filesystems
-------------------------
Shadowing provides a finer granularity of control.  Parts of the
original FAT filesystem can be copied so that the application can
safely work with those copied parts while the application continue to
directly read the remaining parts.  This is done with symbolic links.
For example, consider a system where an application named "AnApp" must
be able to read and write to the c:\windows and c:\AnApp directories
as well as have read access to the entire FAT filesystem.  On this
system the FAT filesystem has default permissions which should not be
changed for security reasons or can not be changed due to lack of root
access.  On this system a shadow directory might be set up in the
following manner:
    ~>cd /
    />mkdir c_shadow
    />cd c_shadow
    /c_shadow>ln -s /c_/* .
    /c_shadow>rm windows AnApp
    /c_shadow>cp -R /c_/{windows,AnApp} .
    /c_shadow>chmod -R 777 windows AnApp
    /c_shadow>perl -p -i -e 's|/c$|/c_shadow|g' /usr/local/etc/wine.conf
The above gives everyone complete read and write access to the
"windows" and "AnApp" directories while only root has write access to
all other directories.
---
Steven Elliott (elliotsl@mindspring.com)
