CentOS/RHEL下apache的诡异有关问题(都是浮云)

CentOS/RHEL上apache的诡异问题(都是浮云)

最近帮同事检查一个apache的问题,现象如下:

  1. 原本配置了多个VirtualHost,DocumentRoot指向/var/www/下不同的子目录,都能正常工作。
  2. 新加了一个VirtualHost,将DocumentRoot指向/home/aa/,重启apache后无法访问该VirtualHost下的内容,提示403 Forbidden,而此时访问原先的几个VirtualHost还是没有问题。
  3. apache错误日志里没有什么奇怪的输出。
  4. 操作系统CentOS 4.x。

首先考虑是不是新加的VirtualHost配置有误导致文件路径映射错误,所以用strace跟了一下apache看它在哪个阶段出问题的,发现apache去访问的文件路径在/home/aa/下,该文件也确实存在,从/home/aa/直到该文件的各级目录都有a+rx权限,apache应该能直接访问。诡异的是,apache进程调用的lstat64调用对/home、/home/aa进行权限检查时都是OK,但对/home/aa下的目标文件进行权限检查时却是EACCESS,让人百思不解。

 

后来才发现原来该系统上未关闭SELinux子系统,而SELinux默认会对apache进程httpd进行若干保护,其中一种就是只允许httpd访问特定路径下的文件,系统默认的/var/www在允许之列,而其他目录都是禁止访问的。解决办法:

  1. 临时关闭SELinux对httpd的保护:
    • setsebool -P httpd_disable_trans 1
    • 重启apache
  2. 永久关闭SELinux子系统:
    • 修改/etc/sysconfig/selinux,将其中的SELINUX=...改为SELINUX=disabled
    • 重启操作系统

 

1 楼 cmaxvv 2011-03-09  
selinux确实是个很讨厌的东西~当然for 程序员