centos7 nginx(403)之SElinux

你是不是和我遇到的情况一样?把setenforce设置为0时,页面可以访问,设置为1时不可以访问并出现403
centos7 nginx(403)之SElinux
今天就来说一下如何查找并修改,即使selinux设为1时,也能通过。

准备

win10 ,虚拟机,centos7,nginx1.180版本,一些查看SElinux命令,有一定selinux基础

基本思路

①:配置好nginx.conf
②:查看当前SElinux有关信息
③:查看主进程type和要访问文件的type
④:在主进程中查到能够读取的文件类型
⑤:分析错误
⑥:修改并调试

配置好nginx.conf

centos7 nginx(403)之SElinux

查看selinux信息

查看当前selinux的状态
centos7 nginx(403)之SElinux
可以看出当前selinux为enforcing模式并且政策为targeted(针对网络服务限制较多,针对本机限制较少,是预设的政策),我们知道在target政策下,其实最重要的字段是类型字段,主体与目标之间是否具有可以读写的权限,与进程的domain及文件的type有关。

查看访问文件和nginx可执行文件的类型

centos7 nginx(403)之SElinux
可以发现nginx的类型为httpd_exec_t,而index.html的类型为default_t。接着查看http_exec_t能够读取的文件类型
centos7 nginx(403)之SElinux
发现httpd_t对default_contexnt_t有操作,对default_t没有,所以就匹配不上,出现403。
这里提示一下如果httpd_enable_homedirs没有打开的话。把它打开,因为它的意思是运行httpd进程去读取用户家目录的意思(如果你不打开也很访问的话,可以不打开)
centos7 nginx(403)之SElinux

分析403并求修改

查看错误信息
centos7 nginx(403)之SElinux

注意:setroubleboot会把错误信息写入/var/log/messages中
centos7 nginx(403)之SElinux
可以发现你请求的网页,被阻止了。并且提示输入sealert -l查看完整信息
centos7 nginx(403)之SElinux
下面是完整的分析
centos7 nginx(403)之SElinux
centos7 nginx(403)之SElinux
可以看出上面帮你分析了原因83.8是因为啥,17.1是因为啥,并且还给了提示命令。最后是附加的信息
最后按照提示最高的83.8的原因进行设置
centos7 nginx(403)之SElinux
我从上面选了有关httpd进程有关的类型,并在其中选择一个,输入一下命令
centos7 nginx(403)之SElinux

centos7 nginx(403)之SElinux
centos7 nginx(403)之SElinux
可以看到原来type类型的default_t全部换为了httpd_user_script_exec_t,输入网址验证可知是正确的
centos7 nginx(403)之SElinux