centos7 nginx(403)之SElinux
你是不是和我遇到的情况一样?把setenforce设置为0时,页面可以访问,设置为1时不可以访问并出现403
今天就来说一下如何查找并修改,即使selinux设为1时,也能通过。
准备
win10 ,虚拟机,centos7,nginx1.180版本,一些查看SElinux命令,有一定selinux基础
基本思路
①:配置好nginx.conf
②:查看当前SElinux有关信息
③:查看主进程type和要访问文件的type
④:在主进程中查到能够读取的文件类型
⑤:分析错误
⑥:修改并调试
配置好nginx.conf
查看selinux信息
查看当前selinux的状态
可以看出当前selinux为enforcing模式并且政策为targeted(针对网络服务限制较多,针对本机限制较少,是预设的政策),我们知道在target政策下,其实最重要的字段是类型字段,主体与目标之间是否具有可以读写的权限,与进程的domain及文件的type有关。
查看访问文件和nginx可执行文件的类型
可以发现nginx的类型为httpd_exec_t,而index.html的类型为default_t。接着查看http_exec_t能够读取的文件类型
发现httpd_t对default_contexnt_t有操作,对default_t没有,所以就匹配不上,出现403。
这里提示一下如果httpd_enable_homedirs没有打开的话。把它打开,因为它的意思是运行httpd进程去读取用户家目录的意思(如果你不打开也很访问的话,可以不打开)
分析403并求修改
查看错误信息
注意:setroubleboot会把错误信息写入/var/log/messages中
可以发现你请求的网页,被阻止了。并且提示输入sealert -l查看完整信息
下面是完整的分析
可以看出上面帮你分析了原因83.8是因为啥,17.1是因为啥,并且还给了提示命令。最后是附加的信息
最后按照提示最高的83.8的原因进行设置
我从上面选了有关httpd进程有关的类型,并在其中选择一个,输入一下命令
可以看到原来type类型的default_t全部换为了httpd_user_script_exec_t,输入网址验证可知是正确的