PowerRC's Blog

Posted by:
PowerRC

码农,吃货,偶尔飙车和摄影,应该属于危险人物。

4,099

apache/nginx 没有访问权限的另类原因

先说原因,就是SELINUX。
selinux会阻止nginx/apache访问没有被打上安全标签的文件。
这种情况下,从浏览器访问,apache和nginx都会报错403。
文件不管是和程序同一个用户,还是具备777或者755模式,都不可以访问。
如果各位有遇到apache/nginx没有访问权限的情况,建议先看看selinux是不是被打开了。
查看的办法很简单,用这个命令

1
getenforce

如果返回结果是enforcing,那就是被打开了。
不建议服务器环境长期关闭selinux,。

------------------------
再来说下我遇到的经过。
今天我从自己的电脑,tar打包了一份代码,传去测试服务器,准备部署。
碰巧刚重装了系统,可能是环境差异所致,这份tar文件解压出来的所有文件,都不具备selinux的安全标签,所以nginx/apache都访问不了。
因为连html文件都无法打开,所以我一开始也以为是权限错误(确实,那个报错信息如果用来google,得到的答案都指向权限错误)
所以我把文件owner改成和运行nginx/apache一样的用户,结果一样。
我把文件mode改成777( chmod -R 777 xxxxx) ,结果一样。
然后我就百思不得其解。
nginx的报错信息是这个

1
2014/03/19 18:15:11 [crit] 10108#0: *1 stat() "/opt/testing/index.html" failed (13: Permission denied), client: 167.23.5.18, server: richard.test, request: "GET /index.html HTTP/1.1", host: "power.swift"

搞了半天,突然用systemctl status命令就看到这个

1
2
*****  Plugin catchall_labels (83.8 confidence) suggests   *******************...
Mar 19 23:03:53 richard.test python[16609]: SELinux is preventing /usr/sbin/nginx from read access on the file .

才发现,原来是被selinux阻止了。
我甚至还怀疑是nginx有bug了,所以中途换用apache,结果一样。报错信息类似,直接说设置的DocumentRoot 不是一个有效目录。

以前我一直用的是debian / ubuntu linux,在这些系统中,selinux默认是不开启的,我也没遇过类似的问题,真是贻笑大方。
关于selinux的详细介绍,请看这个https://linuxtoy.org/archives/selinux-introduction.html

版权申明

若文中未注明,则本文由 PowerRC 原创,转载请注明出处。

分享

发表评论

*

code

back up ↑