| 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) |