CentOS7关闭SELinux详细步骤,临时与永久关闭

前言

CentOS7 默认开启 SELinux,它是一套强制访问控制机制,经常和自行搭建的 Nginx、PHP-FPM、网站目录权限冲突,表现为页面 403、文件写不进去、代理被拦截。生产环境如果不想精细配置策略,最直接的做法就是关闭。本篇区分临时关闭和永久关闭,并给出验证方法。

一、先查看SELinux当前状态

# 查看运行状态
getenforce
# 返回 Enforcing 表示强制开启,Permissive 只记录不拦截,Disabled 已关闭
sestatus
# 也可看配置文件
grep SELINUX= /etc/selinux/config

二、临时关闭(重启后恢复)

# 切换为宽容模式,立即生效但重启复原
setenforce 0
# 验证
getenforce
# 返回 Permissive 即临时关闭成功

setenforce 1 可重新切回 Enforcing。临时关闭适合先定位问题,不想动配置时使用。

三、永久关闭(重启仍生效)

编辑配置文件:

vi /etc/selinux/config

把这一行:

SELINUX=enforcing

改为:

SELINUX=disabled

保存后必须重启服务器才完全生效:

reboot

重启后执行 getenforce 返回 Disabled 即永久关闭成功。

四、两种方式区别速记

方式 命令/改文件 是否立即生效 重启后
临时 setenforce 0 是 恢复为Enforcing
永久 /etc/selinux/config 改disabled 否,需重启 保持关闭

五、常见坑

  1. 只 setenforce 0 不重启改文件:重启后又自动开启,问题复现;
  2. 改了配置不重启:getenforce 仍显示 Enforcing,以为没改成功;
  3. 改错变量名:是 SELINUX= 而不是 SELINUXTYPE=,后者是策略类型别动;
  4. 急着排查时建议先临时关:验证是不是SELinux拦截,确认后再决定永久关,避免一刀切损失安全性;
  5. 某些面板/容器环境改完仍受影响,可用 sestatus 复核当前模式。

总结

临时关用 setenforce 0,永久关改 /etc/selinux/config 为 disabled 后重启,最后用 getenforce 确认。排查403、写入失败时,SELinux是经常被忽略的一层。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-20 07:25 

Nginx 403 Forbidden权限不足原因与解决

前言

打开网站突然报 403 Forbidden,权限不足。这是 Nginx 最常见的报错之一。本文讲一下 403 的常见原因和解决办法。

403 是什么意思

403 Forbidden 表示服务器理解请求,但拒绝执行。说白了就是 Nginx 不让你访问这个文件/目录。

常见原因和解决办法

原因1:文件/目录权限不对

最常见的原因。Nginx 运行的用户(一般是 www)没有权限读文件。

检查权限:

ls -l /var/www/html/index.html

如果是 644 以下,或者属主是 root,Nginx 就读不了。

解决:

# 改文件权限
chmod 644 /var/www/html/index.html

# 改目录权限
chmod 755 /var/www/html

# 改属主
chown -R www:www /var/www/html

原因2:首页文件不存在

访问网站根目录,但没有 index 首页文件。

检查:

ls /var/www/html/

看看有没有 index.html 或 index.php。

解决:

  • 把首页文件名改成 index.html 或 index.php
  • 或者在 Nginx 配置里指定 index
index index.html index.php;

原因3:目录没有索引权限

访问一个目录,目录里没有首页文件,Nginx 又没开目录列表。

解决方法一: 放一个 index.html 进去

解决方法二: 开目录列表(不推荐,不安全)

location /uploads/ {
    autoindex on;
}

原因4:SELinux 没关

CentOS7 默认开了 SELinux,会拦截 Nginx 访问文件。

检查 SELinux 状态:

getenforce

如果是 Enforcing,说明开着。

解决:

# 临时关闭
setenforce 0

# 永久关闭
vi /etc/selinux/config
# 改成 SELINUX=disabled

原因5:Nginx 配置了访问控制

Nginx 配置里限制了 IP 访问,或者需要密码。

检查配置:

grep -i "deny\|allow\|auth_basic" /etc/nginx/conf.d/*.conf

如果有 deny all 或者 IP 白名单,把你的 IP 加上或者去掉限制。

原因6:文件路径不对

Nginx 配置的 root 路径和实际文件路径不一致。

检查配置:

grep root /etc/nginx/conf.d/*.conf

确认 root 指向的目录里确实有你的文件。

排查步骤

  1. 先看错误日志
tail -f /var/log/nginx/error.log

日志里会写得很清楚是什么原因。

  1. 检查文件权限
ls -l /var/www/html/
  1. 检查 SELinux
getenforce
  1. 检查 Nginx 配置
nginx -t

常见坑

坑1:只改了文件权限没改目录权限

文件权限是 644,但上级目录权限不对,Nginx 还是进不去。

解决: 一级一级改目录权限:

chmod 755 /var
chmod 755 /var/www
chmod 755 /var/www/html

坑2:上传的文件是 root 创建的

用 root 上传了文件,文件属主是 root,Nginx 用户读不了。

解决:

chown -R www:www /var/www/html

坑3:SELinux 改了没重启

临时关了 SELinux,但重启服务器又开了。

解决: 改配置文件永久关闭,别只 setenforce 0。

坑4:用了 CDN 或 WAF

前面有 CDN 或 WAF,它们拦截了请求。

解决: 直接用服务器 IP 访问,看看是不是还是 403。如果直接 IP 访问没问题,就是 CDN/WAF 的问题。

总结

原因 解决办法
文件权限不对 chmod 644 文件、chmod 755 目录
首页不存在 放个 index.html 进去
SELinux 拦截 关闭 SELinux
IP 被限制 检查 Nginx allow/deny 配置
路径不对 检查 root 配置
属主不对 chown www:www 目录

记住: 403 先看错误日志,大部分问题日志里都写得很清楚。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:28 

CentOS7 关闭SELinux详细步骤,临时+永久关闭

前言

刚装完 CentOS7,部署网站的时候老是遇到各种权限问题:文件明明权限对了还是访问不了,端口也开了就是连不上。排查半天发现是 SELinux 在捣乱。SELinux 是 CentOS 自带的强制访问控制安全机制,安全性很高,但对新手来说确实不太友好。本文详细讲一下怎么临时和永久关闭 SELinux,以及关闭前需要知道的注意事项。

什么是 SELinux

SELinux(Security-Enhanced Linux)是 Linux 内核的一个安全模块,提供强制访问控制(MAC)机制。它比传统的自主访问控制(DAC)更严格,不仅看文件权限,还看进程和文件的安全上下文(SELinux 标签)。

CentOS7 默认开启 SELinux,这也是为什么很多新手部署完网站各种报错的原因——Nginx、PHP、MySQL 的进程和文件上下文不匹配,SELinux 直接拦截。

查看 SELinux 状态

在关闭之前,先看看 SELinux 当前是什么状态:

getenforce

输出可能是:

  • Enforcing:强制模式,SELinux 正在拦截违规操作
  • Permissive:宽容模式,只记录警告不拦截
  • Disabled:已关闭

也可以用这个命令看更详细的信息:

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

临时关闭 SELinux(重启后失效)

如果你只是临时测试一下,不想改配置文件,可以用这个方法:

setenforce 0

setenforce 0 表示切换到 Permissive 宽容模式,SELinux 不会再拦截操作,但会在日志里记录。这个命令立即生效,不需要重启。

验证一下:

getenforce

应该输出 Permissive。

注意: 这种方式重启服务器后 SELinux 会重新开启,所以只是临时生效。

永久关闭 SELinux(重启后依然关闭)

要永久关闭,需要修改配置文件:

1. 编辑 SELinux 配置文件

vi /etc/selinux/config

2. 修改 SELINUX 的值

找到这一行:

SELINUX=enforcing

改成:

SELINUX=disabled

3. 保存退出,重启服务器

reboot

重启后再验证一下:

getenforce

应该输出 Disabled。

三种模式说明

SELinux 有三种模式,大家可以根据需求选择:

模式 说明
enforcing 强制模式,SELinux 强制执行策略,违规操作直接拦截
permissive 宽容模式,只记录警告日志,不拦截操作
disabled 完全关闭 SELinux

建议: 如果只是临时调试,可以用 permissive 模式,既能放行所有操作,又能通过日志看到哪些操作被 SELinux 拦截了。生产环境如果实在搞不懂 SELinux,再考虑完全关闭。

常见坑

坑1:改了配置文件没重启就以为关了

很多朋友改完 /etc/selinux/config 文件,马上用 getenforce 查看,发现还是 Enforcing,就以为没改成功。其实配置文件改了之后必须重启服务器才会生效。临时生效用 setenforce 0,永久生效必须重启。

坑2:改了 SELINUX=disabled 但还有问题

有时候即使把 SELinux 关了,之前设置的安全上下文标签还在,可能会导致一些奇怪的问题。如果遇到这种情况,可以重启服务器彻底解决。

坑3:生产环境直接关闭有安全风险

SELinux 是一道安全防线,生产环境直接完全关闭会降低系统安全性。建议先尝试把模式改成 permissive,看看日志里哪些操作被拦截了,再针对性地调整上下文标签,而不是直接全部关掉。

总结

CentOS7 关闭 SELinux 的两种方式:

临时关闭(立即生效,重启失效):

setenforce 0

永久关闭(重启后生效):

  1. 编辑 /etc/selinux/config
  2. 把 SELINUX=enforcing 改成 SELINUX=disabled
  3. 重启服务器

新手刚部署完服务器,先临时关了跑通业务,后面再慢慢研究 SELinux 的配置,别一上来就跟它死磕。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-5 07:25 
'); })();