CentOS7关闭SELinux临时和永久关闭方法
SELinux(安全增强型 Linux)是 CentOS7 默认自带的强制访问控制系统,本意是限制进程对文件的越权访问,但在自建 Web 环境时,它经常莫名其妙地拦截 Nginx、PHP-FPM、数据库读写,表现为“权限明明给了却报 403、访问被拒”。排查成本高,很多新手会直接选择关闭。本文讲清临时关闭和永久关闭两种方式,以及验证方法。
一、先查看 SELinux 当前状态
getenforce
返回 Enforcing 表示强制开启,Permissive 只记录不拦截,Disabled 表示已关闭。也可以用:
sestatus
看 Current mode 一行确认当前模式。
二、临时关闭(重启后失效)
只对本次运行生效,适合临时测试,服务器重启后 SELinux 会重新回到 Enforcing:
setenforce 0
setenforce 0 = 进入 Permissive(临时放行但记录日志),setenforce 1 = 切回 Enforcing。执行后再用 getenforce 确认变为 Permissive。
注意:setenforce 无法在 Disabled 状态下切换,这是正常现象。
三、永久关闭(重启后依然关闭)
永久关闭要改配置文件 /etc/selinux/config:
vim /etc/selinux/config
找到这一行:
SELINUX=enforcing
改成:
SELINUX=disabled
保存退出后必须重启服务器才生效:
reboot
重启后再执行 getenforce,显示 Disabled 才算永久关闭成功。
四、只对个别目录放行(推荐替代方案)
如果不想整体关闭,可以用 semanage 给网站目录打标签,而不是一刀切关掉 SELinux:
# 给网页目录设置 httpd 可访问标签
semanage fcontext -a -t httpd_sys_content_t '/www/wwwroot(/.*)?'
restorecon -Rv /www/wwwroot
生产环境更建议保留 SELinux、只修正标签,安全性更好。
常见坑
- 改了 config 却没重启:getenforce 仍显示 Enforcing,永久配置必须重启才加载。
- 只执行 setenforce 0 就以为永久关闭:重启后又被拦截,这是最常见误会。
- 配置里 SELINUXTYPE 不要乱删,只改 SELINUX= 这一行的值。
- 部分云镜像默认就是 Disabled,setenforce 会报错,属正常。
- 关闭 SELinux 会降低系统安全性,公网服务器务必配合防火墙和最小权限使用。
总结
临时关闭用 setenforce 0,重启即失效;永久关闭改 /etc/selinux/config 把 SELINUX 改为 disabled 再 reboot,最后用 getenforce 验证。生产环境能靠 semanage 修正标签解决的,尽量不要整体关闭。
遇到问题加QQ23979811 协助处理