您的位置:首页 > 运维架构 > Nginx

nginx 自定义web目录 permission denied (403错误 ) centos7 SELinux

2016-02-25 11:56 453 查看

nginx 自定义web目录 permission denied (403错误 ) centos7 SELinux

如标题:

系统环境为centos7;

web服务软件为:nginx;

SELinux安全服务为开启状态,并且setenforce 值为enforcing,即强安全防护;

问题:nginx默认web目录为/usr/share/nginx/html,但是由于某些原因,我希望能自定义web目录到/www。就这样,让我遇见了大麻烦!!!(耗费N个工作日),但我访问我的网站时总是提示403错误!

先说当你希望自定义nginx目录时需要做些什么;免得朋友们着急:

如果你的系统为centos7,并且开启了SELinux(比文件类型更强的安全防护),那么在你自定义nginx 的web目录时,你需要执行以下两个命令:

chcon -R -u system_u /xxx/
chcon -R -t usr_t /xxx/


(/xxx/为 你自定义的web目录)。

是的,就这么简单,只要你的文件权限通过,再设置这个,你就可以成功的自定义web目录了。

当然,如果你只是开发环境,你大可以直接关闭selinux,或者执行
setenforce Permissive
命令,使selinux保持宽容状态。

好了,如果以上内容帮助你解决了问题,下面的内容你就可看可不看,我来更详细的描述下遇到这个问题,我都做了些什么。

由于我也是linux新手,对于linux的一些概念不熟悉,所以遇见问题很盲目的,最开始遇到这个问题,我只能想到是文件权限问题,所以我不断地调整文件所属用户及分组,调整nginx的user 用户,除非我把nginx的user设为root,不然访问网站时,始终报403错误。但是如果服务器真正运行,不可能将user设为root啊。所以我又尝试着将我的网站目录文件访问权限设为777,即没有权限限制,但是仍然报403错误!!!所以这时侯我真的很迷茫!!! 所以我百度,谷歌,但是都没有找到解决方法,类似的问题,大家都是关闭了SELinux(当时并不知道SELinux概念)的,遇到的问题只是文件权限问题。

我查看过nginx的错误文件,也看过/var/log/audit/audit.log文件,当时作为小白的我根本不会去分析。

我通过以下两个命令,实现了web访问,

grep nginx /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.pp


但是在重启之后就失效了;

在stackoverflow看问题时,遇见有人通过setenforce Permissive 解决了问题,确实,通过执行这个命令,网站可以政策那个访问了,于是我就去学习了这个命令的作用,发现它是将SELinux的安全级别降低了,所以我还是不甘心,因为这个问题降低服务器安全防护级别岂不坑!所以我又将安全级别设回了Enforcing,于是我只得继续找寻解决方法;

慢慢地,我开始了解SELinux,知道了它的安全防御机制,还发现它有个文件增强类型控制,看到这里我就联想到了我的问题,既然我的普通文件权限没有问题,那么就一定是SELinux的增强类型的问题了,所以在谷歌我的问题时,就加上了SELinux 文件类型的关键字,果然我就搜到了一篇文章,然后接着,我就解决了问题。

文章链接:selinux相关的permission-denied问题

具体的内容,这篇文章里面有,我就不多说了,很感谢这次解决问题的经历,又让我学习了很多!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: