一、问题描述与原因分析
yum 安装 nginx 服务,配置好nginx进行web访问页面报错如下:
查看nginx日志报错:
[root@host-10-18-85-186 ~]# tail -100f /var/log/nginx/error.log #查看日志命令
再次查看 audit.log 以下错误信息
[root@host-10-18-85-186 ~]# cat /var/log/audit/audit.log #查看日志命令
原因分析:经确认是linux系统默认下SELinux处于打开状态,限制了nginx服务的访问。SELinux 是基于最小权限原则默认拦截了 Nginx 的请求,SELinux 是 Linux的安全子系统,提供更安全的访问控制,许多运维人员嫌麻烦可能会直接关闭此组件,但是治标不治本。本文提供了关闭SELinux组件和在启用 SELinux 基础上放行Nginx 请求的两种方法。
二、解决方法
1、确认 SELinux 运行状态
[root@host-10-18-85-186 ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
注:SELinux status为 enabled表示 SELinux开启,使用"/usr/sbin/sestatus -v"或"getenforce"都可查看,可使用下面命令进行关闭
# 临时关闭(临时启动命令: SELinux:setenforce 1)
SELinux:setenforce 0
#永久关闭(需重启系统)
vi /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
注:sed -i 's/^ *SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 命令可迅速关闭
注意:如果在启用SELinux 组件的情况下允许nginx服务访问,需进行下面2、3、4步骤
2、开启 HTTP 访问。
[root@host-10-18-85-186 ~]# cd /var/log/audit/
[root@host-10-18-85-186 audit]# setsebool -P httpd_can_network_connect 1
3、分析现有日志并生成关联模块,执行完此命令可以看到在当前目录下会生成后缀为*.pp和*.te文件,如果该服务器上的服务未被访问过,此命令执行无效。
[root@host-10-18-85-186 audit]# ausearch -c 'nginx' --raw | audit2allow -M my-nginx
4、加载前一步生成的模块内容
[root@host-10-18-85-186 audit]# semodule -i my-nginx.pp
完成上述操作nginx可正常访问!!!