PHP笔记网

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2013-08-22 11:09:21  修改时间:2024-09-21 14:06:24  分类:Apache/Nginx  编辑

Document root must be a directory

这是系统开启了SELinux安全策略造成的。把目录或文件设成了 user_home_t 类型,因此 apache 的进程没有权限,无法访问。针对Apache的进程所使用的SELinux target policy规定了apache的进程只能访问 httpd_sys_content_t 类型的目录或文件。

查看下SElinux状态

[root@localhost home]# getenforce
Enforcing

果然SElinux被开启了,而且还是强制模式,所以只要修改相关的权限就可以了。

解决办法:

方法一:更改文件夹权限

把目录或文件的策略类型改成 httpd_sys_content_t 就可以了。

chcon -R -t httpd_sys_content_t /home/www/

然后用 ls -Z 命令查看文件目录的策略类型(目录权限)。

[root@localhost home]# ls -Z
drwx------. mysql   mysql   unconfined_u:object_r:user_home_dir_t:s0 mysql
drwxr-xr-x. root    root    unconfined_u:object_r:httpd_sys_content_t:s0 www

方法二:禁用SELinux

如果你真的被SELinux折磨的没有办法了。那就直接禁用SELinux吧。系统的不安全总比服务器不能访问的权重要低些吧。直接编辑SELinux的配置文件。

vim /etc/sysconfig/selinux    #或    vim /etc/selinux/config

把SELINUX的值从enforcing改成disabled就行。存盘退出,这回一定可以了,如果还不可以就重启一下服务器吧。

 

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

setenforce disabled    #或    setenforce 0

 

 


 

 

chcon 命令参数详解

[root@localhost home]# chcon --help
用法:  chcon [选项]... 环境 文件...
 或:  chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件...
 或:  chcon [选项]... --reference=参考文件 文件...
Change the SELinux security context of each FILE to CONTEXT.
With --reference, change the security context of each FILE to that of RFILE.

  -h, --no-dereference   affect symbolic links instead of any referenced file
      --reference=参考文件	使用指定参考文件的安全环境,而非指定值
  -R, --recursive        	递归处理所有的文件及子目录
  -v, --verbose          	为处理的所有文件显示诊断信息
  -u, --user=用户 		设置指定用户的目标安全环境
  -r, --role=角色 		设置指定角色的目标安全环境
  -t, --type=类型 		设置指定类型的目标安全环境
  -l, --range=范围 		设置指定范围的目标安全环境

以下选项是在指定了 -R 选项时被用于设置如何穿越目录结构体系。
如果您指定了多于一个选项,那么只有最后一个会生效。

  -H         如果命令行参数是一个通到目录的符号链接,则遍历符号链接
  -L         遍历每一个遇到的通到目录的符号链接
  -P         不遍历任何符号链接(默认)

      --help		显示此帮助信息并退出
      --version		显示版本信息并退出