标题:CentOS7 SELinux PHP的 404 File not found

发表于

暴力解决:把SELinux从Enforcing切换到Permissive。(临时修改setenforce Permissive和setenforce Enforcing,永久修改vi /etc/selinux/config)
分析:
1、我的配置文件和网站代码都是从其他机器上打包过来的,环境安装完之后发现有这个问题。
2、NGINX访问html文件一切正常,访问php文件总是报错,404,文件无法找到,修改了文件权限为777,依然报错,说明不是简单的文件权限问题。
3、查看NGINX日志,有报错“FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream”,以为是NGINX与PHP通信的错误,折腾了很久,重装了很多次,也没找到问题所在。
4、换各种方法重装,所有软件分别换yum安装和编译安装,其中有的安装是可以正常访问的,这时候觉得是个很神奇的现象,为什么有时候行?有时候又不行?
5、所以又换一种方法:重新建一个网站目录,建phpinfo.php文件,结果是可以访问!把之前文件夹不能访问的phpinfo.php文件mv过来,又不能访问了!修改权限为777也不行。cp过来,就可以访问!
6、至此,很明了了,不是软件的问题,不是文件权限的问题,是系统的问题!SELinux在作怪!

如果不想改变SELinux的设置,可以改变文件夹的SELinux权限:
ls -alZ查看文件权限
可以正常访问的:drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0 html
不能正常访问的:drwxrwxr-x. www www unconfined_u:object_r:default_t:s0 test
比较一下就发现问题了,用命令修改test文件夹的SELinux权限:chcon -R -t usr_t test
这样就OK了!

参考资料:
http://blog.chinaunix.net/uid-26495963-id-3300475.html
http://www.codesec.net/view/538043.html
http://www.2cto.com/os/201504/394096.html
http://blog.csdn.net/u012511616/article/details/52735539

另外,如果php文件中连接mysql的地址不是localhost,而是一个网址或者外网的IP,那么这个时候SELinux又要限制了,页面会报错:Error establishing a database connection
如何修改:setsebool -P httpd_can_network_connect=1
参考资料:http://www.jb51.net/article/52581.htm