今日一台同事的虚拟机安装了httpd,然后修改DocumentRoot,但是无论怎么修改都会启动报错DocumentRoot must be a directory。

查看目录权限,root的正常可以查看到的,然后想,是否apache用户进不了目录(root用户创建文件夹)。修改文件夹所属用户后还是一样报错,无法启动httpd。

仔细想了下,linux系统貌似还有个SElinux安全机制,查看一下状态吧。

[root@localhost home]# getenforce
Enforcing
果然SElinux被开启了,而且还是强制模式。 目录被设成了user_home_t类型,apache的进程没有权限,无法访问。针对Apache的进程所使用的SELinux target policy规定了apache的进程只能访问httpd_sys_content_t类型的目录或文件。所以只要修改相关的权限就可以了。
解决办法:
1.更改文件夹权限
   
   
   
   
  1. chcon  -t httpd_sys_content_t /home/www/

  2. chcon  -t httpd_sys_content_t /home/www/html/

然后ls -Z查看目录权限

看,权限被改为httpd_sys_content_t了吧。这样就可以启动httpd了。
2.关闭SElinux
关闭SElinux的话需要重启系统,修改方法为:
vi /etc/selinux/config

修改SELINUX=disabled然后重启系统就关闭SElinux了。

想不重启系统的同学可以使用setenforce命令设置SElinux。

#setenforce disabled