解决Selinux阻止Nginx访问服务

问题

开启Selinux后,Nginx非默认目录的时候会被Selinux阻止,看nginx日志为13: Permission denied

2022/11/12 01:18:19 [error] 8776#8776: *9 "/home/web/index.html" is forbidden (13: Permission denied), client: 60.186.xx.xx, server: zengwu.com.cn, request: "GET / HTTP/1.1", host: "zengwu.com.cn"

分析

出现此问题的原因是 Selinux基于最小权限原则默认拦截了 Nginx 的请求,Selinux是 Linux 的安全子系统,提供更安全的访问控制,总不能解决不了问题就解决提出问题的人吧,所以,这个可以添加selinux设置来解决。

解决步骤

1. 安装policycoreutils-python

yum -y install policycoreutils-python

2. 开启 HTTP 访问

setsebool -P httpd_can_network_connect 1

3. 分析现有日志并生成关联模块,执行完此命令可以看到在当前目录下会生成后缀为.pp和.te文件,如果该服务器上的服务未被访问过,此命令执行无效。

cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx 

4. 加载前一步生成的模块内容

semodule -i mynginx.pp 
0%