编写:Steven Elliott <elliotsl@mindspring.com>
(提取自 wine/documentation/linux-fat-permissions)
本文描述工作在 Linux 中对 FAT 和 VFAT 文件系统的权限,焦点是为 Wine 配置它们。
Linux 可以使用 FAT (老的 8.3 DOS 文件系统) 或 VFAT (新的 Windows 95 或后来的长文件名文件系统) 模块访问 DOS 和 Windows 文件系统。在双引导(Linux + Windows)系统上,要通过 Wine 访问现存的应用程序和它们的数据,挂装 FAT 或 VFAT 文件系统是提供的主要的方式。
按照 ~/.wine/config 文件的指示,Wine 把挂装的 FAT 文件系统比如 /c,映射成驱动器字母比如 "c:"。下列摘录自一个 ~/.wine/config 文件:
[Drive C] "Path" = "/c" "Type" = "hd" |
尽管在长文件名支持上 VFAT 文件系统优于 FAT 文件系统,在本文剩余部分中使用术语 "FAT" 来参照 FAT 文件系统和它的衍生品。还有,本文通篇使用 "/c" 作为 FAT 挂装点的例子。
多数现代 Linux 发布要么检测现存的 FAT 文件系统要么允许配置现存的 FAT 文件系统,这样,可以要么持久的(在引导时)要么在需要的时候,在一个位置上如 /c 挂装它们。在任何一种情况下,缺省的,权限可能被配置成:
~>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 |
这里所有的文件都属于 "root",都在 "root" 组中并只能被 "root" 写(755 权限)。 这限制了应用程序要想写文件系统的任何部分,只能以 root 运行 Wine。
有三种主要的途径来克服上面段落提及的受限制的权限:
以 root 运行 Wine
用更少受限制的权限来挂装 FAT 文件系统
通过完全或部分复制它来隐蔽 FAT 文件系统
在下面的小节中将讨论每种方式。
要给予 Wine 所运行的应用程序无限制的对 FAT 文件系统访问,以 root 运行 Wine 是最简单和最直接的方式。以 root 运行 wine 还允许应用程序做与 FAT 文件系统无关的事情,比如监听小于 1024 的端口。 以 root 运行 Wine 是危险的,原因是对应用程序在系统上的所作所为没有限制。
可以用比缺省更少受限制的权限挂装 FAT 文件系统。要么变更挂装 FAT 文件系统的用户,要么显式的变更挂装的 FAT 文件系统的权限。 FAT 文件系统从挂装 FAT 文件系统的进程继承权限。因为挂装 FAT 文件系统的进程通常是以 root 运行的一个启动脚本,FAT 文件系统继承 root 的权限。这导致在 FAT 文件系统上的文件有类似于用 root 建立的文件的权限。例如:
~>whoami root ~>touch root_file ~>ls -l root_file -rw-r--r-- 1 root root 0 Dec 10 00:20 root_file |
它匹配属主、组和除了缺少‘x’之外在 FAT 文件系统上见到的文件权限。在 FAT 文件系统上的权限可以通过改变 root 的 umask (unset permissions bits)来变更。例如:
~>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 |
用 umask 码 000 挂装 FAT 文件系统给予所有用户对它的完全控制。在挂装的时候提供额外的控制,显式的指定 FAT 文件系统的权限。与 FAT 权限相关的有三个挂装选项: uid、gid 和 umask。在手动挂装文件系统的时候可以指定它们。例如:
~>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 |
给予 "sle" 在 /c 上完全控制权限。可以通过在上面列出的选项添加到 /etc/fstab 文件中而使之成为永久:
~>grep /c /etc/fstab /dev/hda1 /c vfat uid=500,gid=500,umask=002,exec,dev,suid,rw 1 1 |
注意 umask 码 002 一般用于用户私有组文件权限中。在 FAT 文件系统上这个 umask 确保在指定组(gid)中的所有用户可以完全访问所有文件。
隐蔽提供了精细的控制粒度。通过复制部分最初的 FAT 文件系统,应用程序可以安全的在复制的这部分上工作,而继续直接读其余的部分。这是通过符号连接完成的。例如,考虑一个叫 AnApp 的应用程序必须能读写 c:\windows 和 c:\AnApp 目录而可读整个 FAT 文件系统的的一个系统。在这个系统中 FAT 文件系统有缺省的权限,出于安全的原因或缺乏 root 访问权限而不应该被改变。在这个系统上可以用下列方式设置一个隐蔽目录:
~>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 |
上述命令给予所有用户对 windows 和 AnApp 目录完全的读写访问,而只有 root 可以写访问其他目录。