Random Tech Thoughts

The title above is not random

Fedora, SELinux, Apache, Vsftpd 和 ReiserFS

这篇文章不知道起什么名字比较好,列了一堆名词,也许会很容易被 Google 到了……

在 Fedora Core 下配置服务器时遇到的问题。apache 的问题是自己指定的 Directory 总是 403 forbidden 错误,而 vsftpd 指定的 anon_root 目录以后匿名访问总是说没有权限进入那个目录。原因在于 Fedora Core 开启了 SELinux,安全策略不允许应用程序去访问那些目录和文件,所以出现了这样的错误。

关于 SELinux 的介绍这里有几个:Fedora Core FAQ 上的介绍,有人翻译的介绍ibm developworks的,教你自己搭建一个 SELinux 系统。

按我现在的理解,问题产生的原因是 httpd 进程运行在它自己的 domain 中(类似于 chroot,把一个进程被限制在一个目录下,不能跳出到那个目录的父目录),它只能访问属于这个 domain 的文件。而文件属于那个文件由文件系统上特别的 label 决定。

问题的解决的办法是针对特定的目录和文件使用 chcon 来给文件贴个标签(这样说应该还算合适吧,正式的说法应该是 security context)。先用 ls -Z 看能正常访问的位置的文件和目录的标签,比如 /var/www 是 system_u:object_r:httpd_sys_content_t,然后使用

chcon -R -h -t httpd_sys_content_t

来贴标签。-R 是递归,-h 不跟随符号链接。这样 apache 应该就可以访问这个文件和目录了。vsftpd 的解决办法也是类似的。

但是我在 ReiserFS 上做这个操作的时候总是出错,说不支持这样的操作,ext3 上没有问题。上网搜了一下,这篇 2006.01 的文章里面说 ReiserFS 上用不了 SELinux ,服务器内核配置中 ReiserFS 的 POSIX_ACL 和 FS_SECURITY 是配上的,但是还是出了问题。不知道是不是现在还不能用 SELinux。

(现在对 SELinux 还是一知半解,等以后多了解一点东西以后再回头来修改。)

Comments