SELinux 开启导致 nginx 无法读取文件

11 条回复
59 次浏览

上周五上线了内部导航站,结果发现 nginx 启动后一直提示 403,检查了文件权限是正常的,用的 yum 安装的 nginx。
nginx:1.20.1
centos:7.9.2009
kernel:3.10.0-1160.119.1.el7.x86_64

检查来检查去,查不到问题,我就问 AI 是不是为 Linux 不允许 nginx 读取根目录,因为我把网页放根目录的一个文件夹里面了,AI 说可能是 SELinux 限制的,让我查文件类型。
image

按 AI 说的执行命令。
ls -Zd /nav
返回
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /nav

又问了一下 AI
image

基本可以确定是 SELinux 的问题了,需要修改文件上下文。
临时修改:chcon -R -t httpd_sys_content_t /nav
永久修改:
semanage fcontext -a -t httpd_sys_content_t "/nav(/.*)?"
restorecon -Rv /nav
如果没有 semanage,就执行:yum install -y policycoreutils-python

修改后重启 nginx 就正常了。

我去查了一下: https://www.php.cn/faq/1998831.html
确实有这种问题,以前装完系统就直接关了 SELinux,这次为了安全点就没关,没想到还有这种限制。

如果没有 AI 根据文件权限多一个点,多说一句,我估计还要个把小时才能想到是 SELinux,毕竟用的太少了,AI 多提了一句,节省了很多时间。

都听我说!

其他都没问题,最后还是是 403 就要怀疑这个了
我直接就是 disabled 掉,很少有人关注这个设定,一般都是一个自己 diy 的机子

前排打手
OP
GRD

我快怀疑到 se 了,只是觉得 nginx 又没有修改什么文件,操作系统什么的,只是读取文件而已,没想到还有上下文这种鬼东西。

前排打手
OP
GRD

AI 的知识面广,疑难杂症了解的多,有些问题搜索都不好搜,不知道搜什么关键词。

都听我说!

这玩意没有经验,没有 ai 根本就意识不来这个问题
天知道啥原因 403,当年我因为这个问题快把 google 搜烂了,在那一个一个试

所以对 403 反应奇特,尤其 nginx + python/php

展开 1 条评论
前排打手
OP
GRD

默认是开启的,一般都是先关闭再部署,我这次为了安全点就没关闭,直接开始部署,才遇到这个问题。

种子用户

我之前服务器开 docker 容器,然后外部访问服务器的网站,宿主机直接启动的访问正常,容器启动的直接超时。

排查半天发现 ipv4 转发被关了我擦。

前排打手
OP
GRD

以前做免流的时候知道这个,先开 IP 转发,然后部署,有的脚本也会自动处理。

都听我说!

以前新机器上线,首先就关了 SELinux 和 FIrewalld。。。cunning

发表一个评论

R保持